Re: [scrumdevelopment] "Business Value" v. "Potentially Implementable Feature"
Great Idea.> I think I'm going to put that post on a wall at work
Would make an excellent poster with Ron's shiny face and contact info on it. "The Technical Debt Credo"
Ron, will you hire me as your new marketing guy? I know you like to get the phat consulting rates. Maybe I can help. ;-)-------
From: Cass Dalton <cassdalton73@...>
Sent: Wednesday, August 22, 2012 1:22 PM
Subject: Re: [scrumdevelopment] "Business Value" v. "Potentially Implementable Feature"
If you don't mind, I think I'm going to put that post on a wall at workOn Aug 22, 2012 2:24 PM, "RonJeffries" <ronjeffries@...> wrote:Charles,On Aug 22, 2012, at 1:24 PM, Charles Bradley - Scrum Coach CSP CSM PSM I <chuck-lists2@...> wrote:
Do you have your views on technical debt in something that is published? I would love to see that as I think it's a view that does not get enough attention in the industry.Let me put them right here. If anyone doesn't find them quite obvious and clear, please inquire.Never give code to the Product Owner that is not well programmed. This means clear code, well factored, supported by sufficient tests to be sure that it works.
OK, despite our best efforts, we turn out to be incompetent. We now have code in the system that isn't clear, well factored, and supported by enough tests. Perhaps we just noticed. Perhaps we have learned some stuff that we wish we had known sooner. Perhaps we bent under pressure. Doesn't matter. We do a Retrospective and figure out what caused it, and remove the cause. But the existing code is still bad. What do we do?If we are later going to look at this code and say that it sucks, it is not clear, well factored and supported by sufficient tests right now.If we do not know what clear, well factored code, supported by tests looks like, find out. We are cheating our team, our Product Owner, and ourselves.When we do give code to the Product Owner that is not clear, well factored, and supported by tests, know that we have done a bad thing. There is some reason for that. This is a top priority for our next Retrospective. Figure out why we are doing bad work and fix it. Stop doing bad work.P.S. There is no tradeoff against this kind of quality. We cannot go faster by skimping on clear well factored code supported by tests. It will bite us in the ass. You wouldn't be reading this answer if it wasn't already biting you in the ass. Stop writing bad code.We do not, repeat DO NOT, put code improvement "stories" in the Product Backlog. The main reason for this is that we cannot state the value of the improvement in any terms that the Product Owner can understand, and therefore the Product Owner can never schedule the stories. P.S. We don't know the value either.If we do put code improvement stories in the backlog, we can't count the work against our Product Burndown or other progress measurements. Why not? Because we have already been paid for this work when we did it badly last time. We don't pay the mechanic again when he re-fixes the far. We don't pay the programmer again when he fixes what he did poorly last time. Anyway, don't schedule this work as stories in the backlog anyway. It's just wrong. Stop it.Then what do we do about this bad code? I'm glad you asked.If our Product Owner's stories do not cause us to make changes to the bad code, we leave it alone. It is not hurting anyone, and it will not rot. It will just sit there. Cleaning it up will take time away from stories, and it will pay off, if it ever does, an unknown amount at an unknown time in the future. Bad investment.If stories cause us to work in the bad code, the bad code will slow us down. It will make us throw up, causing extra breaks in the rest room. We will be sad. Therefore, follow the "Boy Scount Rule", "Always leave the campground cleaner than you found it". Clean up the code in a reasonable fashion. Do not take ten days to rewrite it. We don't know how and anyway it's inefficient. Just leave it better than it was. Over time, all the code that is troubling us will get better.That is all:
You may be wondering "How do we get the time to keep it clean? How do we get the time to improve the campground?"We have a story to do. That story includes a certain amount of experimenting to figure it out. It includes enough testing to leave the code properly tested. It includes the time to make the code clean and well factored, including any code we have to touch to do the story.That's how much time the story takes. So, that's how much time we take to do it. If we take less time, we have just stuck a screwdriver into one of our own bodily orifices. Stop doing that. You'll get a rash.So. Any followup questions?
- Don't do it.
- When we do it, figure out why and stop.
- When we do it, leave it alone if it's not in the way.
- If it is in the way, clean up the parts we pass through.