SlideShare a Scribd company logo
1 of 75
Download to read offline
Reduce Your
Technical Debt
Mark Niebergall - https://joind.in/talk/a3f07
Thank You Sponsors
About Mark Niebergall
● PHP since 2005
● Masters degree in MIS
● Senior Software Engineer
● Drug screening project
● UPHPU President
● SSCP, CSSLP Certified and SME
● Drones, fishing, skiing, father, husband
UPHPU
● 3rd Thursday of each month in Lehi
● PHP and related topics
○ Friday 6pm OpenWest review
○ August - Git
○ September - PHP TestFest
○ October - Defensive Coding
● Networking, community
● Pizza, pop, dessert, swag
About Mark Niebergall
● German
● Ancestry.com: nickname for someone who
habitually failed to repay his debts
Reduce Your Technical Debt
Reduce Your Technical Debt
● Definition
● How it is introduced
● Impact on a project
● Avoid adding
● Paying off existing debt
Audience Survey
● Roles on projects
● Languages used
Disclaimer
● PHP technologies
● Concepts apply to other languages and
projects
Definition
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
Examples
Examples
● Unused code (dead wood)
● Old versions
● Dated technology
● Deprecated functionality
Examples
● Buggy code
● Overly complicated code
● Insecure code
● “Smelly” code
Examples
● Doesn’t meet requirements
● Insufficient features
● No documentation
● No unit tests
Examples
● Incomplete coding standards
● Missing database constraints
● Missing validation
● Tightly coupled code
Clearance Rack
● Food about to expire
● Questionable dairy and bread
● Items that have been sitting on the shelf a
little too long
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
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
utilities.js
core.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 - Security
$sql = “SELECT * FROM big_table WHERE
something = “ $_POST[‘from_user’];
$result = mysqli_query($sql);
The Problem - Architecture
$value = [
‘some_key’ => [
‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’],
‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass]
];
Sources of Technical Debt
Sources of Technical Debt
● New versions of libraries
● New versions of languages
● New versions of frameworks
Sources of Technical Debt
● Inexperience
Sources of Technical Debt
● Architecture changes
Sources of Technical Debt
● Time
● Resources
● Scope creep
Sources of Technical Debt
● Ignorance
● Misunderstanding of requirements
● Understanding of project
Sources of Technical Debt
● Unwillingness
● Lack of motivation
Impact
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
● Software rot
● Magic in application
Avoid Debt
Avoid Debt
● 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
● Package Manager
● Move 3rd party library out of project code
● Keep libraries, software up-to-date
● “Life is too short for old software” - Sebastian
Bergmann
Avoid Debt - Technical
● Unit tests
● Loosely coupled code
● Code reusability
● Reduce code complexity
● Leverage language features
Avoid Debt - Technical
● Static code analysis tools
○ Automated way to check code health
○ Unit test coverage
○ Coding standards
○ Unused code
○ Design patterns
○ Metrics
○ Methods doing too much
Avoid Debt - Technical
● Dynamic code review
○ Review by a human
○ Security reviews
○ Architecture
○ Linked functionality
○ Business rules
○ Functional bugs
Avoid Debt - Technical
● Continuous integration tools
● Configuration management tools
Avoid Debt - Technical
● Code reviews and feedback
● Coding standards
● Design patterns
● General best practices
Paying off Debt
Paying off Debt
● My experience with a big project
● Included PM, developers, devops, DBAs,
system administrators, QA, IT leadership
● Buy-in from upper management
● Application is faster, more stable, more
secure, modernized, easier to maintain
Paying off Debt
● Identified pain points
● Created epics
● Set priorities
● Defined user stories
Paying off Debt
● Assigned work, ownership
● Regular reporting as a team
● Regular reporting to management
Paying off Debt
● Defined goals for quarters, years
Paying off Debt
● Data migration out of database and into
cloud storage
● Data consolidation
● Data restructuring
Paying off Debt
● Adding middleware
● Framework upgrades
● Software upgrades
● Library upgrades
Paying off Debt
● Major overhauls in painful areas
Paying off Debt
● Moving processes to queue manager
● Cleaning up technology stack
Paying off Debt
● Security updates
● Auditing improvements
Paying off Debt
● Work spread out over time
● Measurable successes and milestones
● Very successful and still ongoing
Paying off Debt
● Make a plan
● Set goals
● Stay inside your budget
Paying off Debt
● Consistency
● Pay off some debt each sprint or regular
interval
Paying off Debt
● Repeating process
○ Identify debt
○ Make a plan
○ Take action
Taking on Debt
Taking on Debt
Four Rights
● Reason
● Time
● Terms
● Amount
Professional Development
● Participate in local user groups
● Find experienced mentors
● Attend conferences
● Read blogs
● Learn
Rewrite vs Refactor
Rewrite
● New project to replace current solution
Rewrite
● Sustainability of current solution is critical
● Large effort
● Long term benefits, not short
● Explore available technologies
● Prevent excessive new debt
● Higher risk of failure
Refactor
● Replace pieces of project in-place
Refactor
● Break effort up over time
● Results both short and long term
● Prioritize what to rework first
● Lower risk of failure
Rewrite vs Refactor
● Sustainability of current solution
● Level of effort
● Short and long term benefits
● Feasibility
● Technology stack
● Team capabilities
Review
Technical Debt
● Metaphor
● Reduce your debt
● Pay off debt using repeating process
● Tools available for your project
● Apply understanding to improve architecture
Questions?
● https://joind.in/talk/a3f07
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

