Technical debt is something often mentioned on the software development floor - but what is it? and what is it not? how can we capture it to reduce it?
4. “Shipping first time code is like going into debt.
A little debt speeds development, so long as it is
paid back promptly with a rewrite. The danger
occurs when the debt is not repaid. Every
minute spent on not-quite-right code counts
as interest on that debt”
Ward Cunningham, 1992
7th April 2011 Don't Laugh It's Paid For - Mike Burns 4
5. 1
Cost of change
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
Time Loan
7th April 2011 Don't Laugh It's Paid For - Mike Burns 5
7. Deliberate
Quality softwarehave the leastmust ship of time
“We don’t
takes “We amount
now and deal
to develop. If for have code that is simple as
time you
with
design”
possible, tests that are complete and a design
consequences”
that fits just right, additions and changes
happen in the fastest possible way because the
Reckless Prudent
impact is lowest. Consequently, if you hack
something out, the more you hack the slower
you go because the cost of “Now we knowchange
“What’s addition or
layering?” how we should
grows with each line of done it”
have code.
7th April 2011 Inadvertent 7
8. Deliberate
A bug by itself is not technical ship
“We must debt.
“We don’t have
now and deal
time for is more likely poor
It with
design”
testing, requirements, design, coding, etc;
consequences”
Something within the development
lifecycle, something that we could probably have
Reckless Prudent
fixed before it became a bug.
If bugs continue to appear within
the same
area, function, feature, this may be
a sign of technical debt.
7th April 2011 Inadvertent 8
9. “Don’t we have docs on the file layouts?”
“I thought we had a test for that?”
“If I change X, it’s going to break Y. I think.”
“Don’t touch that code. Last time we did, we spent a
week fixing it.”
“We just lost the drive. Where are our backups?”
“Where’s the email about that bug?”
“Just put in a comment with XXX.
We’ll see it later.”
“Just put in a comment with TODO.
We’ll see it later.”
“Just put in a TODO.
Right about the XXXs.”
7th April 2011 Don't Laugh It's Paid For - Mike Burns 9
10.
11. 7th April 2011 Don't Laugh It's Paid For - Mike Burns 11
12. 7th April 2011 Don't Laugh It's Paid For - Mike Burns 12
13. I don’t know what happened! I just
changed one line!
It's too late in the life cycle to
upgrade to the new release of the We can’t upgrade.
compiler. We'll do it next time It will break code.
around.
7th April 2011 Don't Laugh It's Paid For - Mike Burns 13
14. Developers?
who is building what, when, and why
Testers?
Project Managers?
add business functionality in deliberate,
prioritized ways
Upper Management?
Everyone in the organization
7th April 2011 Don't Laugh It's Paid For - Mike Burns 14
15. 7th April 2011 Don't Laugh It's Paid For - Mike Burns 15
16. Documentation
Writing tests
Attending to TODO comments
Tackling compiler warnings
Static code analysis warnings
• Technical Debt wiki can capture:
• Knowledge that isn't shared around the organization
• Code that is too confusing to be modified easily
• Prudent, deliberate design decisions that incur technical debt
• Potential “messes” (or messes that we know already exist!)
7th April 2011 Don't Laugh It's Paid For - Mike Burns 16
17. 7th April 2011 Don't Laugh It's Paid For - Mike Burns 17
18. Even the best teams will have debt to deal with
as a project goes on - even more reason not to
recklessly overload it with crummy code.
7th April 2011 Don't Laugh It's Paid For - Mike Burns 18
19. 7th April 2011 Don't Laugh It's Paid For - Mike Burns 19
Notas do Editor
TEST NOTES FOR PRESENTER VIEW
Last year at Tech Day I did Agile Mobsters - and YC asked me this time if I was going to have a theme, at first I wasn’t but I started thinking about the title of my presentation - Don’t laugh it’s paid for - some of you may have seen these on old cars, there is another bumper sticker that is closely related - “If this car were a horse, I'd have to shoot it” - basically I know this is a piece of junk but I’ve already paid for it so I’m not getting another one. Picture courtesy of www.cadebsminishop.be
So, themes, bumper stickers, signs, what is a famous sign, Hollywood, Las Vegas,What about a cartoon sign, ah road runner, so my theme today is loosely based around roadrunner and wile e coyote. It is also a lot easier to say then my bad Italian pronunciations last time.
ASK GROUP - “What do you think technical debt is?” - most likely answer is bugs - come back to this later Ward Cunningham - developer of the first wiki, and a pioneer in Extreme Programming, first coined the term technical debt in 1992. After a while the industry started talking about Technical debt, and with the excitement around Agile at the moment, there are a lot more people looking for answers to why their software has failed to deliver.*CLICK* [Many] have explained the debt metaphor and confused it with the idea that you could write code poorly with the intention of doing a good job laterhttp://en.wikipedia.org/wiki/Technical_debthttp://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspxhttp://www.slideshare.net/DocOnDev/oredev-the-technical-debt-trap
Debt is usually given a bad rap. "Debt is evil! Stay away at all costs!" While yes, being indebted for life is a bad thing, sometimes debt is necessary. It can actually be an incredibly useful tool. *Click*This "good debt" can be defined as debt that will ultimately create more wealth. Yes, it may seem strange to think of debt as something good, but there are certain circumstances where it is very helpful. Buying a house, buying a car, HECS. We have to remember that technical debt that Ward Cunningham talked about is just a metaphor. *Click*We don’t actually have incur any interest, but the longer we leave a poor decision the hard it can be to reverse it and in the long run it may cost us more to fix. This is sometimes called the cost of change curve.http://www.agilemodeling.com/essays/costOfChange.htm
http://c2.com/cgi/wiki?FirstLawOfProgramming
So what is technical debt? Martin Fowler describes technical debt through the use of a technical debt quadrant.*CLICK*The first sort of debt, could be also called a mess. Messy code, usually produced by people who are ignorant of good design and coding practices. This sort of debt it should be fixed immediately and those involved educated.If not it leads to crippling interest payments or a long period of paying down the principal. *CLICK*Next is inadvertent but prudent debt. In software we are always learning. Often you don’t realize how you should have done something until it’s over. This sort of debt results in a high, but more manageable, interest rate and can also take a long time to pay off, depending on how badly you were off “the right” solution. *CLICK*Deliberate debt can be good, but it can also be very bad. A team may know about good design practices, even be capable of practicing them, but decide to go "quick and dirty" because they think they can't afford the time required to write clean code. This sort of debt, can also be managed, but as the first law of programming states… *CLICK* *Read from slide**CLICK*The prudent,deliberate debt is when the team knows they are taking on a debt, and thus puts some thought as to whether the payoff for an earlier release is greater than the costs of paying it off. This is “good debt”. Technical debt like this is just as the entrepreneur treats financial debt. They use it. It speeds delivery, so long as it is properly managed.http://c2.com/cgi/wiki?FirstLawOfProgramminghttp://martinfowler.com/bliki/TechnicalDebtQuadrant.htmlhttp://www.thoughtclusters.com/2009/10/technical-debt-quadrant/http://www.c2.com/cgi/wiki?TechnicalDebt
*Ask group where they think bugs fit* Bugs and technical debt are entirely different things. Fixing a bug may reduce tech debt, leave tech debt unchanged, or even increase tech debt, depending on how the fix is done.http://www.rants.org/2010/01/10/bugs-users-and-tech-debt/
Pretty sure we have said or heard some of these said before.
Often the best sign of debt is the big ball of mud. Wikipedia has a definition that goes like this…A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeatedrepair. Information is shared among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated. The overall structure of the system may never have been well defined. If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems. People who maintain such systems, are often seen wearing socks and sandals.I like a definition that I heard James use once - ball of mud, poke it here and it goes splat somewhere on the other side.http://en.wikipedia.org/wiki/Big_ball_of_mud
http://c2.com/cgi/wiki?FirstLawOfProgramming
We work within a business, that business needs to make money, therefore sometimes we need to make decisions that can help us make money, either by doing something quicker, at a lower quality than we had hope, or for more money than we had hoped - how we choose these decisions can be the difference between a small debt and a large debt - its all about seeing the signs and making sure that the team, group and business understand why we have gone into debt.
While development teams may deserve a fair amount of criticism, you cannot forget that successful software projects require active and adequate participation by all stakeholders.Everyone’s participation is crucial, because in order to stave off failure, you need to know who is building what, when, and why. You need to add business functionality in deliberate, prioritized ways. You need to catch problems with poorly captured and expressed requirements. You need to nip impediments in the bud by spotting people who are potential blockers, noting communication failures, and helping overwhelmed development teams.Developing software requires valid metrics, clear communication, and engaged business and executive stakeholders. They must be involved in software delivery efforts and assume partial responsibility for both positive and negative outcomes. However, development teams need time to clean up their own messes. As they rush toward various releases, they will incur technical debt. Each iteration of work should include new business functionality, as well as a sanctioned effort to refactor some of the hacks that inevitably show up in the code. This is neither a license to goof off, nor the sign of a bad team. It is simply a programming reality that must be routinely addressed with full support from the executive stakeholders. So on your next project, let the project manager know when you incur technical debt, and hopefully they will let you have some time to clean up. Software Failure Is Organizational Failure by Brian Sletten, Beverly Hills, California, U.S.
The best way to pay off your technical debt is to assess what “loans” were taken at the end of each iteration. Ask your team - what hacks have we done in the past iteration? What would we like to unwind? How much time do we think we need to do it?You don’t need to pay debt off immediately, but it is good to gauge the extent of the needed repair while the shortcuts are still fresh in the developers’ minds. Agile gives us a definition of done, so that everyone in the team knows when something is really completed, 100%, not just developed, but tested - so keep in mind things like *CLICK*During the sprint, or project if not doing agile, why not create a technical debt wiki on the project portal page - it could be used to capture:*CLICK*Most importantly, make sure that the stakeholders and the development group know that the wiki exists and give regular updates.
So, technical debt can be bad, but can also be very good, if we keep an eye out for the signs, and leave a few sign posts out for the next travellers, by using code comments, keeping a technical debt wiki, and informing the team, the project manager, the development manager, of technical debt early and making sure there is enough time to clean up those really nasty ones before the interest gets on top of us.Remember*CLICK*