Too many vocations are plagued by the assumption (from outsiders) that “I could do that if I wanted to”, leading to work done in that field being under-valued. To an extent, this happens with anything1 (see also: Dunning-Kruger Effect, The), but it seems particularly evident with creative pursuits.
Spend any time interacting with artists/writers/musicians/etc. and you’re bound to hear stories about being “paid in exposure” (which as everyone knows is accepted at all quality retailers). I think part of the problem is that the tangible outcome of their work is a relatively minor part of it. Most of a writer’s work is not in the typing of the words, but of the planning, researching, editing, that can’t be easily/accurately measured. Watch a bricklayer work for an hour and there’s part of a wall that wasn’t there before. Watch a writer and they may seem to be staring into space half the time, and end up crossing-out anything they do put on paper; there’s nothing to see, but they are one hour closer to finishing their project.
And I think software development falls into that category, too.
Not because what’s being produced is a work of art, or even especially innovative. Most of the time, software is doing fairly standard things: take inputs from the user, read/write files, send/recieve data to/from other computers, perform calculations. At the theoretical level, all computations are built from the same handful of simple operations2.
Software is something mass-produced, with the quirk that there’s essentially no cost (in either time, money, or effort) to make another copy. Think of a factory production-line putting a car together: there’s a lot of parts that need to be assembled, and eventually a car rolls out the door. To make another car, you have to run through the whole process again; you can’t just hit copy-paste.
If there’s a problem with the cars (say, the indicator stalk keeps falling off), you replace one part, and the process goes on largely as before. Maybe some settings need to be tweaked, positions changed slightly, but nothing major. That’s one of the benefits of a production-line. This solves the problem for new cars, but doesn’t fix the ones already on the road. Each car has to be individually examined, its parts repaired or replaced, before the problem is fully solved.
With software, by contrast, it’s easy to deploy a fix. Our computers check for updates every time they connect to the internet. Mostly, this happens in the background, and we don’t need to think about it (barring the occasional “Please restart” message). It’s exactly like one of the creative pursuits I talked about earlier: it has little or no tangible effect3. Which means people think the whole fix is just as easy.
Imagine if you could create another car, exactly like the one you have, just by tapping on the roof a certain way. You’d only ever need to make one of each car. So your car factory wouldn’t be able to work the same way. You’d either have to make your production line incredibly adaptable, so that you could adjust it to the parameters of whatever you were making, or you’d construct each car “by hand”, like one of the smaller, bespoke car-makers. Either way, it takes more time and effort to produce one car than before.
So how does that effect fixing a problem (like a faulty indicator)? You’ve either got to do the repairs on your “template”, with all the potential complexities of having to take the whole steering column apart to get at some fiddly, hard-to-reach part, or you have to build a new one using a different indicator stalk. Sure, once it’s done you can do the magic tappy-tap on the roof and everyone’s car is fixed, but there’s a not insignificant job in fixing it in the first place.
Oh, and did I mention that indicator stalks are made the same way, so you probably can’t just go out an get a different one and expect it to work. It’ll be a different size, or be designed to go on the opposite side of the steering column, or have a button for the horn on it. That’s assuming anyone else even bothers making indicator stalks, because someone already does and can duplicate them indefinitely, so it turns out it’s the same indicator stalk with a different logo…
Basically, with software: any project is a new project that’s never been done before. Any problem is a new problem that’s never been seen before. Software production is more akin to the blacksmith than the assembly line4.
1 For example, the couch jockey who, because they’ve managed to sink a basketball at least once, scoffs at an NBA player missing a shot.
2 Obviously computers are far more complex and advanced than the room-sized machines of the early years, but this all goes towards making them faster/more efficient. Their nature is still the same. Quantum computers might change this, but we have to actually make one first.
3 There are effects, sometimes quite significant ones, but as they tend to be things like “a hacker can no longer sneak into your computer by pretending to be this particular model of printer”, most people won’t see any difference.
4 Complete with both “esoteric knowledge passed down to initiates” and a fair amount of autodidacticism.