Reframing Tech Debt
increment.com
Reframing Tech Debt
1–10 of 59 posts
Re: Reframing Tech Debt
#2Re: Reframing Tech Debt
#3Re: Reframing Tech Debt
#4Re: Reframing Tech Debt
#5Once you get our of analogies and into actual problems, then you can have a reasonable discussion about future tradeoffs. I find even with non-technical managers, debt/wealth is just not a good analogy for code.
Also, often poor code is just part of a larger process problem. You really need to optimize for the whole project, not just code-level to improve the situation.
Re: Reframing Tech Debt
#6Maybe trying to think about "tech wealth" or "tech capability" might change this. Instead of a ticket to "improve error handling" it's "ensure the system can recover from a DNS failure safely to the DB without manual intervention". This sounds more like a feature, because, well, it is.
I've found most of the places talk a lot about having good quality, but few actually did anything concrete about it. Most changes ended up not making any impact. And this is over the course of a 20 year career.
Re: Reframing Tech Debt
#7I'm curious because our team is struggling with tech debt. We are divided in feature teams and I had this idea of maybe simply having a "tech debt team" that, just like feature teams, has sprints achieving tech-debt related goals such as "improve startup times by 10%" or "decouple router module from auth module" or "setup webpack to tree-shake modules" etc.
How do y'all do it?
Re: Reframing Tech Debt
#8I'm curious how largish software projects are organized to deal with tech debt. Is it just ingrained and taken into account for say 20% of the work at each sprint planning? Is there a specific team dedicated to doing tech debt stuff? Do people just work on tech debt when they feel like it? Are there just a few people in the team that like to go around the project and take on smallish tech debt tasks? I'm curious beca…
To that end, keep cleaning as you go. And accept that good development can be like a good batter. Probabilistically good. Not certain.
Re: Reframing Tech Debt
#9> Carving out time to pay down tech debt requires buy-in from leadership.
Not in my experience! I think one can do pretty well a) refusing to put debt in to begin with, and b) for any new work, including necessary cleanup of what you'll be touching in the estimates.
Some years back I had an explicit understanding with a product manager: the engineers would track tech debt and take care of it in small slices over time. He could always ask for details, but absent his curiosity, we'd just leave him out of it, doing a little bit every week so that things always stayed in good enough shape that we would keep our velocity high and our surprises low. Early on he asked a couple of times, but he quickly realized that to him it was entirely boring.
I think it's a mistake to ask non-experts to prioritize things they don't understand. You're not going to ask your execs if it's ok for you to take time to eat or brush your teeth. You equally shouldn't ask them if it's ok to be a responsible professional and do things like writing tests and keeping the code base reasonably clean. That should just be part of the deal; any exceptions should be temporary and carefully negotiated.
Re: Reframing Tech Debt
#10I'm curious how largish software projects are organized to deal with tech debt. Is it just ingrained and taken into account for say 20% of the work at each sprint planning? Is there a specific team dedicated to doing tech debt stuff? Do people just work on tech debt when they feel like it? Are there just a few people in the team that like to go around the project and take on smallish tech debt tasks? I'm curious beca…
You want to avoid refactoring if no one else is going to test the change, or if your automated test coverage on the module isn't too good. It's too easy to introduce changes that won't be noticed before deployment.
Chances are most code already works well enough even if the design or code is suboptimal - often the system only changes in certain parts and changes there often. If you can identify the parts of your system that are likely to change due to changes in scale or business requirement, than that is a natural area to focus on in future redesigns or refactoring.