SlideShare a Scribd company logo
1 of 41
Technical Debt
Management
Mark Niebergall
About Mark Niebergall
● Developing in PHP since 2005
● Working on occupational health screening
project
● Security: SSCP, CSSLP Certified
● PHP, databases, JavaScript
● Enjoy being outdoors
Niebergall
● German
● Ancestry.com: nickname for someone who
habitually failed to repay his debts, from
Middle High German nie ‘never’ + a
derivative of vergelten ‘to repay’
The Dig
● Request to dig a hole
The Dig
● Request to dig a hole
The Dig
● Request to dig a hole
The Dig
● Request to dig a hole
The Dig
● Request to dig a hole
University Bid Sales
● Aging computers and hardware
● Obsolete items
● Never opened items
● Broken items needing repair or parts
● Piles of cables and adapters
The Problem - Updates
return a + b
The Problem - Updates
return (a + b).toFixed(2)
The Problem - Updates
if ( !isNaN(parseFloat(a))
|| isFinite(a)
|| !isNaN(parseFloat(b))
|| isFinite(b)
) {
throw “Not a number”;
}
return (a + b).toFixed(2)
The Problem - Files
index.html
stuff.js
morestuff.js
moreawesomestuff.js
super_more_awesome_stuff.js
evenMoreSuperAwesomeAtuff.js
The Problem - Database
Table: person
Columns: name, address, address1, city, state,
zip, phone, phone2, phone3, email, email2,
address_mailing, address1_mailing,
city_mailing, state_mailing, zip_mailing,
create_timestamp_string, …
The Problem - Database
Table: thing
Columns: name, description, image,
what_it_does, hours, location, cost, time,
owner, obscure_field, ts, sd, or, qa, ei, num, +
50 more columns
The Problem - Architecture
$sql = “SELECT * FROM big_table WHERE
something = “ $_POST[‘from_user’];
$result = mysql_query($sql);
The Problem - Architecture
$value = [
‘some_key’ => [
‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’],
‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass]
];
Definition
● Metaphor coined by Ward Cunningham
● Explained further by Martin Fowler, others
Definition
● Consequences of poor design, architecture
● Prudent vs reckless
● Incurred knowingly and inadvertently
● Work needed to complete job properly
Sources of Technical Debt
● Time, resources, and scope creep
● Ignorance
● Misunderstanding of requirements
● Understanding of project
● Unwillingness or lack of motivation
Impact
● Increased time to deliver new features
● Increased time to maintain application
● Increased time paying off debts
● Increased code complexity
Impact
● Software brittleness
● Software bloat
● Magic in application
Personal Finances
● Consider similarities between personal debts
and technical debts
● Personal credit score or rating
● Balanced budget
● Expenditures
● Savings
● Education and training
Positive Impacts of Debt
● Education
● Housing
● Goals
● Business
Negative Impacts of Debt
● Loss of freedom
● Hopelessness
● Depression
● Burdensome
● Stress
● Relationships with others
Stay within Budget
● Avoid excessive debt
● Minimize risk
● Stay within means
● Use available resources
● Iron Triangle: Scope, Resources, Time
Avoid Debt - Operational
● Planning
● Requirements gathering
● Analyze project
● Documentation
● Acceptance tests
Avoid Debt - Technical
● Use a framework
● Be open to new technologies
Avoid Debt - Technical
● Unit tests
● Loosely coupled code
● Code reusability
● Reduce code complexity
Avoid Debt - Technical
● Code reviews and feedback
● Coding standards
● Design patterns
● General best practices
Avoid Debt - Technical
● Continuous integration tools
● Configuration management tools
Static Code Analysis
● Style
● Size
● Design
● Naming
● Duplication
Pay off Debt
● Make a plan
● Set goals
● Stay inside your budget
Pay off Debt
● Consistency
● Pay off some debt each sprint or regular
interval
Repeating Process
● Identify debt
● Make a plan
● Take action
Taking on Debt
Four Rights
● Reason
● Time
● Terms
● Amount
Professional Development
● Participate in local user groups
● Find experienced mentors
● Attend conferences
● Read blogs
● Learn
Refactor
● Sustainability of current solution
● Large effort
● Long term benefits
● Explore available technologies
● Prevent excessive new debt
Technical Debt
● Metaphor
● Reduce your debt
● Pay off debt using repeating process
● Tools available for your project
● Keep learning
References
● Ancestry.com http://www.ancestry.com/name-origin?surname=niebergall
● Ward Cunningham https://www.youtube.com/watch?v=pqeJFYwnkjE
● Martin Fowler http://martinfowler.com/bliki/TechnicalDebt.html
● David Laribee https://msdn.microsoft.com/en-us/magazine/ee819135.aspx
● Mark Noneman https://www.youtube.com/watch?v=cb5fkftdD9k
Questions?
● https://joind.in/14464

