If software were houses
chromatic asks “if we built houses like we build software”, but I think the more interesting question is why we don’t build more software like we build houses.
Consider what it takes to build a house, at least in the US. You don’t start putting up walls without laying a foundation. Before you even get that far, you probably have to explain to some municipality what you are going to do and how you are going to do it. The people that do the work probably need to be licensed, bonded, and insured. The people who work on site usually have to go through an apprenticeship path and work under supervision. People have to renew their licenses, take professional development classes, and learn all the new building codes. City inspectors come out to see the job site, verify permits, and monitor the work. There’s a hard deadline when your building permit expires. You only get to use certain materials, and the materials that you use don’t affect the plans and construction of the building around you, and it’s your job to source, deliver, store, and ultimately cart off everything. There are lots of things you can’t use when you build your house. There are many things that you can use if you have a lot of money. What you get to do might depend on how friendly your architect or lawyer is with City Hall.
At the end, if your house sucks, no one buys it and you declare bankruptcy. Maybe the State revokes your license. You might not even get to finish because the City might step in with a “stop work” order if you aren’t doing it right, actually putting City locks on your door or gates so you can’t get in. The people who can shut you down don’t have a stake in your success or failure. Maybe the INS raids your worksite and takes away half of your workers. If you can sell it, there’s another person who has no stake in it who comes by to assess it and assign a value to it. And, even after you sell it, you’re not off the hook for awhile if you did something wrong. If you did everything right, the building codes might change again and the new owner has to update everything.
There are some software projects that work like that. If you’re building medical devices, aircraft control system, or power plant operations software, you might go through the same process. However, you won’t find Perl in those roles. For the most part, Perl development happens by throwing some people in a room and crossing your fingers. The developers get paid regardless of the work, and even if it sucks, it lives on. Sometimes, the developers even get to keep their jobs. Few developers get the chance to have a dedicated production machine where they can control everything. We’ve gone far past the days when computing power was scarce enough that the operators actually had to trust you not to waste your cycles, both in terms of what you were doing and how you did it.
If software projects were run like construction projects, we’d probably never get anything done, there would be far fewer available programmers for hire, and most of us wouldn’t want to be in the business. Some of us might be in jail for illegal programming without a license.
Instead, we let anyone use a computer and no one has to approve of what you do and how you do it.
Surely that has led to a lot of value in the world, but I think it has wasted much more effort. Since it’s so easy to do, there isn’t much to stop someone from wasting time on any endeavor. The lack of scarcity and cost means that we make poor decisions about our time and activities. It costs us almost nothing to build a shitty house, so that’s what we do.