The one thing that took me a long time to realize is that even when it comes to something like software if you throw enough half-assed labor at a problem there is a reasonable chance that eventually something of significant legitimate value can be created. No, it probably won't be as good as something created by a bunch of geniuses, but it can still end up being "good". When you play the long game or the big game you can afford to rely on half-assedness to work out in the end.
The combination of all of these factors makes software a different sort of beast than a lot of other work. Now, as I said, that doesn't mean that you can't still attack it with brute force and obtain results, but software is actually one of the realms where that is one of the least effective strategies.
Your statement about design vs implementation shows that you're clearly outside of your knowledge space when talking about other disciplines. Depending on bridge span, length, and construction method, the man hours required for design can be much more than those required for construction.
Software is not really all that different from any other type of work. It even shares the trait that people that are part of the software sector think that their sector is somehow inherently different.
I haven't said, nor do I mean to imply, that my dad is better than your dad, err, I mean, that software development is somehow on a higher plane or superior to other work. However, there is something that sets software apart from most other work in that it is almost entirely design work, even "construction" is design work. (Of course, there is often something that sets most genres of work apart from other genres too, every industry has its unique aspects.) A particular engineering task might require more man-hours in design than in construction but that is an edge case, and the ratio is unlikely to be higher than an order of magnitude, the norms still apply. And again, software sees a rather larger range of scale than almost any other industry. The difference in, say, the amount of data handled by a given piece of software can range from a single byte (or even a single bit) up to petabytes or higher (the LHC processes zettabytes of data per year). That's 21 orders of magnitude. The difference between the smallest features in a microchip and the longest superhighways on Earth is only 15 magnitudes, and those are considered to be hugely different industries.
The main point I wanted to get at though was that due to the primacy of design individual talent can often have an outsized impact on overall product quality or capability. You certainly see that in many other disciplines but not necessarily on the same scale. Because, again, it's not terribly rare to have a situation where a piece of software developed by a single developer is just generally better than one developed by a team working at a multi-billion dollar mega-corp. That's the equivalent of some guy building a Mach 10 plane in his garage that runs on solar power. You tend not to see extremes on such magnitudes outside of software.
Indeed, it's even a driving force in the industry, as the idea of being able to build some new or better product from nothing and scale up to a billion dollar company in a matter of years starting from only one or two founders is rather common in software and shockingly uncommon outside of it.
1. Spans N orders of magnitude in scale which is M orders of magnitude more than X sector.
2. A single individual can put out superb products while some teams put out mediocre products.
3. The possibility exists for companies to be created with J founders and reach a valuation of K in L years.
Sorry, but none of these are unique to software. They're just the same arguments for anything else with different values for the variables.
Again, your sector is not unique. Last time we thought software was a unique sector lead to the great "paradigm shift" (as Greenspan called it, I believe) of 2000. You might know it better as the dot-com bubble.
That this makes two industries "equivalent" is an even more far-fetched claim than InclinedPlane's.
This makes me pretty indispensable. It also helps that before I arrived the guy in charge of the company had a bad time with at least 3 developers. If there is something I cannot do he tasks me to find someone and manage them so you know...
Obviously, guy could find someone else. Someone else could take the reigns of what I am doing. However transition time and the guys past experience with developers makes this very unlikely.
He operates in a market for lemons, but one day it may be more comfortable for him to risk getting a Lemon Consulting firm than live with the stress of one guy who might leave and take the whole thing down with him.
Ask yourself this: do you get paid for the risk of you leaving? And ask yourself this: can your family enjoy you when you feel bad?
I learned this lesson the hard way, long ago, in exactly that same situation -- it took two times -- by attempting to use leverage I didn't actually have but believed I did.
I hope most people are less dense than I was (hopefully "was" is the right word there), because no matter what percentage of the work you do or how deep and unique your knowledge of a system is, you can be replaced. It may not be easy or quick, but if you make yourself a nuisance, get on someone's bad side, or any of myriad things in and out of your control, you can and will end up on the chopping block, wondering what just happened.
Not saying it cannot be done, but it would lose them a ton of money. Yep, it's a double-edge sword because it puts a non-trivial amount of pressure over me. Even if they found someone with the rare combination of skills required, it would set them back years in the most optimistic scenario.
So yeah, "indispensable" people do exist. In the sense that you can lose big by parting ways with some people and not effectively replace them. Obviously life would go on, eh.
Managers should encourage employees to become highly valuable and at the same time manage the risk of those employees leaving some day - preferably mostly by creating the right environment for those employees to flourish.
The option was basically not doing it. Since I made up for my cost it wasn't a bad idea I guess. Now if I get struck by lightning then they will lose future earnings but that's that. It's a big company and other parts of the company would continue just fine.
Not all resources are exchangeable, esp. when some niche research is involved.
I think more than often the real challenge is the knowledge, not the skills. IIRC there was a post linked HN about that problem, written by GitHub or Stripe maybe ?
Contracting, though I've never done it, sounds like a much healthier relationship between employer and employee. It does have it's own negative aspects though. I wish full-time jobs weren't such adversarial relationships where you're either with us or you're against us, if you quit.
Of course a company can always find another fool to replace them.
Many smaller businesses work that way. They have a core group of often arrogant and unskilled old-timers that for one reason or another, cannot and will not be fired. I've seen this more than once, with clients and companies I've worked for.
The company cycles through talented new employees every other year. Once these employees are burnt out and move on to greener pastures, the company will find a new sucker to fill in their shoes. Rinse and repeat.