And I'm not here to tell you that the way you think about technical debt is wrong, per se, but you have to admit, the fact that we don't agree on what technical debt means leads to a lot of disagreements about the priorities of managing technical debt and that leads to a bunch of dysfunction. In fact, some of that dysfunction is like the programmers yelling at the managers for not giving them the resources they need to do their job, or the managers yelling at the programmers for not taking the deadlines seriously enough, or even programmers yelling at each other, telling them to stop over-engineering when, in some cases, many I'd say, the people accused of over-engineering are merely trying to take technical debt seriously as a problem. If we continue like this, I think we're just going to continue entrenching everyone's pet opinion about what the right amount of effort is to put into good design.
You've got people on one side who think that we need to design more carefully, refactor more often, and they point to the mounting interest on the debt to justify their position. Whereas you have a bunch of other people who are asking programmers to design less carefully, to refactor less, to do it in less time, and pointing to vague claims about, you know, other people's debt is bad debt, our debt is good debt, it's fine, just keep going and deliver features. It seems like this technical debt metaphor is almost letting us down, but I don't think it is. I mean, somebody invented this metaphor to solve a real problem. It should help us. Maybe if we go back to what they were thinking, then maybe there's a clue in there somewhere.
So let's go back to Ward Cunningham, who coined the phrase technical debt about 25 years ago, and within less than 10 years, was already seeing people really struggling and suffering trying talking about technical debt in their projects. So he recorded a short video in which he tried to clarify his intentions and his thinking, hoping that it might help. And so, for example, knowing that they were working with technology that they weren't very familiar with, they assumed that they were going to get things wrong. And so, as he put it, it was important to me that we accumulate the learnings we did about the application over time by modifying the program to look as if we'd known what we were doing all along. This is really the power of evolutionary design, the freedom to change the code to match what we understand now and not be prisoners to past decisions because we had to make those decisions when we knew less.
Comments