More Related Content

Viewers also liked

Kraft and DiagSoft
Kraft and DiagSoft Kraft and DiagSoft
Kraft and DiagSoft Gordon Kraft
 
PROCON DATA Field Services Cloud Persönliche Zählerablesung
PROCON DATA Field Services Cloud Persönliche ZählerablesungPROCON DATA Field Services Cloud Persönliche Zählerablesung
PROCON DATA Field Services Cloud Persönliche ZählerablesungPROCON DATA Ges.m.b.H:
 
Mesa redonda UNIMET mayo 24
Mesa redonda UNIMET mayo 24Mesa redonda UNIMET mayo 24
Mesa redonda UNIMET mayo 24Raymond Marquina
 
Developing for Mobile Web
Developing for Mobile WebDeveloping for Mobile Web
Developing for Mobile WebBarbara Bermes
 
Red de redes. internet
Red de redes. internetRed de redes. internet
Red de redes. internetLucas Rial
 
Estudio la Migración y Municipio AMUCH
Estudio la Migración y Municipio AMUCHEstudio la Migración y Municipio AMUCH
Estudio la Migración y Municipio AMUCHNelson Leiva®
 
Revista Boa Vontade - Edição 240
Revista Boa Vontade - Edição 240Revista Boa Vontade - Edição 240
Revista Boa Vontade - Edição 240Boa Vontade
 
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...ErgoCV
 
The curse of the mummy chapter 6
The curse of the mummy   chapter 6The curse of the mummy   chapter 6
The curse of the mummy chapter 6MrErwin
 
The impact of Recruitment and Selection process on candidates' intention to a...
The impact of Recruitment and Selection process on candidates' intention to a...The impact of Recruitment and Selection process on candidates' intention to a...
The impact of Recruitment and Selection process on candidates' intention to a...Target Research
 
Reduce Costs Through Printer Consolidation
Reduce Costs Through Printer ConsolidationReduce Costs Through Printer Consolidation
Reduce Costs Through Printer ConsolidationLarry Levine
 

Viewers also liked (20)

Kraft and DiagSoft
Kraft and DiagSoft Kraft and DiagSoft
Kraft and DiagSoft
 
Portfolio
PortfolioPortfolio
Portfolio
 
PROCON DATA Field Services Cloud Persönliche Zählerablesung
PROCON DATA Field Services Cloud Persönliche ZählerablesungPROCON DATA Field Services Cloud Persönliche Zählerablesung
PROCON DATA Field Services Cloud Persönliche Zählerablesung
 
Ar Tmarketing 3 Bpix
Ar Tmarketing 3 BpixAr Tmarketing 3 Bpix
Ar Tmarketing 3 Bpix
 
Mesa redonda UNIMET mayo 24
Mesa redonda UNIMET mayo 24Mesa redonda UNIMET mayo 24
Mesa redonda UNIMET mayo 24
 
Developing for Mobile Web
Developing for Mobile WebDeveloping for Mobile Web
Developing for Mobile Web
 