More Related Content

What's hot

Technical Debt
Technical DebtTechnical Debt
Technical DebtGary Short
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerLemi Orhan Ergin
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBeneluxenaramore
 
Technical Debt 101
Technical Debt 101Technical Debt 101
Technical Debt 101Intechnica
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedAccesto
 
Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debtzazworka
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisM Firdaus Harun
 
The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonLeanDog
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt TrapDoc Norton
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridgeenaramore
 
Xp presentation 2003
Xp presentation 2003Xp presentation 2003
Xp presentation 2003eaiti
 
ABC of Agile (Scrum & Extreme Programming)
ABC of Agile (Scrum & Extreme Programming)ABC of Agile (Scrum & Extreme Programming)
ABC of Agile (Scrum & Extreme Programming)Amardeep Vishwakarma
 
10 pmp communication management exam
10 pmp communication  management exam10 pmp communication  management exam
10 pmp communication management examJamil Faraj , PMP
 
04 pmp integration management exam
04 pmp integration management exam04 pmp integration management exam
04 pmp integration management examJamil Faraj , PMP
 
Integrating Quick Test Pro and Hammer – Experience Report
Integrating Quick Test Pro and Hammer – Experience ReportIntegrating Quick Test Pro and Hammer – Experience Report
Integrating Quick Test Pro and Hammer – Experience ReportBrett Leonard
 
PMP 1600 Questions by TechFAQ360
PMP 1600 Questions by TechFAQ360PMP 1600 Questions by TechFAQ360
PMP 1600 Questions by TechFAQ360Artonline Home
 

What's hot (20)

Technical Debt
Technical DebtTechnical Debt
Technical Debt
 
Technical debt
Technical debtTechnical debt
Technical debt
 
Technical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The DangerTechnical Debt: Do Not Underestimate The Danger
Technical Debt: Do Not Underestimate The Danger
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBenelux
 
Technical Debt 101
Technical Debt 101Technical Debt 101
Technical Debt 101
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Technical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailedTechnical Debt - The number one reason why technical projects get derailed
Technical Debt - The number one reason why technical projects get derailed
 
Identifying and Managing Technical Debt
Identifying and Managing Technical DebtIdentifying and Managing Technical Debt
Identifying and Managing Technical Debt
 
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit AnalysisTowards a Technical Debt Management Framework based on Cost-Benefit Analysis
Towards a Technical Debt Management Framework based on Cost-Benefit Analysis
 
The Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" NortonThe Technical Debt Trap - Michael "Doc" Norton
The Technical Debt Trap - Michael "Doc" Norton
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Technical Debt - osbridge
Technical Debt - osbridgeTechnical Debt - osbridge
Technical Debt - osbridge
 
Xp presentation 2003
Xp presentation 2003Xp presentation 2003
Xp presentation 2003
 
ABC of Agile (Scrum & Extreme Programming)
ABC of Agile (Scrum & Extreme Programming)ABC of Agile (Scrum & Extreme Programming)
ABC of Agile (Scrum & Extreme Programming)
 
Myths
MythsMyths
Myths
 
