As a young man, I was pretty bad with money. I racked up too much debt, yet I still needed a reliable car to drive. This meant taking out a high-risk loan (read: high-interest loan), and sitting for an hour with a loan officer explaining my poor decisions, and promising it would be different this time. Letting me finish, he leaned forward and quietly said:
I call folks like you a “credit drunk.” You go from lender to lender, making promises to get what you want, all while not using the income you have wisely. You continue to pay higher and higher interest rates, and then you can’t pay your bills. I’d like to see you clean up your payment history for six months, and then let’s talk.
Let me tell you, that was a terrible thing to hear.
But what does this have to do with leading developers?
Yesterday I said your boss didn’t care about Tech Debt. That may not be true; they might care very much. But they still might not let you refactor it.
Why? Their reasons might include…
- They might see you as a “debt drunk,” repeatedly making promises about results that you aren’t able to deliver.
- They may not have faith that your refactoring will make the code any better.
- They might fear you could make it worse, or that your refactoring will take a lot of time and have no measurable results.
- They might have worked with developers who abused refactoring projects, using it as an excuse to re-write the code in a style they prefer.
- They may have approved small refactoring projects in the past, only to have them take 5-10x longer than they budgeted. This could make them look bad in front of their customers and boss, and delays the release of new features.
This might not seem fair, but as a manager of many dev teams, I’ve had all these thoughts and fears. And it’s rare that a developer realizes how risky it can be for a manager to approve a “simple” refactoring project.
Now, pause for a moment and ask yourself these questions about a module you’ve considered refactoring…
1. What is my goal in doing the refactor project?
2. How will I know if I’ve accomplished the goal?
3. What will be different if I achieve the goal?
4. How much time and money should be invested in this goal?
5. What are the ramifications if I postpone the refactoring project for six months?