Have you heard or read the word technical debt today? (apart from now, of course). Just in case you don’t know what it means, the definition on Wikipedia is fairly good, especially when it comes to listing the common causes of it. Therefore, I’ll try to focus more on the side effects.
At this point in time, developers have acknowledged their inability to be effective and on time at every moment. It is true that perfection is not achievable and we can’t possibly adapt and address each and every change of requirements or bad design decisions as fast as we would like to. Some degree of technical debt will always be there to haunt us.
I have a problem with what we do with that knowledge, though. If you deliberately write crap code expecting to create refactoring stories to cover for it later, you’re not behaving professionally. To some extent, non-functional stories have to be created and prioritized, maybe this is unavoidable, but it’s perfectly possible for the code base as a whole to get better as time goes by and not the opposite. The point I’m trying to make is that not every sort of technical debt has to be prioritized and treated as a stand-alone task. If you have a plan and a listing of all the things that need to be revisited, you can take your time each iteration and eliminate some of it. Even if you spend just a couple of hours on it.
One of the most annoying things about technical debt is that we usually believe that there will be a perfect situation in the future that we can make use of to eliminate it, forgetting that we don’t control the future. Two iterations for now, who knows which team/project/company you will be on? If you were the one who introduced the pile of crap, what do you think others will feel when they have to clean up your mess?
I actually believe that one of the enemies is the usage of the word Sprint to define iterations. I can see why it may sound appealing, we all want to move fast and give our best through a small period of time, focused on a given objective. You then do your best to make sure you don’t deviate from the path of adding value to the end users. Therefore it is easy to procrastinate and shield yourself by saying that the perfect time to take action is yet to come.
Thereby, nowadays I’m forcing myself not to neglect cleaning up as much as I can. Trying to be transparent as I go, but taking the step of fixing wrongdoings as part of my daily activities. Always remember: You’re not done until you make it clean. Others (and that includes your future self) will be thankful.
Raise your standards.