Emc expoesymposium
Emc expoesymposiumEmc expoesymposium
Emc expoesymposium
 
Red de redes. internet
Red de redes. internetRed de redes. internet
Red de redes. internet
 
Tushar_Vaidya1
Tushar_Vaidya1Tushar_Vaidya1
Tushar_Vaidya1
 
Estudio la Migración y Municipio AMUCH
Estudio la Migración y Municipio AMUCHEstudio la Migración y Municipio AMUCH
Estudio la Migración y Municipio AMUCH
 
Driving User Adoption for SharePoint
Driving User Adoption for SharePointDriving User Adoption for SharePoint
Driving User Adoption for SharePoint
 
Revista Boa Vontade - Edição 240
Revista Boa Vontade - Edição 240Revista Boa Vontade - Edição 240
Revista Boa Vontade - Edição 240
 
Menu enero
Menu eneroMenu enero
Menu enero
 
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...
Presentación Colaboradores 5as Jornadas de Ergonomía y Psicosociología 'Buena...
 
The curse of the mummy chapter 6
The curse of the mummy   chapter 6The curse of the mummy   chapter 6
The curse of the mummy chapter 6
 
Tesis - validación
Tesis -  validaciónTesis -  validación
Tesis - validación
 
BUDAYA BALI
BUDAYA BALIBUDAYA BALI
BUDAYA BALI
 
Física clásica
Física clásicaFísica clásica
Física clásica
 
The impact of Recruitment and Selection process on candidates' intention to a...
The impact of Recruitment and Selection process on candidates' intention to a...The impact of Recruitment and Selection process on candidates' intention to a...
The impact of Recruitment and Selection process on candidates' intention to a...
 
Reduce Costs Through Printer Consolidation
Reduce Costs Through Printer ConsolidationReduce Costs Through Printer Consolidation
Reduce Costs Through Printer Consolidation
 

Similar to Technical Debt Management

Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt ManagementMark Niebergall
 
Agile Methods and Data Warehousing
Agile Methods and Data WarehousingAgile Methods and Data Warehousing
Agile Methods and Data WarehousingKent Graziano
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business PerspectiveMichael Vax
 
Project mgt class presentation
Project mgt class presentationProject mgt class presentation
Project mgt class presentationMichael Reina
 
Odoo Implementation Methodology
Odoo Implementation MethodologyOdoo Implementation Methodology
Odoo Implementation MethodologyOdoo
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringCarsten Windler
 
Balancing PM & Software Development Practices by Splunk Sr PM
Balancing PM & Software Development Practices by Splunk Sr PMBalancing PM & Software Development Practices by Splunk Sr PM
Balancing PM & Software Development Practices by Splunk Sr PMProduct School
 
GDSC-UB_Google_interview_process_final.pdf
GDSC-UB_Google_interview_process_final.pdfGDSC-UB_Google_interview_process_final.pdf
GDSC-UB_Google_interview_process_final.pdfGdscUb
 
Big data101kagglepresentation
Big data101kagglepresentationBig data101kagglepresentation
Big data101kagglepresentationAlexandru Sisu
 
Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Fwdays
 
Death to project documentation with eXtreme Programming
Death to project documentation with eXtreme ProgrammingDeath to project documentation with eXtreme Programming
Death to project documentation with eXtreme ProgrammingAlex Fernandez
 
Balancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeBalancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeDave Hulbert
 
DevSecCon Boston 2018: Technical debt - why I love it by Mike Bursell
DevSecCon Boston 2018: Technical debt - why I love it by Mike BursellDevSecCon Boston 2018: Technical debt - why I love it by Mike Bursell
DevSecCon Boston 2018: Technical debt - why I love it by Mike BursellDevSecCon
 
The lean principles of data ops
The lean principles of data opsThe lean principles of data ops
The lean principles of data opsLars Albertsson
 
Legacy code - Taming The Beast
Legacy code  - Taming The BeastLegacy code  - Taming The Beast
Legacy code - Taming The BeastSARCCOM
 
DRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDrupalCamp Kyiv
 
Developer Productivity Engineering with Gradle
Developer Productivity Engineering with GradleDeveloper Productivity Engineering with Gradle
Developer Productivity Engineering with GradleAll Things Open
 
Serhii Herasymov: Boost sales through Accelerators (UA)
Serhii Herasymov: Boost sales through Accelerators (UA)Serhii Herasymov: Boost sales through Accelerators (UA)
Serhii Herasymov: Boost sales through Accelerators (UA)Lviv Startup Club
 

Similar to Technical Debt Management (20)

Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt Management
 
Agile Methods and Data Warehousing
Agile Methods and Data WarehousingAgile Methods and Data Warehousing
Agile Methods and Data Warehousing
 
Technical debt a Business Perspective
Technical debt a Business PerspectiveTechnical debt a Business Perspective
Technical debt a Business Perspective
 
Project mgt class presentation
Project mgt class presentationProject mgt class presentation
Project mgt class presentation
 
Odoo Implementation Methodology
Odoo Implementation MethodologyOdoo Implementation Methodology
Odoo Implementation Methodology
 
Why change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and RefactoringWhy change code that works - On Technical Debt and Refactoring
Why change code that works - On Technical Debt and Refactoring
 
Balancing PM & Software Development Practices by Splunk Sr PM
Balancing PM & Software Development Practices by Splunk Sr PMBalancing PM & Software Development Practices by Splunk Sr PM
Balancing PM & Software Development Practices by Splunk Sr PM
 
GDSC-UB_Google_interview_process_final.pdf
GDSC-UB_Google_interview_process_final.pdfGDSC-UB_Google_interview_process_final.pdf
GDSC-UB_Google_interview_process_final.pdf
 
Big data101kagglepresentation
Big data101kagglepresentationBig data101kagglepresentation
Big data101kagglepresentation
 
Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"
 
Death to project documentation with eXtreme Programming
Death to project documentation with eXtreme ProgrammingDeath to project documentation with eXtreme Programming
Death to project documentation with eXtreme Programming
 
Balancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeBalancing Technical Debt and Clean Code
Balancing Technical Debt and Clean Code
 
DevSecCon Boston 2018: Technical debt - why I love it by Mike Bursell
DevSecCon Boston 2018: Technical debt - why I love it by Mike BursellDevSecCon Boston 2018: Technical debt - why I love it by Mike Bursell
DevSecCon Boston 2018: Technical debt - why I love it by Mike Bursell
 
The lean principles of data ops
The lean principles of data opsThe lean principles of data ops
The lean principles of data ops
 
Legacy code - Taming The Beast
Legacy code  - Taming The BeastLegacy code  - Taming The Beast
Legacy code - Taming The Beast
 
DRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTRDRUPAL AUDITS MADE FASTR
DRUPAL AUDITS MADE FASTR
 
Technical Debt.pptx
Technical Debt.pptxTechnical Debt.pptx
Technical Debt.pptx
 
Engineer - Mastering the Art of Software
Engineer - Mastering the Art of SoftwareEngineer - Mastering the Art of Software
Engineer - Mastering the Art of Software
 
Developer Productivity Engineering with Gradle
Developer Productivity Engineering with GradleDeveloper Productivity Engineering with Gradle
Developer Productivity Engineering with Gradle
 
Serhii Herasymov: Boost sales through Accelerators (UA)
Serhii Herasymov: Boost sales through Accelerators (UA)Serhii Herasymov: Boost sales through Accelerators (UA)
Serhii Herasymov: Boost sales through Accelerators (UA)
 

More from Mark Niebergall

Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023Mark Niebergall
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Mark Niebergall
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023Mark Niebergall
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Mark Niebergall
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentMark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatBDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatMark Niebergall
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatBDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatMark Niebergall
 
