The Technical Debt T RAP @DocOnDev
I’m Doc Norton. CEO at CTO2 @DocOnDev @DocOnDev
http://leanpub.com/escapevelocity I’m Doc Norton. CEO at CTO2 @DocOnDev @DocOnDev
The Technical Debt T RAP @DocOnDev
What is Technical Debt? @DocOnDev
“ Shipping first time code is like going into debt. - Ward Cunningham, 1992 @DocOnDev
“ Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back with a rewrite. - Ward Cunningham, 1992 @DocOnDev
“ Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back 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 @DocOnDev
“ The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. @DocOnDev
“ The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. @DocOnDev
“ The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. @DocOnDev
“ The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest on that debt. @DocOnDev
Technical Debt Is @DocOnDev
Technical Debt is GOOD @DocOnDev
Technical Use Debt is captivating GOOD images @DocOnDev @DocOnDev
Technical Debt is GOOD @DocOnDev
Technical Debt is A Strategic Design Decision 1 @DocOnDev @DocOnDev
Technical Debt is a Strategic Design Decision • Allow for Rapid Delivery • To Elicit Quick Feedback • And To Correct Design @DocOnDev @DocOnDev
Technical Debt is A Strategic Design Decision 1 An Indication of Learning 2 @DocOnDev @DocOnDev
Technical Debt is an Indication of Learning • Now Know What You Need • And Implementation Doesn’t Match @DocOnDev @DocOnDev
Technical Debt is A Strategic Design Decision 1 An Indication of Learning 2 A Metaphor 3 @DocOnDev @DocOnDev
Technical Debt is a Metaphor • Here Be Danger @DocOnDev @DocOnDev
Metaphors Rock! Can’t keep running at this pace Building on a Puts pressure on our weak design foundation It’s raining men (hallelujah) We Reason By Analogy @DocOnDev
Metaphorphosis Technical Debt When Metaphors Go Wrong! @DocOnDev
Metaphorphosis High Interest Short-Term Credit Card Loan Shark Pyramid Scheme Auto Loan Intentional Return on Investment Long-Term Technical Debt Prudent Voluntary Student Loan Pragmatic Leverage Inadvertent Reckless Home Loan Fraudulent Operational Debt in the Third Quadrant When Metaphors Go Wrong! @DocOnDev
When Metaphors Go Wrong @DocOnDev @DocOnDev
“cut a lot of corners” When - James Shore Metaphors Go “quick and dirty” Wrong - Martin Fowler “just hack it in” - Steve McConnell “sloppy” - David Laribee @DocOnDev
Deliberate “We must ship now “We don’t have and deal with time for design” consequences” Reckless Prudent “Now we know how “What’s Layering?” we should have done it” Technical Debt Inadvertent Quadrant - Martin Fowler, 2009 @DocOnDev @DocOnDev
“ [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 later. - Ward Cunningham, 2009 @DocOnDev
“ …confused the debt metaphor with the idea that you could write code poorly… @DocOnDev
“ The ability to pay back debt [...] depends upon you writing code that is clean enough to be able to refactor as you come to understand your problem. - Ward Cunningham, 2009 @DocOnDev
“ The ability to pay back debt [...] depends upon you writing code that is clean enough to be able to refactor as you come to understand your problem. @DocOnDev
“ Dirty code is to technical debt as the pawn broker is to financial debt. Don’t think you are ever going to get your code back. - Ward Cunningham, 2009 @DocOnDev
Is there a learning opportunity? 1 Is there a plan for payback? 2 Do I Have Technical Debt? Is the business truly informed? 3 Is the code clean? 4 Is the code tested? 5 @DocOnDev @DocOnDev
Is there a learning opportunity? 1 Is there a plan for payback? 2 Do I Have Technical Debt? Is the business truly informed? 3 Is the code clean? 4 Is the code tested? 5 @DocOnDev @DocOnDev
• Disorderly accumulation, heap, or jumble • A state of embarrassing Mess (Noun) confusion • An unpleasant or difficult situation @DocOnDev
• An unpleasant substance • The result of shoddy Cruft (Noun) construction • Redundant, old or improperly written code @DocOnDev
• An unpleasant substance • The result of shoddy Cruft (Noun) construction • Redundant, old or improperly written code @DocOnDev
But, It’s Just Semantics, Doc. @DocOnDev
It’s Not Just Semantics. @DocOnDev
It’s Not Just Semantics. Technical Debt is @DocOnDev
It’s Not Just Semantics. Quick and Dirty is Technical Technical Debt is Good @DocOnDev
It’s Not Just Semantics. Quick and Dirty is @DocOnDev
Deliberate “We must ship now “We must ship now “We don’t have and deal with and deal with time for design” consequences” consequences” Reckless Prudent “Now we know how “What’s Layering?” we should have done it” Technical Debt Inadvertent Quadrant @DocOnDev
Deliberate “Let’s deploy and “We don’t have gather more time for design” information.” Reckless Prudent “Now we know how “What’s Layering?” we should have done it” Technical Debt Inadvertent Quadrant @DocOnDev
“Technical Debt” In Other Fields @DocOnDev
Construction “Technical Debt” in other fields @DocOnDev @DocOnDev
Use Automotive captivating images “Technical Debt” in other fields @DocOnDev @DocOnDev
Medical “Technical Debt” in other fields @DocOnDev @DocOnDev
t n e e t t a r r e e v b d i l a e n D I d d n n a a s s s s e e l l k k c c e e R R “Technical Debt” in other fields @DocOnDev
Deliberate Reckless and Deliberate “Let’s deploy and “We don’t have gather more time for design” information.” Reckless Prudent Reckless and “Now we know how “What’s Layering?” Inadvertent we should have done it” Technical Debt Inadvertent Quadrant @DocOnDev
Deliberate Irresponsible “Let’s deploy and “We don’t have gather more time for design” l a information.” c i n h c e Reckless Prudent T t b e D “Now we know how “What’s Layering?” Incompetent we should have done it” Technical Debt Inadvertent Quadrant @DocOnDev
Cruft or Debt? @DocOnDev
1 Cruft or Debt? @DocOnDev @DocOnDev
DataSet aDs, qDs; aDs = _dbConnector.UpdateAgentList(); qDs = _dbConnector.GetQueueList(); foreach (DataTable aTable in aDs.Tables) { foreach (DataRow aRow in aTable.Rows) { foreach (DataColumn aColumn in aTable.Columns) { DataSet asDs = _dbConnector.GetAgentSkills(aRow[aColumn].ToString());//AgentId foreach (DataTable asTable in asDs.Tables) { foreach (DataRow asRow in asTable.Rows) { foreach (DataColumn asColumn in asTable.Columns) { foreach (DataTable qTable in qDs.Tables) { foreach (DataRow qRow in qTable.Rows) { foreach (DataColumn qColumn in qTable.Columns) { DataSet sqDs = _dbConnector.GetSkillsForQueue(qRow[qColumn].ToString()); Cruft or Debt? foreach (DataTable sqTable in sqDs.Tables) { foreach (DataRow sqRow in sqTable.Rows) { foreach (DataColumn sqColumn in sqTable.Columns) { foreach (string skill in sqRow[sqColumn].ToString().Split(paramDelimStr)) { if (skill == asRow[asColumn].ToString()) { try { _dbConnector.SetAgentQueueSkill(aRow[aColumn].ToString(), qRow[qColumn].ToString(), skill); } catch { continue; } } } } } } } } } } } } } } } @DocOnDev
Recommend
More recommend