Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Technical Debt: Do Not Underestimate The Danger

Technical Debt: Do Not Underestimate The Danger

This is the slides of my talk delivered in several meetups about the "technical debt" concept.

Lemi Orhan Ergin

September 18, 2013
Tweet

More Decks by Lemi Orhan Ergin

Other Decks in Programming

Transcript

  1. Do not underestimate the danger technical Lemİ Orhan ERGİN Principal

    Software Engineer @ Sony @lemiorhan agilistanbul.com debt @lemiorhan
  2. Lemİ Orhan Ergİn Principal Software Engineer at Sony has worked

    in Tüsside, BYM, GittiGidiyor/eBay and Sony as lead developer, team leader, technical coordinator and scrum master got CSM certificate from Jim Coplien year as Scrum Master sprints in 4 years as team member and scrum master experienced in agile transformation and building agile culture in teams & organizations 2001 2013 2009 1 56 agile CSM, PSM1
  3. taxesgas fuel water phone electricity rent credit cards cable tv

    tuition TOLLS mortgage school payments transportation Holidays INTERNET 3g/4G municipal services shopping communication food health entombment Parking
  4. Financial debt is not always a bad thing. It lets

    us buy what we want or what we need and keep us live at some level.
  5. technical debt is a metaphor developed by Ward Cunningham in

    1992 to communicate problems due to“developing not in the right way” with non-technical stakeholders. met·a·phor noun \ˈme-tə-ˌfȯr also -fər\ a word or phrase for one thing that is used to refer to another thing in order to show or suggest that they are similar
  6. deficit Enron financing paying the principal debt Interest on the

    debt bankruptcy borrowing money Intertest on the loan Inflation financial burden very similar technical debt is to financial debt
  7. most companies have to spend 80% of their software development

    budget maintaining code Aaron Erickson, Informit.com “ ”
  8. U.S. Air Force pulls plug on ERP project after blowing

    through $1 billion chris kanaracus, CIO.com “ ”
  9. we don’t know how much technical debt is really costing

    us Jim bird, Agile.dzone.com “ ”
  10. Technical debt is like smoking addiction. Once you start hacking

    your code, the code asks for more. you never know what that will cost in the future. Lemİ Orhan ERGİN, Agilistanbul.com “ ”
  11. High amount of Technical Debt is #1 impediment to teams

    being agile Dan Rawsthorne “ ”
  12. Sufficient amount of messy code may bring whole Engineering department

    to a stand-still Sven Johann & Eberhard Wolff, Infoq “ ”
  13. Living with technical debt might work perfectly for customers if

    it delivers the desired business value Answer:
  14. ... if you have strategic design decisions. It allow rapid

    delivery to elicit quick feedback and correct design. However, clean code is required to pay back debt therefore the code sould be refactored ıncurring technical debt is a good idea
  15. ... if principal amount and interest is smaller than the

    yield of investment. Sometimes, you don't have to pay back the debt, it is pointless if the code won't be touched again ıncurring technical debt is a good idea
  16. ... because having messy code and cutting quality slows you

    down in reality. And you must generate more mess to keep up. Do you ask permission to do your job correctly???? ıncurring technical debt is a bad idea
  17. similarities with financial debt Every minute spent on not-quite-write code

    counts as interest on the debt Interest Image by Martin Schoeller from “Identical: Portraits of Twins” book
  18. similarities with financial debt Refactoring is like paying off the

    principal debt paying the principal debt Image by Martin Schoeller from “Identical: Portraits of Twins” book
  19. similarities with financial debt Neglecting the design is like borrowing

    money borrowing money Image by Martin Schoeller from “Identical: Portraits of Twins” book
  20. similarities with financial debt Bankruptcy refers to a situation of

    overwhelming debt interest, whereby progress is halted and a complete rewrite is necessary bankruptcy Image by Martin Schoeller from “Identical: Portraits of Twins” book
  21. similarities with financial debt It occurs when the current level

    of technology is old enough to lose compatibility with the industry technical Inflation Image by Martin Schoeller from “Identical: Portraits of Twins” book
  22. similarities with financial debt It represents technical frauds undermine ROIs

    Enron Financing Image by Martin Schoeller from “Identical: Portraits of Twins” book
  23. similarities with financial debt Throw away prototypes, retired products and

    complete failures on will-not-be-used components does not have to be repaid amnesty Image by Martin Schoeller from “Identical: Portraits of Twins” book
  24. the loss of productivity We cannot measure productivity, that's why

    we can't really see real the true effect of technical debt and losing motivation and morale
  25. Increase in testing If the team does the same tests

    again and again on every release or testing takes too much time, the debt seems to be in critical level. the death by manual testing
  26. Postponed stories in releases Postponed releases It becomes harder to

    catch the deadlines. An increase on the postponed releases rate is an indicator. being not ready to go
  27. Code duplication Code duplication leads to update anomalies, purpose masking

    and issues on understanding code copy & Paste programming
  28. Low code coverage 100% coverage is the asymptotic target. Below

    75% indicates serious problems. not knowing how sW behaves
  29. Increase in bugs The increase in number of bugs directly

    shows the decrease of quality and too much support cases
  30. heavy stress on appoaching deadlineS The team is under heavy

    stree at the end of releases or when the deadlines are approaching
  31. being scared of changing anything Software is so brittle that

    developers are scared of changing anything in the code not to break. Adding new features starts to cost more and more.
  32. Evil hacks wrong design It’s hard to detect the debt

    in advance, but any hacks and workarounds could cause issues in the future
  33. wrong choice of technology Not the most mature, not the

    newest, not the simplest... Choosing the cheapest-to-adapt is the key to pay the debt.
  34. unreadable code Developers spend 80% of development time for reading

    code. You cannot build if you cannot understand. hard to understand what happens
  35. decreased velocity Decreased team velocity is a good indicator for

    possible impediments that slows the team down even if nothing has changed
  36. Using old libraries Softwares age and cause technical debt by

    time. Maintenance costs are the main expenditure item. and technologies
  37. Reports of Sonar Sonar Reports Softwares age and cause technical

    debt by time. Maintenance costs are the main expenditure item. with technical debt plugin
  38. bad smells The indicator of weaknesses in design that may

    be slowing down development or increasing the risk of bugs or failures in the future “Only he knows can change this part” “Lets copy & paste this code” “If I touch, everything will break” “Too many TODOs or FIXMEs in the code”
  39. 36 classic mistakes Making mistakes is inevitable. Only experienced software

    developers realize when they're making mistakes. outlined in McConnell's Rapid Development http://www.construx.com/10x_Software_Development/Classic_Mistakes_Updated
  40. unavoidable debt Usually unpredictable and unpreventable and the team has

    no fault on that Due to legal issues, we have to rewrite some of the components “ ”
  41. tactical debt It’s different that strategic by the reactive manner

    for the short term We don't have time to implement in the right way, just a hack. We'll fix later. “ ”
  42. Incremental debt Hundreds or thousands of small shortcuts, like credit

    card debt We have to do quick hacks and dirty solutions to catch the deadline “ ”
  43. INADVERTENT (naive) debt It occurs due to irresponsible behavior or

    immature practices on the part of the people involved We have to build the software product with inexperienced newbies “ ”
  44. code quality Debt Short time between failures Severe defect count

    Every hack, work around, bad piece of code builds Unnecessary code duplication and complexity
  45. Knowledge distribution and documentation debt Only few people knows the

    system When all key people left the organization, the debt becomes extremely high
  46. Environmental Debt Problems in development related processes Issues in hardware,

    infrastructure, supporting apps Having too many manual operational tasks
  47. Monetary cost Developer’s time is expensive No developer enjoys to

    work on brittle and complicated code That leads turnovers and it is one of the real economic costs of technical debt
  48. developers No one wants to develop bad code No one

    wants to take over bad work of others
  49. A system can't have the same high level of quality

    throughout the system strategic design The team can choose which parts will have high quality or kept as low quality Consumer understands quick & dirty solutions lead to debt Understanding Strategic Design leads to better decisions from stakeholders
  50. key engineering practices Pair Programming Test Driven Development Continuous Integration

    10 min Builds Refactoring Automated unit tests etc. these should always directly associated with a requirement
  51. test driven development Pre-release defect density decreased 40-90% relative to

    similar products that do not use TDD Initial development time increased 15-35% after TDD
  52. Monitor your debt Code coverage: Monitor trends, not points Cyclomatic

    complexity: Number of branches in code Coupling: Interconnectedness of systems
  53. just pay the interest Live with the code Refactoring is

    more expensive than the work with bad code End-of-life software or will-be-retired software
  54. Technical Backlog Debt is made visible and clear for everbody

    Cost per task is trackable No mixture between technical and feature tasks adv. disadv. 2 backlogs and hard to prioritize Customers may not understand the real benefits of a tech task Very expensive changes must always a business reason
  55. even impossible to predict The effect of bad code quality

    for future requirements is difficult
  56. The delta from ideal Errors & warnings Code duplication Code

    coverage Gut feeling in large apps, the measure is basically useless
  57. Estimate the cost of a failure and then multiply by

    the probability it will occur Technical debt is the cost of implementing the required redundancy
  58. you got the red pill Understanding technical debt will let

    you, your team, the business and the stakeholders make better decisions
  59. Technical Debt http://www.infoq.com/articles/managing-technical-debt http://theagileexecutive.com/category/technical-debt/ http://martinfowler.com/bliki/TechnicalDebt.html http://www.slideshare.net/garyshort/technical-debt-2985889 http://www.slideshare.net/woodyp/technical-debt-7436402 http://www.slideshare.net/jhlittle/technical-debt-6896714 http://www.slideshare.net/RobMyers64/technical-debt-10124606 http://www.slideshare.net/RedgateSoftware/measuring-technical-debt

    1 Billion Dolar Fail http://www.cio.com/article/721628/Air_Force_scraps_massive_ERP_project_after_racking_up_1_billion_in_costs Evluation with Sonar http://www.sonarqube.org/evaluate-your-technical-debt-with-sonar/ 36 Classic Mistakes http://www.stevemcconnell.com/rdenum.htm http://www.codinghorror.com/blog/2007/06/escaping-from-gilligans-island.html Calculating the ocost http://www.ontechnicaldebt.com/blog/time-to-start-estimating-technical-debt/ http://www.infoq.com/news/2010/03/monetizing-technical-debt http://blog.acrowire.com/cloud-computing/failing-to-plan-is-planning-to-fail/
  60. http://www.flickr.com/photos/guilleavalos/2139208615 http://www.flickr.com/photos/maclufus/5571639487 http://www.flickr.com/photos/grantmac/2282389818 http://www.flickr.com/photos/freefoto/2539768604 http://farm5.staticflickr.com/4043/5129934527_552d08a0e4_o.jpg http://www.flickr.com/photos/ethermoon/4045176015 http://upload.wikimedia.org/wikipedia/commons/2/2a/Dirty_dishes.jpg http://fc07.deviantart.net/fs41/f/2009/030/9/6/The_Good__The_Bad_and_The_Ugly_by_ROMAragorn.jpg http://ngm.nationalgeographic.com/2012/01/twins/portraits/img/01-johanna-eva-gill.jpg http://www.flickr.com/photos/epsos/6749663099

    http://darkroom.baltimoresun.com/wp-content/uploads/2012/12/REU-POY-243.jpg http://www.flickr.com/photos/defenceimages/7021362271 http://www.flickr.com/photos/widget8/4121151605 http://www.flickr.com/photos/cafemama/206657382 http://www.flickr.com/photos/staflo/6015670061 http://www.flickr.com/photos/crashmaster/3192341451 http://www.propcboost.com/wp-content/uploads/2013/05/Blue-screen-error.jpg http://www.flickr.com/photos/stuant63/2240432052 http://www.flickr.com/photos/didmyself/7685629372 http://www.flickr.com/photos/untickalock/41536377 http://www.flickr.com/photos/fxtc/8105411995 http://tocea.com/wp-content/uploads/Tocea-Scertify-TechDebt-Overview.jpg http://www.flickr.com/photos/cristiano_betta/2757049946 http://www.flickr.com/photos/mhusiak/3216291202 http://www.flickr.com/photos/eneas/9541686914 http://www.flickr.com/photos/amalthya/84364820 http://www.flickr.com/photos/erik-n/1550380661 http://www.algoafm.co.za/img/uploads/Website/cat%20scared.jpg
  61. Lemİ orhan ergİn [email protected] @lemiorhan @lemiorhan agilistanbul.com @lemiorhan LINKEDIN TWITTER

    SLIDESHARE BLOG Principal Software Engineer @ Sony Founder & Author @ agilistanbul.com flyingtomoon.com