Out of the Software Crisis
Systems-Thinking for Software Projects
Most software projects fail…
- If they don’t go over time or over budget, they don’t fulfil their requirements.
- If they fulfil the requirements, then the requirements were wrong.
- If we did the user research, got the requirements right, and delivered on time and within budget, then we still fail because bugs spawn out of nowhere as soon as it gets in front of an actual user.
- The frameworks and dependencies that were supposed to save time keep changing, forcing rewrites.
- All this causes subsequent sprints and projects to go over time and over budget.
Even when a project goes well, that never lasts because software isn’t just for one project. Software is forever. Or, it feels like it is. It always seems to go wrong eventually.
We try to fix it with better tools and processes. Things improve for a while. Then everything starts to fall apart again, just in slower motion.
Coders and non-coders, designers and non-designers, managers and direct reports, we all try our best, and stick to our field’s best practices—we’re doing the right thing—but success never materialises.
None of our projects work nearly as well as we’d hoped. Our careers are a succession of half-baked software.
You think you’re ready to make software
You’re a manager and you’ve got your processes running like clockwork. The deadlines are realistic. The requirements are clear. You’re using a hot new framework. It got you up and running in record time. The designer is cranking out designs like a machine. Your team is fired up. You’re fired up.
Or, you’re the tech lead or senior developer and you’ve been working with your manager on platform choices, testing strategy, language choice, and framework. The project’s technical decisions are sound—based on current best practices. It’s exciting. This time you got to make the right technical choices. You didn’t have to compromise because of managerial whim. It’s going to be great.
Then it turns to shit.
Nothing goes as planned. Everybody underdelivers and underperforms. You keep working on the process. You try everything. You cut back on your technologial ambitions. You try keep the code free of defects but time is running out. You follow all the best practices but aren’t getting the results you expected.
It should have been great, but it’s garbage.
You aren’t alone
You don’t suck.
Your team isn’t uniquely awful.
You aren’t doing any worse than average.
60-90% of all software projects fail. Big projects fail more than small ones. It all comes down to one inescapable fact: most software projects fail.
There must be a process out there that will get us on the right track? A method, tactic, or strategy? Maybe something technological? A programming language, or framework?
None of those are actual solutions. You don’t need a new framework. You don’t need a new programming language. You don’t need a new process. You can’t fix this with better tools because the tools aren’t broken.
The tools didn’t work for you because what was missing was a functioning system for the tools to work in.
Software development tools and processes, old and new, won’t work for you unless you understand software development as a holistic, integrated system.
Software development is an economic system whose primary purpose is to achieve business goals.
Fix your software development process with systems-thinking
Out of the Software Crisis is a framework-agnostic book for coders and non-coders. Some technical knowledge is helpful for reading but not necessary. If you know what a web server is but couldn’t program one, this book is still for you. If you are a coder, the book’s concepts will help you in your work and collaboration. This book is intended to be read by the entire, cross-functional team.
This book contains everything I wished everybody on every team I’ve worked on knew and understood about software development condensed into 155 pages. It’s for anybody who has authority over processes and technical decisions, even if it’s only partial, even if your ‘team’ is just yourself.
It will explain…
- The foundation concepts that software development is built on, why processes work for some but not others, which activities are actually responsible for generating value and which aren’t, and what it is exactly that frameworks are doing for you.
- How all of these disparate elements of the software development process come together to form a system and how you can improve your project outcomes by adjusting the whole—how they integrate—without throwing everything out and starting from scratch.
- The basics of how to see software development through the lens of systems-thinking and it goes into detail on how the elements of software development differ from most other products or projects.
- The business value of unit testing and types—why skipping them will have a direct effect on economic outcomes.
- How design creates value for the business through experimentation.
- How to understand frameworks as systems, what they are, what they do for you, how they help, and why they can sometimes be harmful.
Get the ebook
The book is over 180 pages long, with the bonus essays, and comes in PDF and EPUB formats.
Every edition will get all future corrections to the ebook for free. If I decide to add bonus materials, every edition will get them, for free, in the next update.