Relational Database Design Bootcamp
Relational Database Design BootcampRelational Database Design Bootcamp
Relational Database Design BootcampMark Niebergall
 
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Mark Niebergall
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Mark Niebergall
 
Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018Mark Niebergall
 
Defensive Coding Crash Course Tutorial
Defensive Coding Crash Course TutorialDefensive Coding Crash Course Tutorial
Defensive Coding Crash Course TutorialMark Niebergall
 
Inheritance: Vertical or Horizontal
Inheritance: Vertical or HorizontalInheritance: Vertical or Horizontal
Inheritance: Vertical or HorizontalMark Niebergall
 
Cybersecurity State of the Union
Cybersecurity State of the UnionCybersecurity State of the Union
Cybersecurity State of the UnionMark Niebergall
 
Cryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 WorkshopCryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 WorkshopMark Niebergall
 
Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017Mark Niebergall
 

More from Mark Niebergall (20)

Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022
 
Developing SOLID Code
Developing SOLID CodeDeveloping SOLID Code
Developing SOLID Code
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
 
Stacking Up Middleware
Stacking Up MiddlewareStacking Up Middleware
Stacking Up Middleware
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatBDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
 
BDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and BehatBDD API Tests with Gherkin and Behat
BDD API Tests with Gherkin and Behat
 
Hacking with PHP
Hacking with PHPHacking with PHP
Hacking with PHP
 
Relational Database Design Bootcamp
Relational Database Design BootcampRelational Database Design Bootcamp
Relational Database Design Bootcamp
 
Starting Out With PHP
Starting Out With PHPStarting Out With PHP
Starting Out With PHP
 
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
Automatic PHP 7 Compatibility Checking Using php7cc (and PHPCompatibility)
 
Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018Debugging PHP with Xdebug - PHPUK 2018
Debugging PHP with Xdebug - PHPUK 2018
 
Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018Advanced PHP Simplified - Sunshine PHP 2018
Advanced PHP Simplified - Sunshine PHP 2018
 
Defensive Coding Crash Course Tutorial
Defensive Coding Crash Course TutorialDefensive Coding Crash Course Tutorial
Defensive Coding Crash Course Tutorial
 
Inheritance: Vertical or Horizontal
Inheritance: Vertical or HorizontalInheritance: Vertical or Horizontal
Inheritance: Vertical or Horizontal
 
Cybersecurity State of the Union
Cybersecurity State of the UnionCybersecurity State of the Union
Cybersecurity State of the Union
 
Cryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 WorkshopCryptography With PHP - ZendCon 2017 Workshop
Cryptography With PHP - ZendCon 2017 Workshop
 
Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017Defensive Coding Crash Course - ZendCon 2017
Defensive Coding Crash Course - ZendCon 2017
 

Recently uploaded

Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 

Recently uploaded (20)

Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 

