Agile Zone is brought to you in partnership with:

Johanna Rothman helps managers and teams solve problems and deliver products. Her most recent book is Manage your Project Portfolio: Increase Your Capacity and Finish More Projects. You can read her blogs and other writings at Johanna is a DZone MVB and is not an employee of DZone and has posted 129 posts at DZone. You can read more from them at their website. View Full User Profile

Transition to Agile, Large Technical Debt, Small Project

  • submit to reddit
Many months ago, Rebecca asked an interesting question about technical debt in projects. She asked,

How to start when there’s a really big mess? In that case, small, just being a professional clean-up acts may not even make a dent.

Of course, as with any good question, the answer is, “it depends.” And the biggest flavor of depends is whether the project is large or small and if the project is collocated or distributed. For the sake of argument, let’s assume it’s small and collocated.

When you transition to agile and you have a reasonably size codebase, chances are quite good that you’ve been working on the product for a while. You have legacy code. You might have legacy tests. You certainly have legacy ways of thinking about the code and the tests. How do you work yourself out of the technical debt you have accumulated over time? Can you approach the work in the way I outlined in Thoughts on Infrastructure, Technical Debt, and Automated Test Framework?

Yes and No. Let’s assume that for some small set of features you can eat some small pieces of debt. And, you have so much debt, that there are some areas of technical debt that you just do not want to touch those areas of code, or that if you touch those areas, you know you are going to wade into quicksand. You know you have to create more tests than you have “time” to create. That is, the size of the story is significantly smaller than the size of the debt, even with swarming.

Now, what do you do?

You tell people. You tell the product owner. You tell your colleagues. Me, I would probably write some tests for the code anyway, because I would want to know the next time I wade into quicksand. But I have much more gray hair experience now than I did when I was younger, so I make different choices about the product.

If I was a project manager for this project, I would want to know, because I would want to manage the risk. In my experience, that much technical debt affects a team’s ability to produce features. And, if I was a product owner, I would want to know, because the technical debt would affect our ability to do anything with the product.

And, this is a case, where you might want to consider having three backlogs as a funnel into one backlog for an iteration. Read Might Three Backlogs Be Better Than One? And, make sure to read all the comments. They are quite insightful.

The idea is you still only have one backlog for the an iteration. But you have visibility into all the work you have to do that you want to rank for the product.

It’s easy in hindsight to say, “Don’t get into that situation.” Well, duh. But organizations are in this situation. And, they need help. I still think the best answer is to pay off the technical debt is to work in small features and pay off the debt as you find it. That way you never pay off more than you need to, you never do more architecture work than you need to, and you never have this strange backlog issue.

On the other hand, some people don’t realize how much debt they have. Anything that helps them see what they have is useful. But maybe there is a better way. Maybe you have a better way?

Let me summarize:

  1. Pay off technical debt when you implement a story, if you can.

  2. Swarm to start and finish a story. This will help you avoid and pay off debt.

  3. Write more tests to expose the debt, so no one is surprised in the future.

  4. Expose the debt by creating a debt backlog so the debt can be ranked in preparation for iteration planning.

  5. When planning an iteration, take the top item off the debt backlog. Do pairwise comparison of that item with the top item on the feature backlog. Which item has more value? Put that item on the iteration backlog. Continue until the team says, “Stop, we cannot do more in this iteration.”

  6. Your very last solution is rearchitecting. Why? Because it prevents you from making progress in the project. Read Startup Suicide – Rewriting the Code. It’s not just suicide for startups.

Always make sure the technical debt is visible. That is key to managing it. Whether you like my solution(s) or not, make the debt visible. And, if you don’t like any of my ideas, please do comment. Heck, comment if you do like them. I would love to know what you think.

Published at DZone with permission of Johanna Rothman, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)


Lund Wolfe replied on Sat, 2013/01/26 - 4:54am

A lot of technical debt may just be a lot of medium or small refactorings, which could just be done at the same time as the implementation of new features and fixes or prioritized by need.  Is it just poor quality code or poor library choices ?  That is pretty low risk.  Is the original app ill conceived or fundamentally flawed ?  You just have to trust your CTO to know whether refactoring or a rewrite is in order.

If a significant change in technology, framework, or high level design logic is needed than a rewrite is in order, which is high risk.  Can you rewrite it better ?  Can you reverse engineer all the requirements from the business experts or original app or documents or tests that you'll need for the replacement ?  Can you take most of your developers off the original app or hire new developers to start work on the replacement in parallel ?  Ideally, you would set some objective milestones for base functionality and features (and improvements over original app) in the replacement app so that the replacement project can be killed early if it is obviously not going as well as predicted by its enthusiasts.

If you are adding new mobile interfaces (not that I know anything about mobile), you may be rewriting the app anyway, so a rewrite that eventually adds the original interface back in may be in order.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.