In this post, the venerable Martin Fowler expounds upon his definition of a technical debt in contrast to Uncle Bob’s definition. Not that they are completely different, but that Uncle Bob views an ignorant mess as not qualifying as a technical debt. Martin considers a mess also a debt, and I agree.

In fact most all development has a certain debt aspect in terms of the metaphor for required maintenance later on. The point of good design and clean code is to empower productivity and easier maintenance. Even a non-decision on design, such a mess, is still a decision. You still have to maintain what was done.
I’m certainly not the sage of good design & patterns like Uncle Bob or Martin Fowler. I do strongly advocate principles for clean code and easier maintenance. That’s why I advocate Test Driven Design and Object Oriented design patterns. It tends to make your code evolve in a direction that is clean and maintainable. It does make you more productive because you are getting feedback on your decisions much quicker than, say, Waterfall style development does.
A lot of what is said in the internets is subjective. What I mean by clean code may be slightly different than what people like Martin or Uncle Bob mean. (although I like to think I write some rather poetically readable, clean code) It’s still subjective. The practices you choose have a lot to do with how clean it will work out, so choosing the right practices – and values for that matter – is highly important. It makes a difference now and an even bigger difference later when you have to maintain your code. ..or that axe murderer psycho programmer who knows where you live has to maintain your code. That’s when you REALLY want to have clean code with low technical debt!