- Bad Logic
- Bad Assumptions
- Planning for Predictability
- A Different Kind of Problem
- Messy Problems
- Software Development
Software Development
Our manufacturing mindset is great for efficiency optimization problems. For those kinds of problems, you can assume you know the answer before you start working. The actual work is just a matter of implementing the solution you've already figured out. In that case, it makes perfect sense to implement the solution as efficiently as possible. Is software like this? Not even close. Software is not solvable in the same way. What we need changes as we create what we thought we needed. What we end up with isn't what we expected. This is good, because most of the time we don't know exactly what we want when we start.
As humans, we have a tendency to interpret everything we see in terms of things we understand. This leads us to the wrong solution over and over again. We've done the same with software for too long. Creating new software is not about efficiency optimization. We're trying to solve the wrong kind of problem when we assume it is. Software development is knowledge work. It isn't the kind of work where managers can figure everything out in advance, and then just give other people instructions to follow. It's an activity where people are trying to solve the problem, and that requires everybody involved, not just managers, to think. As Tom DeMarco said in Slack,
Knowledge work is less like the jobs that Taylor was studying, and more like the job that he himself was doing when he studied them. It involves invention, abstraction, articulation, and skillful management of many human relationships.6
The manufacturing mindset started with Taylor but is alive and well today in management fads that don't deliver very often or very well (Business Process Re-engineering, Capability Maturity Model, etc.). Real life is different from what we have imagined it to be. The manufacturing mindset probably made sense when software development looked very similar to factory production. It simply doesn't apply anymore. Software development isn't like manufacturing at all. It's different work, and the manufacturing mindset was never intended for it.
But most managers see no alternative, because nobody gives them one. They're stuck. They think they have to choose between utter chaos on their projects, and forcing software development to fit within the manufacturing mindset. Chaos seems unwise, and more than a little irresponsible, so they opt for the forced fit. This is understandable, but it's also delusional, because it doesn't work.