Building Technical Wealth — Dave Ramsey Style
Tackle technical debt like Dave Ramsey tackles financial debt! Learn how to build "technical wealth" by stopping new debt and strategically addressing existing issues.
Updated with great feedback from Richard Hundhausen and Charles Bradley
I was sitting today in the Professional Scrum Developer Train the Trainer event when the topic of technical debt and building technical wealth the Dave Ramsey way came up. I loved this analogy, and wanted to flesh it out. There are some standard approaches here that Ramsey frames very well for dealing with building financial wealth — below is my version of those applied to the technical debt problem.
Defining the Problem
Technical Debt — I define technical debt as: "The eventual consequences of continually trading craftsmanship for short-term velocity." For legacy code, it is all the built-up issues with a code base.
Technical Wealth — I define technical wealth as the flexibility of a solution to change as it delivers value to the customer without massive change costs.
Stop Creating More Debt
"Stop creating new debt by creating a very high quality definition of done for your team. Use this Definition of Done for all work going forward. There is no use in resolving old tech debt until you learn how to stop creating new tech debt. Don't go for a perfect Definition of Done — just one that minimizes the amount of new tech debt created down to a very small or zero amount."
— Charles Bradley, Scrum.org Trainer
The Seven Baby Steps — Developer Edition
Baby Step 1: Build a Safety Net of Tests
A safety net of basic acceptance tests focused on the main business process flows will give you a thin net to start improving the code base. These tests should be automated. If you have to use manual testing for now, be sure to take time in step 3 to automate them. Focus on the most business-critical flows for your safety net — just like picking the highest-interest debt to pay off first, it matters what you cover.
Recommended reading: Working Effectively with Legacy Code — Michael Feathers
Baby Step 2: Fix Problems Inside the Safety Net
List out your currently known issues by area. Keep this list visible, and when a backlog item for the current sprint touches an area with one of those issues, incrementally work on it. Make sure you have a safety net in that area first.
Recommended reading: Refactoring to Patterns — Joshua Kerievsky
Baby Step 3: Build Coverage Through Changes
Once you have understood and implemented the first two baby steps, start increasing code coverage by including unit testing in every change. When we touch the code base we have to wrap what we intend to change in a test, and then make the change. This is the Boy Scout Rule (original link removed — no longer available due to age) in action.
Recommended reading: The Art of Unit Testing — Roy Osherove
Baby Step 4: Invest in Automated Behavior Testing
When you reach this step, you have built solid applications and made positive improvements. Continue building technical wealth by adding behavior tests and limiting implementations to the business value requested.
Recommended reading: ATDD by Example — Markus Gärtner
Baby Step 5: Invest in Skill Sets and the Future
By this point, you should have already started Baby Step 4 — investing in automated behavior testing — before you invest in skill sets. Whether you are working on your own skills or those of other team members, you need to do it now. This can be reading blogs, podcasts, or books.
Recommended reading: Seven Languages in Seven Weeks
Baby Step 6: Design for the Future, Implement for Today
Now it is time to begin applying your time and intelligence toward enhancing the application's technical capabilities and the value you can deliver. Learn practices and patterns for the growth of capabilities.
Recommended reading: Design Patterns (Gang of Four)
Baby Step 7: Build Wealth and Give
It is time to build great business velocity and continue to leave a great code base for the application. Build wealth — and share what you have learned.
Recommended reading: Clean Code — Robert C. Martin
Taking these steps helps us accomplish the goals of our business, increase our morale, and live the life of good software craftsmen.