10 pmp communication management exam
10 pmp communication  management exam10 pmp communication  management exam
10 pmp communication management exam
 
04 pmp integration management exam
04 pmp integration management exam04 pmp integration management exam
04 pmp integration management exam
 
Integrating Quick Test Pro and Hammer – Experience Report
Integrating Quick Test Pro and Hammer – Experience ReportIntegrating Quick Test Pro and Hammer – Experience Report
Integrating Quick Test Pro and Hammer – Experience Report
 
PMP 1600 Questions by TechFAQ360
PMP 1600 Questions by TechFAQ360PMP 1600 Questions by TechFAQ360
PMP 1600 Questions by TechFAQ360
 
Pmp6
Pmp6Pmp6
Pmp6
 

Similar to Technical Debt Management

Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt ManagementMark Niebergall
 
Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt ManagementMark Niebergall
 
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
 
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsTechnical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsOutSystems
 
Amrutha_Resume[1_2]
Amrutha_Resume[1_2]Amrutha_Resume[1_2]
Amrutha_Resume[1_2]Amrutha T
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code cleanBrett Child
 
Balancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeBalancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeDave Hulbert
 
Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectivelyAshutosh Agarwal
 
Project manager with 10+ years of IT experience.
Project manager with 10+ years of IT experience.Project manager with 10+ years of IT experience.
Project manager with 10+ years of IT experience.Rakesh Chandalia
 
Building Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringBuilding Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringMuhammad Shehata
 
Tracking and Controlling Technical Documentation Projects
Tracking and Controlling Technical Documentation ProjectsTracking and Controlling Technical Documentation Projects
Tracking and Controlling Technical Documentation ProjectsSaiff Solutions, Inc.
 
Running Agile on a non-Agile Environment, by Nuno Caneco
Running Agile on a non-Agile Environment, by Nuno CanecoRunning Agile on a non-Agile Environment, by Nuno Caneco
Running Agile on a non-Agile Environment, by Nuno CanecoAgile Connect®
 
Running Scrum on a non-Agile environment - Tales from a past experience" By N...
Running Scrum on a non-Agile environment - Tales from a past experience" By N...Running Scrum on a non-Agile environment - Tales from a past experience" By N...
Running Scrum on a non-Agile environment - Tales from a past experience" By N...Agile Connect Lisbon
 
Software Process and Project Management - CS832E02 unit 3
Software Process and Project Management - CS832E02 unit 3Software Process and Project Management - CS832E02 unit 3
Software Process and Project Management - CS832E02 unit 3Mithun B N
 
Resume_Arindom_Updated
Resume_Arindom_UpdatedResume_Arindom_Updated
Resume_Arindom_UpdatedArindom Biswas
 
Resume-Sourav Mitra
Resume-Sourav MitraResume-Sourav Mitra
Resume-Sourav Mitrasourav mitra
 
Building a custom cms with django
Building a custom cms with djangoBuilding a custom cms with django
Building a custom cms with djangoYann Malet
 
Legacy code - Taming The Beast
Legacy code  - Taming The BeastLegacy code  - Taming The Beast
Legacy code - Taming The BeastSARCCOM
 

Similar to Technical Debt Management (20)

Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt Management
 
Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt Management
 
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
 
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsTechnical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
 
Amrutha_Resume[1_2]
Amrutha_Resume[1_2]Amrutha_Resume[1_2]
Amrutha_Resume[1_2]
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code clean
 
Balancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeBalancing Technical Debt and Clean Code
Balancing Technical Debt and Clean Code
 
Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectively
 
Project manager with 10+ years of IT experience.
Project manager with 10+ years of IT experience.Project manager with 10+ years of IT experience.
Project manager with 10+ years of IT experience.
 
Building Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software EngineeringBuilding Sustainable Software: An Introduction to Software Engineering
Building Sustainable Software: An Introduction to Software Engineering
 
Tracking and Controlling Technical Documentation Projects
Tracking and Controlling Technical Documentation ProjectsTracking and Controlling Technical Documentation Projects
Tracking and Controlling Technical Documentation Projects
 
Running Agile on a non-Agile Environment, by Nuno Caneco
Running Agile on a non-Agile Environment, by Nuno CanecoRunning Agile on a non-Agile Environment, by Nuno Caneco
Running Agile on a non-Agile Environment, by Nuno Caneco
 
