(What follows is the introduction to Out of the Software Crisis)
This book is born out of frustration.
It’s common for men (especially men) my age to lament the decline of this or that. New inventions suck. Old inventions that were new when you were young are great. It’s a complaint that dates back to Cicero’s time. People idolise the culture of their youth. The hardships of the past fade from memory.
This book isn’t that.
We did have, once upon a time, apps that were… okay. Possibly good, even. There was a period when many of the major tech companies did regular user testing to prevent regressions in usability, and when a meaningful proportion of the apps available on a few select Operating Systems seemed to have a decent design and user experience.
Software has always been bad, but many of the hardships of poor software have been lost in a haze of nostalgia. These apps may have been better designed, but they also didn’t have to account for as much variety in screen sizes or inputs. Most of them didn’t support proper multitasking, and stability was next to nonexistent. They crashed, a lot. Accessibility just wasn’t a thing. Admiring retro software is like admiring the architecture of a classic building while forgetting that it’s a condemned deathtrap and every other building like it burned down, killing every inhabitant.
Great apps are rare.
We remember the designs and how well they worked for those limited contexts but forget the crashes and the data loss. We remember the initial awe at seeing powerful collaborative tools at work, forgetting how hard it was to use in every other way and how limited it was for anything other than collaboration.
My frustration doesn’t come from pining for a lost past that never existed. I’m not hoping for a restoration of a mythological golden age of software. We’ve always been shit. I’m glad for the exceptions, but that’s what they are.
My frustration comes from a desire for us to be better. I’ve been making websites for over twenty-five years. I’ve seen the exceptions to the rubbish norm happen. I know we can do better; I know we can be better; I’m not expecting us to fix the unfixable or achieve the impossible. I want us to suck a little bit less at what we do.
I want designs that are just a little bit nicer to use.
I want web apps that are just a little bit more reliable.
I want user interfaces that are just a little bit less confusing.
I don’t think that’s an unreasonable goal. I believe that software quality is dictated by the system that made it. It isn’t decided by the process, team, platform, or programming language, but by the system that integrates those elements into a functioning whole. That means we can improve most software simply by looking at how elements flow from one part of the system to another and how they interact. We can improve without throwing away what we already know, without adopting this week’s new process or framework. We can make that enterprise app a tad more pleasant. We can make that productivity web app less flaky. We can make it so that we can find our way through even the most involved intranet.
I believe we can do this. We just have to want to.
Software projects keep failing, not because we don’t have the right team or tools but because our software development system is broken. Out of the Software Crisis is a guide to fixing your software projects with systems-thinking making them more resilient to change and less likely to fail.