SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfVishalKumarJha10
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...kalichargn70th171
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfryanfarris8
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 

Dernier (20)

Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 

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