Running Scrum on a non-Agile environment - Tales from a past experience" By N...
Running Scrum on a non-Agile environment - Tales from a past experience" By N...Running Scrum on a non-Agile environment - Tales from a past experience" By N...
Running Scrum on a non-Agile environment - Tales from a past experience" By N...
 
Software Process and Project Management - CS832E02 unit 3
Software Process and Project Management - CS832E02 unit 3Software Process and Project Management - CS832E02 unit 3
Software Process and Project Management - CS832E02 unit 3
 
Resume_Arindom_Updated
Resume_Arindom_UpdatedResume_Arindom_Updated
Resume_Arindom_Updated
 
JC_Gabuya_Resume
JC_Gabuya_ResumeJC_Gabuya_Resume
JC_Gabuya_Resume
 
Resume-Sourav Mitra
Resume-Sourav MitraResume-Sourav Mitra
Resume-Sourav Mitra
 
Building a custom cms with django
Building a custom cms with djangoBuilding a custom cms with django
Building a custom cms with django
 
Legacy code - Taming The Beast
Legacy code  - Taming The BeastLegacy code  - Taming The Beast
Legacy code - Taming The Beast
 
SudhanshuKumar
SudhanshuKumarSudhanshuKumar
SudhanshuKumar
 

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

Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 

Recently uploaded (20)

Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 

