When writing software, one always wants to do things The Right Way. This means gaining a deep understanding of the problem space, thinking carefully about design, and then implementing that design while keeping an ear to customer feedback.
In reality, time is short, budget is limited, and your understanding of the problem is at best partial. This forces teams to do things The Quick Way, where they take the knowledge they already have, think about how it might change in the future, and ruthlessly focus on doing the best they can with the parts that make sense. With discipline (to refactor) and luck (to survive long enough to need to refactor anything), this can eventually closely approximate the results of The Right Way. It is more work to get there, but it has the nice property of delivering value to paying customers much earlier in the process.
Sadly, some teams get lost in The Wrong Way, also known as The Way of Mounting Burdens. This begins similarly to The Quick Way, but rather than focusing on delivering value to customers, people focus on the sensation of working.
- To the individual programmer, this feels like progress, as they spend their days typing code and adding commits.
- To the project manager, this looks like progress because the tickets are chugging through the sprint columns.
- To the technical manager, this is as good as progress because everyone is working.
- To the nontechnical manager, this looks like progress because the charts look good.
But, having lost sight of their actual goals, the vision splinters, and any actual work that people are doing is at best only useful by accident. It is likely that at least some of it is worse than nothing. Anybody joining one of these teams mid-project will find it difficult to understand what they are being asked to do, and how it connects with any larger goals. Confusion compounds as new work follows patterns set accidentally by previous work, and new goals are hamstrung by restrictions imposed by old code.
Depending on their temperament, team members will either relocate, rebel, or give in to despair. Eventually, the team is left only with those who are willing to endure the constant suffering their choices have left them. In a large enough organization, tolerance to this kind of pain is an adaptive trait, as new members quit or flame out, and only the old hands are left to maintain whatever it is that they’ve built.
To some, this counts as success.