Why developers question everything
30 points by DanOpcode
30 points by DanOpcode
The cost of change in software can be exponentially higher after the implementation.
Funny saying this in contrast to a physical object. Changing software means like…. idk typing something on a computer. Changing a real world build means likely paying for at least partially demolishing what you just paid to be built, then paying to have it built again, both labor and material. I’m more concerned about designing a physical object up front compared to iterating on some software.
When you get the wrong toilet in your bathroom refit, you can usually explain immediately what’s wrong with it and what you actually wanted. You have undoubtedly used a toilet before, and in a few seconds the contractor can guide you to the realization that you want a sink quite close to the toilet. You can look at a bunch of toilets in a catalog with prices, and you know that you should expect to pay for 3-4 hours of labor at the current rate.
In rare cases you will discover that the range of available toilets is limited because of decisions made twenty years ago and you sigh and pick the one that isn’t as awful as the other. They both work, though, because the interfaces are standardized or have really cheap adapters. When you hire a licensed plumber, you expect them to be competent in all aspects of their field, to know the codes and standards and local suppliers, and your insurance will cover a truly egregious disaster as long as you made sure your plumbers and contractors had the required licenses.
In the software world, every building is custom-made without an electrical code, plumbing code, or building code with required third-party inspections. It might be the work of seconds to change the carpet color, but take weeks to add curtains to the windows. Some clients, some users and some of the developers have never used a toilet before, much less designed one, and it is common for the drain to end in the ceiling of the basement.
Let’s talk about how hard it is to change people’s minds and expectations. Change Management on an installed base is a long and difficult process. Sure, change the code all you want. Tread lightly and still suffer the consequences.
Q — How was God able to create the world in only six days?
A — No installed base.
https://vdare.com/posts/government-and-the-installed-base-it-s-complicated
I found the quoted article in the link you sent a nice read on how structures, and systems naturally tend to grow complex, even if they start simple.
After a few decades of watching, I think our careers change (or amplify) aspects of our personalities. Developers become pedantic about detail (because that’s necessary to build working programs). Sales folks excel at agitating a response (triggering engagement is a core skill). Marketers get better at drinking wine ;-). Actually my hypothesis isn’t very complete… But it seems plausible that spending thousands and thousands of hours using a skill changes how we relate to the world.
Game night with career therapists and social workers is a lot different from one with engineers…
Or, inversely, the profession attracts specific personalities, i.e., pedantic people are drawn to software development, extroverts to sales, etc. Likely a bit of both.
I know I was already very pedantic way before I got into computers =P
You get really tired of building the wrong thing, later to find out it was because someone else prescribed the wrong solution instead of giving you their problem. Its not quite as simple as the remodel example, because even though the remodel will have complications during implementation, the remodel happens. It’s not like the remodel would be finished and then the home owner steps back like “wait actually we wanted the kitchen remodeled, not the bathroom. I won’t pay for this, and need you to remodel the kitchen as fast as possible now to meet my deadline.”
So yeah. I am going to question everything, from everyone, all the time. It has made me noticeably more cynical over the years, which I am not very thrilled about, but hey, software makes me money and I need money to do things that make me happy later to pay down this cynicism debt I have collected?! Going to stop thinking about how dumb this is now.
Contractors typically don’t have to work with multiple uncooperative systems to link them together, usually it’s very simple, want this sink replaced? Contractor will replace it, want some tiles, here are some choices of tiles. With software integration it is much different, developers need to spend a lot of time integrating systems which aren’t necessarily as plug and play as sink and pipe, so they need to make the whole in the wall first.
Not to call you out or anything, but you have a very rosy tinted view of what “simple” home renovations entail.
Want this sink replaced? No problem, but the old one was from pre 1992 which means the pipe goes in the floor instead of the wall which is the code now. Also, it was installed with piping the customer bought in their home country which has a different diameter than anything you can buy here in 2025. Also, the studs are supposed to be 600mm center-to-center but for some reason this wall is 450mm, so you have to rip up the wall to add bracing studs. Oh, you tore down the wall? I guess you need to rebuild it and retile it. And while we’re speaking about tiles - here are some 4000 variations to choose from, none of which look like the old tiles.
Becoming a house owner has massively upped my respect for “simple” trades.
Your example of renovating a house as a layman is a bit like “hobbyist software developer should fix bug in enterprise software” though, and not “I’m replacing the siphon under my bathroom sink” which is very much a scoped activity that will not have catastrophic failure modes.
Furthermore “home renovation” would typically include people of like 5 vocational trades, and not one (software developer). I also don’t want to disparage their work in any way, but I do think fixing kernel bugs and writing react frontend software are about just as far away from each other as putting up drywall and making a wooden bed frame.
putting up drywall and making a wooden bed frame
A carpenter might do both of those, no? (Probably a better example of carpenter vs electrician)
I think humans have a difficult time dealing with the abstract than concrete. Software development is an abstract activity, while home renovation is not. Even with mismatched and dated pipes and nuts and bolts, you can actually see them, measure them, and probably fix that problem with little effort once all measurements are in place. No such visualization exists in software except for what the developer decides to create, making it even harder to integrate old system with new.
Not arguing complexity of trades, just making a different point about abstract vs concrete.
Software development is an abstract activity, while home renovation is not.
One of the things that has shifted for me over the years is somewhat abandoning this notion. Software development is only, to me, an abstract activity if the software itself is designed in such a way as to be difficult to reason about or “physically” trace the flow of execution. In the end it ends up being a stream (or multiple streams) of instructions that get executed in a largely deterministic way. You can’t always visualize every possibility, but that happens often enough in mechanical engineering too when things start getting treated abstractly (oh, I can’t access this bolt if the alternator is installed, which wasn’t the intent but it’s how it all came together after different teams bolted their parts together).
I’ve been in enough server rooms with poorly labelled and disorganized cabling to accept that sometimes the physical world isn’t tractable either without significant amounts of work. And… the house I’m currently living in violates the “you can actually see them” principle by being a slab (no basement) with all of the plumbing encased in the concrete floor. Any notion I have of how the sewer lines are actually laid out beneath me is completely abstract without using a jackhammer or other more exotic non-destructive inspection tools. Overly abstract software can be treated in exactly the same way using things like AOP-based tracing tools or even single-stepping with QEMU. It sucks but it’s concrete (pardon the pun).
Interesting, never thought about it this way… you just changed my perspective, and thank you for that.
Fun fact, a rant almost exactly like this what originally inspired the Crossover Project. I’ve been hesitant to compare software to other fields ever since, unless I either have done them personally or have interviewed people who had.
Bruh, this project of yours (more specifically, one of the talks you gave on it) haunts my mind ever since and will mention it, without fail, every time someone pulls up the old software development vs civil engineering comparisons =P
Here’s a short version of my journey in this regard:
This has reminded me how very very little I know about home renovation (I’m a renter), but yeah when you put it that way it is true in a sense that integrating software is similar to home renovation. When renovating software though we know most of the integration challenges ahead of time, meanwhile I guess with home renovation you won’t know about the size of the pipe till you look at it.
also the cupboard you wanted there in the corner will leave a 5cm gap, what would you like to do with that?
also there’s remnants of an old firewall (in the original sense!) that we need to hack off to make this board fit
also your floor tilts in two different directions at once
Author here.
I appreciate all the comments, it’s a big topic, and can be very subjective! I see that my comparison isn’t bulletproof, and after reading the comments here I see more shortcomings, heh. Although, I think the comparison still holds water. But I guess the physical world is “simpler”, because the plumbing behind the walls won’t change its dimensions or its content overnight because a PM decided it was better for business.
I think the difference is, that “building” the wrong thing is more uncommon in private home renovations. When I want to renovate my bathroom, what the result should look like is clear from the start and likely won’t change that quick.
When in software development, we mostly work iterative, so we try to implement the quickest and easiest solution for a certain problem, which then evolves into a new problem, because the customer decided that he needs this feature on top.