The Technical Debt Trap
Click here to load reader
-
Upload
doc-norton -
Category
Software
-
view
1.399 -
download
1
Transcript of The Technical Debt Trap
![Page 1: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/1.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
The technical Debt Trap
![Page 3: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/3.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
what is technical debt?
![Page 4: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/4.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham OOPSLA ‘92
Shipping first time code is like going into debt.
![Page 5: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/5.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
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.
– Ward Cunningham OOPSLA ‘92
![Page 6: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/6.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
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 OOPSLA ‘92
![Page 7: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/7.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
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
OOPSLA ‘92
![Page 8: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/8.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
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
OOPSLA ‘92
![Page 9: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/9.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is
![Page 10: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/10.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is good
![Page 11: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/11.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is good
![Page 12: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/12.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is good
![Page 13: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/13.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is a strategic decision
![Page 14: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/14.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical debt is a strategic decision
• Allow for Rapid Delivery
• To Elicit Quick Feedback
• And Correct Design
![Page 15: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/15.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt is an indication of learning
![Page 16: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/16.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt is an indication of learning
• Now know what you need
• Implementation doesn’t match
![Page 17: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/17.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt is a metaphor
![Page 18: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/18.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
metaphors rockwe reason by analogy
Building
on a
weak founda
tionPuts pressure on our design
Can’t keep running at this pace
It’s raining men(hallelujah)
![Page 19: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/19.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
metaphorphosiswhen metaphors go wrong
Credit CardSHORT-TERM
Long-Term
Return onInvestment
OPERATIONALHOME LOAN
Loan Shark
PRAGMATIC
LEVERAGE
Intentional AUTO LOAN
FRAUDULENT
VOLUNTARY
PYRAMID SCHEME
Prudent
Student Loan
HIGH INTEREST
INADVERTENT
RECKLESS DEBT IN
THE THIRD
QUADRANT
![Page 20: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/20.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
metaphorphosiswhen metaphors go wrong
“quick and dirty” - Martin Fowler
“sloppy” - David Laribee
“just hack it in” - Steve McConnell
“CUT A LOT OF CORNERS” - James Shore
![Page 21: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/21.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“We must ship now and deal with
consequences”
“Now we know how we should have done it”
“What’s Layering?”
![Page 22: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/22.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham Youtube ‘09
[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.
![Page 23: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/23.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham Youtube ‘09
confused the debt metaphor with the idea that you could write code poorly
![Page 24: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/24.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham Youtube ‘09
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.
![Page 25: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/25.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham Youtube ‘09
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.
![Page 26: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/26.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham twitter ‘09
Dirty code is to technical debt as the pawn broker is to financial debt.
![Page 27: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/27.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
– Ward Cunningham twitter ‘09
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.
![Page 28: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/28.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt?Ask yourself…
![Page 29: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/29.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt?Ask yourself…
• Is the code clean?
• Is the code tested?
• Is there a learning objective or event?
• Is there a plan for payback?
• Is the business truly informed?
![Page 30: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/30.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt?If you say no to even one…
• Is the code clean?
• Is the code tested?
• Is there a learning objective or event?
• Is there a plan for payback?
• Is the business truly informed?
![Page 31: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/31.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt?If you say no to even one…
• Is the code clean?
• Is the code tested?
• Is there a learning objective or event?
• Is there a plan for payback?
• Is the business truly informed?
... then you don’t have Technical Debt
![Page 32: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/32.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
mess (noun)
![Page 33: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/33.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
mess (noun)
• Disorderly accumulation, heap, or jumble
• A state of embarrassing confusion
• An unpleasant or difficult situation
![Page 34: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/34.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
cruft (noun)
![Page 35: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/35.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
cruft (noun)
• An unpleasant substance
• The result of shoddy construction
• Redundant, old or improperly written code
![Page 36: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/36.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
But, It’s Just semantics
![Page 37: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/37.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
It’s not Just semantics
![Page 38: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/38.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
It’s not Just semantics
Technical Debt is Good
![Page 39: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/39.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
It’s not Just semantics
Technical Debt is GoodQuick and Dirty is Technical Debt
![Page 40: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/40.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
It’s not Just semantics
Quick and Dirty is Good
![Page 41: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/41.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
It’s not Just semantics
Quick and Dirty is Good
![Page 42: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/42.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“We must ship now and deal with
consequences”
“Now we know how we should have done it”
“What’s Layering?”
![Page 43: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/43.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“Let’s deploy and gather more information”
“Now we know how we should have done it”
“What’s Layering?”
![Page 44: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/44.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt in other fields
![Page 45: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/45.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt in other fields
![Page 46: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/46.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical Debt in other fields
![Page 47: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/47.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Technical Debt in other fields
![Page 48: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/48.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt in other fields
![Page 49: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/49.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
RECKLESS AND DELIBERATEtechnical debt in other fields
![Page 50: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/50.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
RECKLESS AND DELIBERATE
RECKLESS AND DELIBERATE
technical debt in other fields
![Page 51: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/51.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
RECKLESS AND DELIBERATE
RECKLESS AND DELIBERATERECKLESS AND INADVERTENT
technical debt in other fields
![Page 52: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/52.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“Let’s deploy and gather more information”
“Now we know how we should have done it”
“What’s Layering?”
![Page 53: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/53.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“Let’s deploy and gather more information”
“Now we know how we should have done it”
“What’s Layering?”
IRRESPONSIBLE
![Page 54: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/54.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“Let’s deploy and gather more information”
“Now we know how we should have done it”
“What’s Layering?”
IRRESPONSIBLE
INCOMPETENT
![Page 55: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/55.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
technical debt quadrant
Reckless
Inadvertent
Prudent
Deliberate
“We don’t have time for design”
“Let’s deploy and gather more information”
“Now we know how we should have done it”
“What’s Layering?”
IRRESPONSIBLE
INCOMPETENTTECHNICAL
DEBT
![Page 56: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/56.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
cruft or debt?
![Page 57: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/57.jpg)
#DevBootcamp / #TechnicalDebtTrap / @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()); 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; } } } } } } } } } } } } } }}
cruft or debt?
![Page 58: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/58.jpg)
#DevBootcamp / #TechnicalDebtTrap / @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()); 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; } } } } } } } } } } } } } }}
![Page 59: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/59.jpg)
#DevBootcamp / #TechnicalDebtTrap / @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()); 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; } }} } } } } } } } } } } } }
![Page 60: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/60.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
DataSet aDs, qDs, asDs, sqDs;aDs = _dbConnector.UpdateAgentList();qDs = _dbConnector.GetQueueList();
foreach (DataRow aRow in aDS.Tables[0].Rows) { String agentID = aRow[“AgentId”].ToString(); asDs = _dbConnector.GetAgentSkills(agentID); foreach (DataRow asRow in asDs.Tables[0].Rows) { String agentSkill = asRow[“Skill”].ToString(); foreach (DataRow qRow in qDs.Tables[0].Rows) { queueName = qRow[“QueueName”].ToString(); sqDs = _dbConnector.GetSkillsForQueue(queueName); foreach (DataRow sqRow in sqDs.Tables[0].Rows) { foreach (string skill in sqRow[“Skills”].ToString().Split(paramDelimStr)) { if (skill == agentSkill) { try { _dbConnector.SetAgentQueueSkill(agentID, queueName, skill); } catch { continue; }} } } } } }
![Page 61: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/61.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
AgentList agents = new AgentList(_dbConnector.UpdateAgentList());QueueList queues = new QueueList(_dbConnector.GetQueueList());
foreach (Agent agent in agents) { foreach (Skill agentSkill in agent.skills) { foreach (Queue queue in queues) { foreach (Skill queueSkill in queue.skills.Where(x => x == agentSkill)) { try {_dbConnector.SetAgentQueueSkill(agent.agentID, queue.name, agentSkill); } catch { continue; } } } }}
![Page 62: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/62.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
![Page 63: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/63.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
if ((customer.state == “AL” && customer.type == CustomerType.GENERAL_AGENT && customer.revenue > 100000) || (customer.type == CustomerType.RETRO_AGENT && (customer.state == “WI” || customer.state == “IL”)) || (customer.type == CustomerType.FED_MANAGEMENT && customer.revenue > 150000)) { ... }
cruft or debt?
![Page 64: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/64.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
// If customer is Federally Regulatedif ((customer.state == “AL” && customer.type == CustomerType.GENERAL_AGENT && customer.revenue > 100000) || (customer.type == CustomerType.RETRO_AGENT && (customer.state == “WI” || customer.state == “IL”)) || (customer.type == CustomerType.FED_MANAGEMENT && customer.revenue > 150000)) { ... }
![Page 65: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/65.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
if (customer.isFederallyRegulated()) { ... }
![Page 66: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/66.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
double getSpeed() { switch (_type) { case EUROPEAN: return getBaseSpeed(); case AFRICAN: return getBaseSpeed() - getLoadFactor() * _numberOfCoconuts; case NORWEGIAN_BLUE: return (_isNailed) ? 0 : getBaseSpeed(_voltage); } throw new RuntimeException ("Should be unreachable");}
http://www.refactoring.com/catalog/replaceConditionalWithPolymorphism.html
cruft or debt?
![Page 67: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/67.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
class Swallow ... double getSpeed() { return getBaseSpeed(); }end class
class EuropeanSwallow ...end class
class AfricanSwallow ... double getSpeed() { return super.getSpeed - coconutLoad(); } double coconutLoad() { return getLoadFactor() * _numberOfCoconuts; }end class
class NorwegianSwallow ... double getSpeed() { return (_isNailed) ? 0 : getBaseSpeed(_voltage); }end class
![Page 68: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/68.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
cruft is a bad decision
![Page 69: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/69.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
cruft is a bad decision
• You are a professional developer
• You’re going to create unintentional cruft
• You have to clean up the existing cruft
![Page 70: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/70.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
The Trap
![Page 71: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/71.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
The Trap
• Precedent for speed over quality
• Expectation of increased velocity
• Cruft slows you down
• Must write more cruft to keep up
• Ask permission to do your job correctly
![Page 72: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/72.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
failing strategies
![Page 73: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/73.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
failing strategies
![Page 74: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/74.jpg)
![Page 75: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/75.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
winning strategyClean Constantly
![Page 76: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/76.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
winning strategyClean Constantly
• Never make an intentional mess
• Monitor your “Technical Debt”
• Follow the Boy Scout Rule
• Remember quality is your responsibility
![Page 77: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/77.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
winning strategyClean Constantly
• Never make an intentional mess
• Monitor your “Technical Debt”
• Follow the Boy Scout Rule
• Remember quality is your responsibility
• NEVER ask permission to do your job correctly
![Page 78: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/78.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Monitor your cruft
![Page 79: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/79.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Monitor your cruft
• Code Coverage
• Code Complexity
• Coupling
• Maintainability
• Monitor Trends, Not Points
![Page 80: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/80.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
reviewTechnical Debt
Cruft
![Page 81: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/81.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
reviewTechnical Debt
• A strategic design decision
• Requires business to be informed
• Includes a pay-back plan
Cruft• Happens
• Needs to be monitored and cleaned
• Is NOT Technical Debt
![Page 82: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/82.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
reviewTechnical Debt
• A strategic design decision
• Requires business to be informed
• Includes a pay-back plan
Cruft• Happens
• Needs to be monitored and cleaned
• Is NOT Technical Debt
NEVE
R as
k per
mission
to d
o y
our job
corr
ectl
y
![Page 83: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/83.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
comments or
questions?
Doc Norton, CEO
@DocOnDev
![Page 84: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/84.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
Thank You!
Doc Norton, CEO
@DocOnDev
![Page 85: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/85.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
The technical Debt Trap
![Page 86: The Technical Debt Trap](https://reader037.fdocuments.in/reader037/viewer/2022102323/58736bb81a28abe7648b7ddb/html5/thumbnails/86.jpg)
#DevBootcamp / #TechnicalDebtTrap / @DocOnDev
• OOPSLA 92 Paper - http://dl.acm.org/citation.cfm?id=157715, http://c2.com/doc/oopsla92.html
• Ward Cunningham Technical Debt Video - http://www.youtube.com/watch?v=pqeJFYwnkjE&feature=player_embedded
• Ward Cunningham Twitter - http://twitter.com/WardCunningham/status/3742903303
• Technical Debt Quadrant - http://martinfowler.com/bliki/TechnicalDebtQuadrant.html
• James Shore - http://jamesshore.com/Blog/CardMeeting/Voluntary-Technical-Debt.html
• Martin Fowler - http://www.martinfowler.com/bliki/TechnicalDebt.html
• David Larabee - http://msdn.microsoft.com/en-us/magazine/ee819135.aspx
• Steve McConnell - http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx
• Jon Stewart - http://big.assets.huffingtonpost.com/JonConfused.gif
• Cruft Example 1 - http://thedailywtf.com/Series/2010/3/CodeSOD.aspx
• Debt Threshold - http://blog.castsoftware.com/wp-content/uploads/2011/04/Technical-Debt-Software-Quality1.jpg
• Hardening Sprints - http://blog.castsoftware.com/wp-content/uploads/2011/04/Technical-Debt-Software-Quality1.jpg