SlideShare a Scribd company logo
1 of 68
Download to read offline
Technical Debt
The code monster in your
closet
Nina Zakharenko
@nnja
What is
technical debt?
@nnja
A series of bad decisions
(Both business & technical)
@nnja
Which lead to ->
Error prone code & architecture
@nnja
... and using more
Resources
to accomplish
Less
@nnja
What decisions were made
in the past that prevent me
from getting sh** done
today?
@nnja
What causes
technical debt?
@nnja
Me.
And you.
@nnja
Mistakes I Made Early On
4 Not seeing the value in unit tests
4 Not knowing how to say NO to features
@nnja
Mistakes I Made Early On
4 Overly optimistic estimates
4 Putting releases over good design & reusable code
@nnja
Time Crunch
That project was due yesterday!
I'll take a shortcut, and clean up the
mess tomorrow.
@nnja
Unneeded Complexity
Lines of code committed != amount of
work accomplished
@nnja
Lack of understanding
1. Have a problem
2. Look up a solution on stackoverflow
3. Copy & paste it into your code
4. ???
5. Bugs!
@nnja
Culture of Despair
This is already a heap of trash.
Will anyone really notice if I add one
more thing to the top?
@nnja
Red Flags
Houston, we have a problem.
@nnja
Code Smells
4 Not Bugs
4 An indication of a deeper problem
@nnja
Code Smells
4 Half implemented features
4 No documentation, or poor documentation
@nnja
Code Smells
4 Commented out code
4 Incorrect comments
4 No tests, or worse: broken tests
@nnja
Poor Documentation
class OrganicGlutenFreePizzaFactory:
def get_dough(self):
"""
        Return amazing, organic, GMO and Gluten Free Dough
        """
