Technical Debt

Typical way that competent developers end up with technical debt: 

1. Customer/user/consumer has a vague idea of what they need but doesn’t know how to express it. 

2. Developer works with customer to learn their business and understand their requirements. 

3. Developer throws together a prototype to confirm that he understands the problem.

4. Customer sees that developer is on the right track. If these 9 enhancements are done, then we’ll really have something. 

5. Developer quickly adds 9 enhancements to prototype. 

6. Customer loves it! Move it to production so we can play with it for a while. 

7. While customer plays with it, developer maps out a plan to architect, refactor, and scale the prototype to be “production worthy”. 

8. Developer is pulled away to 5 other urgent projects. 

9. Customer continues to use prototype as production software. 

10. Two years later: “Who wrote this crap?”