Technical Debt Management

  • 2. About Mark Niebergall ● Developing in PHP since 2005 ● Working on occupational health screening project ● Security: SSCP, CSSLP Certified ● PHP, databases, JavaScript ● Enjoy being outdoors
  • 3. Niebergall ● German ● Ancestry.com: nickname for someone who habitually failed to repay his debts, from Middle High German nie ‘never’ + a derivative of vergelten ‘to repay’
  • 4. The Dig ● Request to dig a hole
  • 5. The Dig ● Request to dig a hole
  • 6. The Dig ● Request to dig a hole
  • 7. The Dig ● Request to dig a hole
  • 8. The Dig ● Request to dig a hole
  • 9. University Bid Sales ● Aging computers and hardware ● Obsolete items ● Never opened items ● Broken items needing repair or parts ● Piles of cables and adapters
  • 10. The Problem - Updates return a + b
  • 11. The Problem - Updates return (a + b).toFixed(2)
  • 12. The Problem - Updates if ( !isNaN(parseFloat(a)) || isFinite(a) || !isNaN(parseFloat(b)) || isFinite(b) ) { throw “Not a number”; } return (a + b).toFixed(2)
  • 13. The Problem - Files index.html stuff.js morestuff.js moreawesomestuff.js super_more_awesome_stuff.js evenMoreSuperAwesomeAtuff.js
  • 14. The Problem - Database Table: person Columns: name, address, address1, city, state, zip, phone, phone2, phone3, email, email2, address_mailing, address1_mailing, city_mailing, state_mailing, zip_mailing, create_timestamp_string, …
  • 15. The Problem - Database Table: thing Columns: name, description, image, what_it_does, hours, location, cost, time, owner, obscure_field, ts, sd, or, qa, ei, num, + 50 more columns
  • 16. The Problem - Architecture $sql = “SELECT * FROM big_table WHERE something = “ $_POST[‘from_user’]; $result = mysql_query($sql);
  • 17. The Problem - Architecture $value = [ ‘some_key’ => [ ‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’], ‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass] ];
  • 18. Definition ● Metaphor coined by Ward Cunningham ● Explained further by Martin Fowler, others
  • 19. Definition ● Consequences of poor design, architecture ● Prudent vs reckless ● Incurred knowingly and inadvertently ● Work needed to complete job properly
  • 20. Sources of Technical Debt ● Time, resources, and scope creep ● Ignorance ● Misunderstanding of requirements ● Understanding of project ● Unwillingness or lack of motivation
  • 21. Impact ● Increased time to deliver new features ● Increased time to maintain application ● Increased time paying off debts ● Increased code complexity
  • 22. Impact ● Software brittleness ● Software bloat ● Magic in application
  • 23. Personal Finances ● Consider similarities between personal debts and technical debts ● Personal credit score or rating ● Balanced budget ● Expenditures ● Savings ● Education and training
  • 24. Positive Impacts of Debt ● Education ● Housing ● Goals ● Business
  • 25. Negative Impacts of Debt ● Loss of freedom ● Hopelessness ● Depression ● Burdensome ● Stress ● Relationships with others
  • 26. Stay within Budget ● Avoid excessive debt ● Minimize risk ● Stay within means ● Use available resources ● Iron Triangle: Scope, Resources, Time
  • 27. Avoid Debt - Operational ● Planning ● Requirements gathering ● Analyze project ● Documentation ● Acceptance tests
  • 28. Avoid Debt - Technical ● Use a framework ● Be open to new technologies
  • 29. Avoid Debt - Technical ● Unit tests ● Loosely coupled code ● Code reusability ● Reduce code complexity
  • 30. Avoid Debt - Technical ● Code reviews and feedback ● Coding standards ● Design patterns ● General best practices
  • 31. Avoid Debt - Technical ● Continuous integration tools ● Configuration management tools
  • 32. Static Code Analysis ● Style ● Size ● Design ● Naming ● Duplication
  • 33. Pay off Debt ● Make a plan ● Set goals ● Stay inside your budget
  • 34. Pay off Debt ● Consistency ● Pay off some debt each sprint or regular interval
  • 35. Repeating Process ● Identify debt ● Make a plan ● Take action
  • 36. Taking on Debt Four Rights ● Reason ● Time ● Terms ● Amount
  • 37. Professional Development ● Participate in local user groups ● Find experienced mentors ● Attend conferences ● Read blogs ● Learn
  • 38. Refactor ● Sustainability of current solution ● Large effort ● Long term benefits ● Explore available technologies ● Prevent excessive new debt
  • 39. Technical Debt ● Metaphor ● Reduce your debt ● Pay off debt using repeating process ● Tools available for your project ● Keep learning
  • 40. References ● Ancestry.com http://www.ancestry.com/name-origin?surname=niebergall ● Ward Cunningham https://www.youtube.com/watch?v=pqeJFYwnkjE ● Martin Fowler http://martinfowler.com/bliki/TechnicalDebt.html ● David Laribee https://msdn.microsoft.com/en-us/magazine/ee819135.aspx ● Mark Noneman https://www.youtube.com/watch?v=cb5fkftdD9k