# ran out of organic gluten free, use the other stuff.
# return 'organic gluten free dough'
return 'gmo pesticide processed gluten-full dough'
@nnja
Architecture & Design... Smells
4 Parts of the code no one wants to touch
4 Brittle codebase -- changing code in one area breaks
other parts of the system
4 Severe outages caused by frequent & unexpected
bugs
@nnja
Good Design -> Implementing new
features comes easily
Poor Design -> New features are shoe-
horned into the system
@nnja
Case Studies
@nnja
IRS Chief:"We still have applications that were
running when JFK was President"
Tech at the IRS
50 Year Old Technology
"And we continue to use the COBOL
programming language, it is extremely
difficult to find IT experts who are
versed in this language."
@nnja
It's not just the IRS
4 Banks & Financial Institutions
4 Universities
4 Air Traffic Control
4 ... many still use COBOL
@nnja
Story Time
4 I used to work in finance.
4 At the time I was there, all of the banking systems
were run on mainframes.
4 The bankers were getting frustrated. They wanted a
UI.
@nnja
Big Idea!
4 Let’s write a fancy new web front end
4 It’ll do ALL the things
@nnja
But4 Rewriting the backend is too expensive
4 It already does what we need
4 Let's leave the mainframe as the backend
@nnja
Cursors4 The mainframe would output a text screen from a
program result, based on a query.
4 The results would be parsed by reading variables
from the screen in certain positions.
@nnja
Result?4 The new system was incredibly slow
4 And error prone
4 After months of work, the multi-million dollar
rewrite was scrapped
@nnja
You can try to cover up debt...
(but it probably won't work)
@nnja
The MVP4 (Minimum Viable Product)
4 Get the product to market as soon as possible
@nnja
A Great Idea4 A successful project that was created by a lone
developer in a coffee fueled 48 hours.
@nnja
There Was a Problem
4 Years went on, but the initial code and design didn’t
go away.
4 Instead, it became the base for an expanding project,
with expanding features.
4 There was never any time to refactor.
@nnja
!"#
@nnja
Scope Creep4 Features that someone thought was a good idea one
day, stuck around forever.
4 > “In case we need them. Later.”
@nnja
Sad Developers
4 Minimal working tests (no time to write them).
4 When a release was pushed, something was bound to
break.
4 Made everything feel like it was your fault.
@nnja
Grinding To a Halt
4 Development time for new features skyrocketed
4 The project was deemed too difficult to maintain
4 ... and cancelled.
@nnja
Sometimes you need to
burn it.
With fire.
@nnja
Battling The Monster
@nnja
Don't point fingers
Technical debt is a team-wide problem.
Everybody needs to be part of the
solution.
@nnja
Work Together
4 Code Standards
4 Pair Programming
4 Code Reviews
@nnja
Unless something is on fire,
or you’re losing money,
don't merge unreviewed
code into master.
@nnja
Be Accountable
4 Unit & Integration Tests
4 Pre-Commit Hooks
4 Continuous Integration
@nnja
Make a Commitment
Company tried to fight debt, but they
didn't make a commitment.
@nnja
Ended up with twice as
many technologies in their
stack as needed, and twice
as big of a mess.
@nnja
Sell It To Decision Makers
By allocating project time to tackling debt,
the end result will be less error prone, easier
to maintain, and easier to add features to.
@nnja
Not broken, why fix it?
Source
Ski Rental Problem
4 You’re going skiing for an unknown number of days.
4 It costs $1 a day to rent, or $20 to buy.
Source
Hiring developers is hard.
Technical debt frustrates developers.
Frustrated developers are more likely
to leave.
@nnja
Some lingering debt is inevitable.
Don't be a perfectionist.
Figure out the project tolerance, and
work with it.
@nnja
Use these arguments to
justify the additional time
it takes to do things right
@nnja
To Win The Fight, Pay
Down Your Debt
@nnja
Refactoring
The single greatest tool in your toolbox
@nnja
What is it?
Systematically changing the code
without changing functionality, while
improving design and readability.
@nnja
Refactoring
4 Slow and steady wins the race.
4 The end goal is to refactor without breaking existing
functionality.
@nnja
Refactoring
4 Replace functions and modules incrementally.
4 Test as you go.
4 Tests are mandatory at this step.
@nnja
Prioritize
What causes the biggest & most
frequent pain points for developers?
@nnja
Just like with monetary
debt, pay off the high
interest loan first.
@nnja
Shelf Life
What's the life expectancy of this
project?
Longer shelf life -> higher debt
interest
@nnja
Technical debt can be strategic
If you don't have to pay it off, you got
something for nothing.
@nnja
Making time for refactoring depends
on the size of your team, and the size
of your problem.
@nnja
Guidelines
4 Small
4 Devote a week every 6-8 weeks
4 Medium
4 Devote a person every 1-4 weeks, rotate
4 Large
4 Everyone devotes 10% of their time
@nnja
A Few Last Tips
@nnja
Code should be for humans
@nnja
Boy Scout Rule
"Always check in a module cleaner than when you
checked it out."
Source
Expect To Be Frustrated
The process of cleaning up days / months /
years of bad code can be analogous with
untangling a ball of yarn.
Don't give up.
@nnja
Thank You!
Python @ Microsoft:
bit.ly/atopython
@nnja
@nnja

More Related Content

Similar to Technical Debt - The Code Monster in the Closet

Agile_SDLC_Node.js@Paypal_ppt
Agile_SDLC_Node.js@Paypal_pptAgile_SDLC_Node.js@Paypal_ppt
Agile_SDLC_Node.js@Paypal_ppt
Hitesh Kumar
 

Similar to Technical Debt - The Code Monster in the Closet (20)

Technical stories v1.2
Technical stories v1.2Technical stories v1.2
Technical stories v1.2
 
Extreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software CraftsmanshipExtreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software Craftsmanship
 
From open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysferaFrom open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysfera
 
How to hire frontend engineers
How to hire frontend engineersHow to hire frontend engineers
How to hire frontend engineers
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
Binary crosswords
Binary crosswordsBinary crosswords
Binary crosswords
 
From hello world to goodbye code
From hello world to goodbye codeFrom hello world to goodbye code
From hello world to goodbye code
 
User Centered Design: guarantee that your business process automation project...
User Centered Design: guarantee that your business process automation project...User Centered Design: guarantee that your business process automation project...
User Centered Design: guarantee that your business process automation project...
 
Technology, Project, and People
Technology, Project, and PeopleTechnology, Project, and People
Technology, Project, and People
 
"Startups, comment gérer une équipe de développeurs" par Laurent Cerveau
"Startups, comment gérer une équipe de développeurs" par Laurent Cerveau"Startups, comment gérer une équipe de développeurs" par Laurent Cerveau
"Startups, comment gérer une équipe de développeurs" par Laurent Cerveau
 
Levelling up in open source
Levelling up in open sourceLevelling up in open source
Levelling up in open source
 
05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&process05 DIGI CREATIVE people&process
05 DIGI CREATIVE people&process
 
Dancing for a product release
Dancing for a product releaseDancing for a product release
Dancing for a product release
 
Tieto ped2018 allhumansarenaturalborndesign hinkers
Tieto ped2018 allhumansarenaturalborndesign hinkersTieto ped2018 allhumansarenaturalborndesign hinkers
Tieto ped2018 allhumansarenaturalborndesign hinkers
 
Design For Testability Supplied By Vayoinfo
Design For Testability Supplied By VayoinfoDesign For Testability Supplied By Vayoinfo
Design For Testability Supplied By Vayoinfo
 
Write code and find a job
Write code and find a jobWrite code and find a job
Write code and find a job
 
No Code Past The MVP
No Code Past The MVPNo Code Past The MVP
No Code Past The MVP
 
Agile_SDLC_Node.js@Paypal_ppt
Agile_SDLC_Node.js@Paypal_pptAgile_SDLC_Node.js@Paypal_ppt
Agile_SDLC_Node.js@Paypal_ppt
 
14 Habits of Great SQL Developers
14 Habits of Great SQL Developers14 Habits of Great SQL Developers
14 Habits of Great SQL Developers
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny day
 

More from All Things Open

Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public Policy
All Things Open
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
All Things Open
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart Contract
All Things Open
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with Background
All Things Open
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open Source
All Things Open
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in control
All Things Open
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
All Things Open
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
All Things Open
 

More from All Things Open (20)

Building Reliability - The Realities of Observability
Building Reliability - The Realities of ObservabilityBuilding Reliability - The Realities of Observability
Building Reliability - The Realities of Observability
 
Modern Database Best Practices
Modern Database Best PracticesModern Database Best Practices
Modern Database Best Practices
 
Open Source and Public Policy
Open Source and Public PolicyOpen Source and Public Policy
Open Source and Public Policy
 
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
Weaving Microservices into a Unified GraphQL Schema with graph-quilt - Ashpak...
 
The State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil NashThe State of Passwordless Auth on the Web - Phil Nash
The State of Passwordless Auth on the Web - Phil Nash
 
Total ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScriptTotal ReDoS: The dangers of regex in JavaScript
Total ReDoS: The dangers of regex in JavaScript
 
What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?What Does Real World Mass Adoption of Decentralized Tech Look Like?
What Does Real World Mass Adoption of Decentralized Tech Look Like?
 
How to Write & Deploy a Smart Contract
How to Write & Deploy a Smart ContractHow to Write & Deploy a Smart Contract
How to Write & Deploy a Smart Contract
 
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
Spinning Your Drones with Cadence Workflows, Apache Kafka and TensorFlow
 
DEI Challenges and Success
DEI Challenges and SuccessDEI Challenges and Success
DEI Challenges and Success
 
Scaling Web Applications with Background
Scaling Web Applications with BackgroundScaling Web Applications with Background
Scaling Web Applications with Background
 
Supercharging tutorials with WebAssembly
Supercharging tutorials with WebAssemblySupercharging tutorials with WebAssembly
Supercharging tutorials with WebAssembly
 
Using SQL to Find Needles in Haystacks
Using SQL to Find Needles in HaystacksUsing SQL to Find Needles in Haystacks
Using SQL to Find Needles in Haystacks
 
Configuration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit InterceptConfiguration Security as a Game of Pursuit Intercept
Configuration Security as a Game of Pursuit Intercept
 
Scaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship ProgramScaling an Open Source Sponsorship Program
Scaling an Open Source Sponsorship Program
 
Build Developer Experience Teams for Open Source
Build Developer Experience Teams for Open SourceBuild Developer Experience Teams for Open Source
Build Developer Experience Teams for Open Source
 
Deploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache BeamDeploying Models at Scale with Apache Beam
Deploying Models at Scale with Apache Beam
 
Sudo – Giving access while staying in control
Sudo – Giving access while staying in controlSudo – Giving access while staying in control
Sudo – Giving access while staying in control
 
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML ApplicationsFortifying the Future: Tackling Security Challenges in AI/ML Applications
Fortifying the Future: Tackling Security Challenges in AI/ML Applications
 
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
Securing Cloud Resources Deployed with Control Planes on Kubernetes using Gov...
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 

Technical Debt - The Code Monster in the Closet

  • 1. Technical Debt The code monster in your closet Nina Zakharenko @nnja
  • 3. A series of bad decisions (Both business & technical) @nnja
  • 4. Which lead to -> Error prone code & architecture @nnja
  • 5. ... and using more Resources to accomplish Less @nnja
  • 6. What decisions were made in the past that prevent me from getting sh** done today? @nnja
  • 9. Mistakes I Made Early On 4 Not seeing the value in unit tests 4 Not knowing how to say NO to features @nnja
  • 10. Mistakes I Made Early On 4 Overly optimistic estimates 4 Putting releases over good design & reusable code @nnja
  • 11. Time Crunch That project was due yesterday! I'll take a shortcut, and clean up the mess tomorrow. @nnja
  • 12. Unneeded Complexity Lines of code committed != amount of work accomplished @nnja
  • 13. Lack of understanding 1. Have a problem 2. Look up a solution on stackoverflow 3. Copy & paste it into your code 4. ??? 5. Bugs! @nnja
  • 14. Culture of Despair This is already a heap of trash. Will anyone really notice if I add one more thing to the top? @nnja
  • 15. Red Flags Houston, we have a problem. @nnja
  • 16. Code Smells 4 Not Bugs 4 An indication of a deeper problem @nnja
  • 17. Code Smells 4 Half implemented features 4 No documentation, or poor documentation @nnja
  • 18. Code Smells 4 Commented out code 4 Incorrect comments 4 No tests, or worse: broken tests @nnja
  • 19. Poor Documentation class OrganicGlutenFreePizzaFactory: def get_dough(self): """         Return amazing, organic, GMO and Gluten Free Dough         """ # ran out of organic gluten free, use the other stuff. # return 'organic gluten free dough' return 'gmo pesticide processed gluten-full dough' @nnja
  • 20. Architecture & Design... Smells 4 Parts of the code no one wants to touch 4 Brittle codebase -- changing code in one area breaks other parts of the system 4 Severe outages caused by frequent & unexpected bugs @nnja
  • 21. Good Design -> Implementing new features comes easily Poor Design -> New features are shoe- horned into the system @nnja
  • 23. IRS Chief:"We still have applications that were running when JFK was President" Tech at the IRS
  • 24. 50 Year Old Technology "And we continue to use the COBOL programming language, it is extremely difficult to find IT experts who are versed in this language." @nnja
  • 25. It's not just the IRS 4 Banks & Financial Institutions 4 Universities 4 Air Traffic Control 4 ... many still use COBOL @nnja
  • 26. Story Time 4 I used to work in finance. 4 At the time I was there, all of the banking systems were run on mainframes. 4 The bankers were getting frustrated. They wanted a UI. @nnja
  • 27. Big Idea! 4 Let’s write a fancy new web front end 4 It’ll do ALL the things @nnja
  • 28. But4 Rewriting the backend is too expensive 4 It already does what we need 4 Let's leave the mainframe as the backend @nnja
  • 29. Cursors4 The mainframe would output a text screen from a program result, based on a query. 4 The results would be parsed by reading variables from the screen in certain positions. @nnja
  • 30. Result?4 The new system was incredibly slow 4 And error prone 4 After months of work, the multi-million dollar rewrite was scrapped @nnja
  • 31. You can try to cover up debt... (but it probably won't work) @nnja
  • 32. The MVP4 (Minimum Viable Product) 4 Get the product to market as soon as possible @nnja
  • 33. A Great Idea4 A successful project that was created by a lone developer in a coffee fueled 48 hours. @nnja
  • 34. There Was a Problem 4 Years went on, but the initial code and design didn’t go away. 4 Instead, it became the base for an expanding project, with expanding features. 4 There was never any time to refactor. @nnja
  • 36. Scope Creep4 Features that someone thought was a good idea one day, stuck around forever. 4 > “In case we need them. Later.” @nnja
  • 37. Sad Developers 4 Minimal working tests (no time to write them). 4 When a release was pushed, something was bound to break. 4 Made everything feel like it was your fault. @nnja
  • 38. Grinding To a Halt 4 Development time for new features skyrocketed 4 The project was deemed too difficult to maintain 4 ... and cancelled. @nnja
  • 39. Sometimes you need to burn it. With fire. @nnja
  • 41. Don't point fingers Technical debt is a team-wide problem. Everybody needs to be part of the solution. @nnja
  • 42. Work Together 4 Code Standards 4 Pair Programming 4 Code Reviews @nnja
  • 43. Unless something is on fire, or you’re losing money, don't merge unreviewed code into master. @nnja
  • 44. Be Accountable 4 Unit & Integration Tests 4 Pre-Commit Hooks 4 Continuous Integration @nnja
  • 45. Make a Commitment Company tried to fight debt, but they didn't make a commitment. @nnja
  • 46. Ended up with twice as many technologies in their stack as needed, and twice as big of a mess. @nnja
  • 47. Sell It To Decision Makers By allocating project time to tackling debt, the end result will be less error prone, easier to maintain, and easier to add features to. @nnja
  • 48. Not broken, why fix it? Source
  • 49. Ski Rental Problem 4 You’re going skiing for an unknown number of days. 4 It costs $1 a day to rent, or $20 to buy. Source
  • 50. Hiring developers is hard. Technical debt frustrates developers. Frustrated developers are more likely to leave. @nnja
  • 51. Some lingering debt is inevitable. Don't be a perfectionist. Figure out the project tolerance, and work with it. @nnja
  • 52. Use these arguments to justify the additional time it takes to do things right @nnja
  • 53. To Win The Fight, Pay Down Your Debt @nnja
  • 54. Refactoring The single greatest tool in your toolbox @nnja
  • 55. What is it? Systematically changing the code without changing functionality, while improving design and readability. @nnja
  • 56. Refactoring 4 Slow and steady wins the race. 4 The end goal is to refactor without breaking existing functionality. @nnja
  • 57. Refactoring 4 Replace functions and modules incrementally. 4 Test as you go. 4 Tests are mandatory at this step. @nnja
  • 58. Prioritize What causes the biggest & most frequent pain points for developers? @nnja
  • 59. Just like with monetary debt, pay off the high interest loan first. @nnja
  • 60. Shelf Life What's the life expectancy of this project? Longer shelf life -> higher debt interest @nnja
  • 61. Technical debt can be strategic If you don't have to pay it off, you got something for nothing. @nnja
  • 62. Making time for refactoring depends on the size of your team, and the size of your problem. @nnja
  • 63. Guidelines 4 Small 4 Devote a week every 6-8 weeks 4 Medium 4 Devote a person every 1-4 weeks, rotate 4 Large 4 Everyone devotes 10% of their time @nnja
  • 64. A Few Last Tips @nnja
  • 65. Code should be for humans @nnja
  • 66. Boy Scout Rule "Always check in a module cleaner than when you checked it out." Source
  • 67. Expect To Be Frustrated The process of cleaning up days / months / years of bad code can be analogous with untangling a ball of yarn. Don't give up. @nnja
  • 68. Thank You! Python @ Microsoft: bit.ly/atopython @nnja @nnja