Technical Debt Management

  • 1. Reduce Your Technical Debt Mark Niebergall - https://joind.in/talk/a3f07
  • 3. About Mark Niebergall ● PHP since 2005 ● Masters degree in MIS ● Senior Software Engineer ● Drug screening project ● UPHPU President ● SSCP, CSSLP Certified and SME ● Drones, fishing, skiing, father, husband
  • 4. UPHPU ● 3rd Thursday of each month in Lehi ● PHP and related topics ○ Friday 6pm OpenWest review ○ August - Git ○ September - PHP TestFest ○ October - Defensive Coding ● Networking, community ● Pizza, pop, dessert, swag
  • 5. About Mark Niebergall ● German ● Ancestry.com: nickname for someone who habitually failed to repay his debts
  • 7. Reduce Your Technical Debt ● Definition ● How it is introduced ● Impact on a project ● Avoid adding ● Paying off existing debt
  • 8. Audience Survey ● Roles on projects ● Languages used
  • 9. Disclaimer ● PHP technologies ● Concepts apply to other languages and projects
  • 11. Definition ● Metaphor coined by Ward Cunningham ● Explained further by Martin Fowler, others
  • 12. Definition ● Consequences of poor design, architecture ● Prudent vs reckless ● Incurred knowingly and inadvertently ● Work needed to complete job properly
  • 14. Examples ● Unused code (dead wood) ● Old versions ● Dated technology ● Deprecated functionality
  • 15. Examples ● Buggy code ● Overly complicated code ● Insecure code ● “Smelly” code
  • 16. Examples ● Doesn’t meet requirements ● Insufficient features ● No documentation ● No unit tests
  • 17. Examples ● Incomplete coding standards ● Missing database constraints ● Missing validation ● Tightly coupled code
  • 18. Clearance Rack ● Food about to expire ● Questionable dairy and bread ● Items that have been sitting on the shelf a little too long
  • 19. University Bid Sales ● Aging computers and hardware ● Obsolete items ● Never opened items ● Broken items needing repair or parts ● Piles of cables and adapters
  • 21. The Problem - Updates return a + b
  • 22. The Problem - Updates return (a + b).toFixed(2)
  • 23. The Problem - Updates if ( !isNaN(parseFloat(a)) || isFinite(a) || !isNaN(parseFloat(b)) || isFinite(b) ) { throw “Not a number”; } return (a + b).toFixed(2)
  • 24. The Problem - Files index.html stuff.js morestuff.js moreawesomestuff.js utilities.js core.js
  • 25. 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, …
  • 26. 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
  • 27. The Problem - Security $sql = “SELECT * FROM big_table WHERE something = “ $_POST[‘from_user’]; $result = mysqli_query($sql);
  • 28. The Problem - Architecture $value = [ ‘some_key’ => [ ‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’], ‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass] ];
  • 30. Sources of Technical Debt ● New versions of libraries ● New versions of languages ● New versions of frameworks
  • 31. Sources of Technical Debt ● Inexperience
  • 32. Sources of Technical Debt ● Architecture changes
  • 33. Sources of Technical Debt ● Time ● Resources ● Scope creep
  • 34. Sources of Technical Debt ● Ignorance ● Misunderstanding of requirements ● Understanding of project
  • 35. Sources of Technical Debt ● Unwillingness ● Lack of motivation
  • 37. Impact ● Increased time to deliver new features ● Increased time to maintain application ● Increased time paying off debts ● Increased code complexity
  • 38. Impact ● Software brittleness ● Software bloat ● Software rot ● Magic in application
  • 40. Avoid Debt ● Avoid excessive debt ● Minimize risk ● Stay within means ● Use available resources ● Iron Triangle: Scope, Resources, Time
  • 41. Avoid Debt - Operational ● Planning ● Requirements gathering ● Analyze project ● Documentation ● Acceptance tests
  • 42. Avoid Debt - Technical ● Use a framework ● Be open to new technologies
  • 43. Avoid Debt - Technical ● Package Manager ● Move 3rd party library out of project code ● Keep libraries, software up-to-date ● “Life is too short for old software” - Sebastian Bergmann
  • 44. Avoid Debt - Technical ● Unit tests ● Loosely coupled code ● Code reusability ● Reduce code complexity ● Leverage language features
  • 45. Avoid Debt - Technical ● Static code analysis tools ○ Automated way to check code health ○ Unit test coverage ○ Coding standards ○ Unused code ○ Design patterns ○ Metrics ○ Methods doing too much
  • 46. Avoid Debt - Technical ● Dynamic code review ○ Review by a human ○ Security reviews ○ Architecture ○ Linked functionality ○ Business rules ○ Functional bugs
  • 47. Avoid Debt - Technical ● Continuous integration tools ● Configuration management tools
  • 48. Avoid Debt - Technical ● Code reviews and feedback ● Coding standards ● Design patterns ● General best practices
  • 50. Paying off Debt ● My experience with a big project ● Included PM, developers, devops, DBAs, system administrators, QA, IT leadership ● Buy-in from upper management ● Application is faster, more stable, more secure, modernized, easier to maintain
  • 51. Paying off Debt ● Identified pain points ● Created epics ● Set priorities ● Defined user stories
  • 52. Paying off Debt ● Assigned work, ownership ● Regular reporting as a team ● Regular reporting to management
  • 53. Paying off Debt ● Defined goals for quarters, years
  • 54. Paying off Debt ● Data migration out of database and into cloud storage ● Data consolidation ● Data restructuring
  • 55. Paying off Debt ● Adding middleware ● Framework upgrades ● Software upgrades ● Library upgrades
  • 56. Paying off Debt ● Major overhauls in painful areas
  • 57. Paying off Debt ● Moving processes to queue manager ● Cleaning up technology stack
  • 58. Paying off Debt ● Security updates ● Auditing improvements
  • 59. Paying off Debt ● Work spread out over time ● Measurable successes and milestones ● Very successful and still ongoing
  • 60. Paying off Debt ● Make a plan ● Set goals ● Stay inside your budget
  • 61. Paying off Debt ● Consistency ● Pay off some debt each sprint or regular interval
  • 62. Paying off Debt ● Repeating process ○ Identify debt ○ Make a plan ○ Take action
  • 64. Taking on Debt Four Rights ● Reason ● Time ● Terms ● Amount
  • 65. Professional Development ● Participate in local user groups ● Find experienced mentors ● Attend conferences ● Read blogs ● Learn
  • 67. Rewrite ● New project to replace current solution
  • 68. Rewrite ● Sustainability of current solution is critical ● Large effort ● Long term benefits, not short ● Explore available technologies ● Prevent excessive new debt ● Higher risk of failure
  • 69. Refactor ● Replace pieces of project in-place
  • 70. Refactor ● Break effort up over time ● Results both short and long term ● Prioritize what to rework first ● Lower risk of failure
  • 71. Rewrite vs Refactor ● Sustainability of current solution ● Level of effort ● Short and long term benefits ● Feasibility ● Technology stack ● Team capabilities
  • 73. Technical Debt ● Metaphor ● Reduce your debt ● Pay off debt using repeating process ● Tools available for your project ● Apply understanding to improve architecture
  • 75. 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