- Bad Logic
- Bad Assumptions
- Planning for Predictability
- A Different Kind of Problem
- Messy Problems
- Software Development
A Different Kind of Problem
The manufacturing mindset applies when a problem is predictable and controllable, and when optimization is king. In other words, it makes sense when Taylorism applies. His problem was formulatable, static, and predictable, once you knew the One Best Way. Of course, since the problem was static, you could find the One Best Way. That made the manufacturing mindset a perfect way to think about the problem he was trying to solve. Software is entirely different.
First, software isn't formulatable. Certainly both Taylor's problem and software are complicated. The difference is, the software problem doesn't always have the same form. It rarely follows exactly the same rules twice. The act of solving the problem, or creating the software, changes the problem you're trying to solve. You can't develop a rigidly defined equation that will give you the optimal software each time.
Second, software development is a dynamic reality. It changes as it unfolds because the environment is always different. No two projects are the same. Often, the people are different, the business environment is different, and the constraints are different. Perhaps even more frustrating, the target is moving. The software you thought you wanted at the beginning of the project is rarely the software you want at the end, or even half-way through. The act of creating software influences the software you create.
Third, software is unpredictable. The same piece of software would never emerge from the same project the same way twice, if people were willing to try that experiment. Alan Turing's application of Godel's undecidability theorem to computation tells us there will always be algorithms that do things we can't predict in advance. As Mitchell Waldrop said in Complexity,
any piece of code that's complex enough to be interesting will always surprise its programmers.2
In a word, software development is messy.