Move Fast and Ship Junk
Hold onto your hats, brave and controversial opinion alert!
It is neither inevitable, nor desirable, to ship software containing bugs.
Are you shocked? I'll admit I'm a little surprised at how viscerally certain kinds of people in software react to this. I suppose it goes against the ever-infallible common-wisdom. Let's unpack it.
Obviously it's impossible to guarantee that something works, right? We have no reason to believe software is some special animal here. Cars, Planes, Agricultural machinery, none of these can be relied on to work correctly, even brand new.
Taking my tongue out of my cheek, this is sort of true. Cars break down, but there's a difference. We expect our cars to start. It's strange when they don't. Furthermore we can tell if a car is likely to start reliably and when it is not, there are experts capable of doing that.
Given this, we should move forward under a weakened and more realistic assertion of what working software means. I would define it as
⦁ Reliability in the 99%+ range.
⦁ Ability to inspect software and make an informed decision on whether the above reliability guarantee will hold in any given environment.
Okay great, with a definition that matches physical systems, we're all good. This is how serious software works currently right?
Does it fuck.
The next argument goes that, well, you can get software that operates like this, if you're willing to put an undue amount of effort into paranoid coding standards and triple checking everything, but it's just not worth it. Software isn't that important, the risks involved with delivering broken behaviour is so low, moving fast yields better outcomes in the long haul.
I have so many objections to that line of reasoning, here are some of them:
Plenty of software is vital. You may roll your eyes at this. Of course if you're building a space shuttle you're going to do things differently. That's not really the point though. Do you know how your software is used, really? Most important software is components and libraries, or otherwise used as an element in a grander workflow. Do you think your software gets audited? Do you think we, as a field, are capable of auditing software?
Where is your disclaimer that states you have no real idea if your software can be relied upon in any given environment? Don't balk at this too soon, it's not as ridiculous as it sounds. “This software is exercised in X environments to Y degrees of rigour. It may work in other environments but we make no guarentee’s.” is good enough. Understand what your software is and be honest about it, no one's going to judge you.
Why does software get a free pass in terms of the responsibility we take on? If my new boiler started exhibiting strange, inscrutable behaviours three months after install, am I just to shrug? No, someone is responsible for that. I'm not here saying that I need to get angry at the installer, humans do make mistakes, but nonetheless it should not happen and someone needs to remedy the situation, and make sure it does not happen again.
Software seems unique in that producing it seems to come with little to no personal or organizational responsibility. Our craft cannot be the bedrock of the global economy and simultaneously not important enough to give a shit about.
I think we need to be held legally responsible here, as software engineers, maybe even as individuals. Doctors don't get to hide behind “The hospital made me do it,” so neither should we. I know that's scary. I know it's hard to imagine working in ways where we are accountable, but we can get there. Not only will this make software better, but it will also imbue engineers with more agency. When a profession is legally liable, that profession will be forced to develop mechanisms to push back against enshittification pressure, there will be no other option.
Reliability doesn't have a 1:1 correlation with cost. Think of the most reliable appliances in your home. Whilst they may not be the cheapest , regretfully there is still a market for corner cutting even in physical goods , I bet they are among the cheapest, especially in relation to expensive high-complexity gadgets and gizmos. This is because the manufacturers of those things figured it out. They removed the ambiguity from their craft and turned it into a science, which then allowed them to cut costs in controlled, comprehensible ways.
Software as a field needs to advance. No it's not something you can just do as an individual contributor or even as a company, but it's possible if we all pull together. We need standards bodies, we need professional accreditation. We probably need to reduce the amount of working software engineers in general as we hold ourselves to higher standards. It'll be a long road, but don't let a perverse system motivated by ever increasing wealth extraction convince you that what we're doing currently is either good or inevitable. It isn't.