SlideShare a Scribd company logo
1 of 34
Managing Technical
Debt
By:
Adam Culp
Twitter: @adamculp
2
Managing Technical Debt
●
About me
– OSS Contributor
– PHP Certified
– Zend Certification Advisory Board
– PHP-Fig voting member (IBM i Toolkit)
– Consultant at Zend Technologies
– Organizer SoFloPHP (South Florida)
– Organizer SunshinePHP (Miami)
– Long distance (ultra) runner
– Photography Enthusiast
– Judo Black Belt Instructor
3
Managing Technical Debt
●
About me
– OSS Contributor
– PHP Certified
– Zend Certification Advisory Board
– PHP-Fig voting member (IBM i Toolkit)
– Consultant at Zend Technologies
– Organizer SoFloPHP (South Florida)
– Organizer SunshinePHP (Miami)
– Long distance (ultra) runner
– Photography Enthusiast
– Judo Black Belt Instructor
I am the
PHP Ninja!!!
4
Managing Technical Debt
●
Fan of iteration
– Pretty much everything requires iteration to do well:
●
Long distance running
●
Judo
●
Development
●
Evading project managers
●
Managing Technical Debt!
5
Managing Technical Debt
●
What is Technical Debt?
6
Managing Technical Debt
●
What is Technical Debt?
– Code Smells
...a code smell is any characteristic in the
source code of a program that possibly
indicates a deeper problem… - wikipedia
https://en.wikipedia.org/wiki/Code_smell
7
Managing Technical Debt
●
Code “smells”
– “Smells” hinting a refactor may be needed:
●
Duplicate Code (rule of 3)
●
Long Methods
●
Large Class
●
Long Parameter (argument) List
●
Divergent Change – cascade change to accommodate another
●
Shotgun Surgery – change ripples as bugs
●
Feature Envy – method uses parts from other class
●
Switch Statements – sacrifice polymorphism
8
Managing Technical Debt
●
Code “smells”
– Cont'd:
●
Lazy Class – class not doing much
●
Speculative Generality – something built for possible future
●
Temporary Field/Variable
●
Message Chains – object asking object asking object
●
Middle Man – directors in place but serve no real purpose
●
Inappropriate Intimacy – classes share private parts
●
Data Class – getters and setters, but nothing else
●
Comments – where comments cover bad code
9
● Comments can also be a bad “smell“
●
Comments are often used to cover up bad code.
●
Code should be self-documenting
Managing Technical Debt
10
● Coding Standards save time
●
Gives direction
●
PHP Framework Interoperability Group (https://www.php-fig.org).
●
Standard NOT important
●
Unless it‘s public code
●
Choose one
●
Stick with it
●
Consistency is key
Managing Technical Debt
11
● Names should be clear
●
Functions and variables should tell a story.
$elapsedTimeInDays;
$daysSinceCreation;
$daysSinceModified;
$fileAgeInDays;
$elapsed;
$createdDays;
$modifiedDays;
$age;
GoodBad
Managing Technical Debt
12
● Shy away from variations of the same name
●
To ensure names are different enough to portray difference.
$product
$productInfo
$productData
$productDescription
What is the difference between these?
Managing Technical Debt
13
● Certain characters are hard to understand
Lower case L
Uppercase O (oh)
Uppercase I (eye)
Bad
Managing Technical Debt
14
● Technical names help developers who actually read the code.
● Non-technical terms for client documentation.
● Class names should be nouns
●
Describe.
●
Ex. - Customer, Account, Product, Company.
● Method names should be verbs
●
Action.
●
Ex. - getCustomer, closeAccount, updateProduct, addCompany.
●
Pick a set of keywords and stick with them.
●
Ex. - fetch, get, add, update, remove, delete
Managing Technical Debt
15
● More on Clean Code
●
Functions:
●
Short
●
Single purpose
●
As expected
●
Well named
●
Recognizing bad doesn't mean we know how to make good
●
We know a good/bad song, but are not song writers
●
Clean code = caring developer
●
Does not require many comments
Managing Technical Debt
16
Managing Technical Debt
●
What is Technical Debt?
– Code Smells
– Impossible to avoid
– Builds up like credit card
17
Managing Technical Debt
●
Causes of Technical Debt?
– Happens while coding
●
Adding functionality
●
Enhancing logic
18
Managing Technical Debt
●
Causes of Technical Debt?
– Happens while coding
●
Adding functionality
●
Enhancing logic
– Architectural
●
Passwords in source control
●
Domain names in code
●
Env info in code
19
Managing Technical Debt
●
Causes of Technical Debt?
– Happens while coding
●
Adding functionality
●
Enhancing logic
– Architectural
●
Passwords in source control
●
Domain names in code
●
Env info in code
– Deadlines
20
Managing Technical Debt
●
Causes of Technical Debt?
– Happens while coding
●
Adding functionality
●
Enhancing logic
– Architectural
●
Passwords in source control
●
Domain names in code
●
Env info in code
– Deadlines
– Tech un-savvy boss
21
Managing Technical Debt
●
Causes of Technical Debt?
– Happens while coding
●
Adding functionality
●
Enhancing logic
– Architectural
●
Passwords in source control
●
Domain names in code
●
Env info in code
– Deadlines
– Tech un-savvy boss
– YOU!
22
Managing Technical Debt
●
What about support items?
– Lack of documentation
– Lack of license
– No Sharing (OSS)
– Ignoring Community
23
Managing Technical Debt
●
Why Remove Technical Debt?
– More creating and less reading
24
Managing Technical Debt
●
Why Remove Technical Debt?
– More creating and less reading
– Easier onboarding
25
Managing Technical Debt
●
Why Remove Technical Debt?
– More creating and less reading
– Easier onboarding
– Less bugs
– Reduce unexpected behavior
26
Managing Technical Debt
●
Why Remove Technical Debt?
– More creating and less reading
– Easier onboarding
– Less bugs
– Reduce unexpected behavior
– Happier developers, customers, boss
– More money!
27
Managing Technical Debt
●
When To Remove Technical Debt?
– Always!
– Part of “Normal Development” cycle
●
Code...refactor...code...refactor...etc.
28
Managing Technical Debt
●
Tools To Find Technical Debt?
– Static Analysis
●
3rd party
– Exakat Cloud
●
Self-hosted is free
●
Cloud hosted commercial product
●
Pricing model is complicated
29
Managing Technical Debt
●
Tools To Find Technical Debt?
– Static Analysis
●
3rd party
●
SaaS
– Codacy
– CodeClimate
– Scrutinizer
30
Managing Technical Debt
●
Tools To Find Technical Debt?
– Static Analysis
●
3rd party
●
SaaS
●
OSS
– Codesniffer
– PHP Mess Detector (phpmd)
– PHP Copy/Paste Detector (phpcpd)
– PHPDepend
– PHPStan
– Phan
– PHPMetrics
Good source:
https://github.com/exakat/php-static-analysis-tools
31
Managing Technical Debt
●
Containers
– Job specific images
●
https://hub.docker.com/u/adamculp/
32
Managing Technical Debt
●
Containers
– Job specific images
●
https://hub.docker.com/u/adamculp/
33
Managing Technical Debt
●
Automation
– Static Analysis Automated
●
Continuous delivery/integration
●
Source control hooks
●
IDE
●
Thank you!
– Code: https://github.com/adamculp/
Adam Culp
http://www.geekyboy.com
http://RunGeekRadio.com
Twitter @adamculp
Questions?

More Related Content

Similar to Managing Technical Debt

Similar to Managing Technical Debt (20)

Linters for frontend code review
Linters for frontend code reviewLinters for frontend code review
Linters for frontend code review
 
Technical Debt.pptx
Technical Debt.pptxTechnical Debt.pptx
Technical Debt.pptx
 
really really really awesome php application with bdd behat and iterfaces
really really really awesome php application with bdd behat and iterfacesreally really really awesome php application with bdd behat and iterfaces
really really really awesome php application with bdd behat and iterfaces
 
Shift Left Security
Shift Left SecurityShift Left Security
Shift Left Security
 
Application Deployment on IBM i
Application Deployment on IBM iApplication Deployment on IBM i
Application Deployment on IBM i
 
EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?EuroPython 2011 - How to build complex web applications having fun?
EuroPython 2011 - How to build complex web applications having fun?
 
Not my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructureNot my problem - Delegating responsibility to infrastructure
Not my problem - Delegating responsibility to infrastructure
 
Devconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developedDevconf 2011 - PHP - How Yii framework is developed
Devconf 2011 - PHP - How Yii framework is developed
 
DrupalCon Europe 2020 Low Code
DrupalCon Europe 2020 Low CodeDrupalCon Europe 2020 Low Code
DrupalCon Europe 2020 Low Code
 
Alexandr Vronskiy "Evolution of Ecommerce Application"
Alexandr Vronskiy "Evolution of Ecommerce Application"Alexandr Vronskiy "Evolution of Ecommerce Application"
Alexandr Vronskiy "Evolution of Ecommerce Application"
 
sitVIE - No comment?
sitVIE - No comment?sitVIE - No comment?
sitVIE - No comment?
 
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
 
Balancing Technical Debt and Clean Code
Balancing Technical Debt and Clean CodeBalancing Technical Debt and Clean Code
Balancing Technical Debt and Clean Code
 
Introduction to PHP (SDPHP)
Introduction to PHP   (SDPHP)Introduction to PHP   (SDPHP)
Introduction to PHP (SDPHP)
 
Clean application development (talk)
Clean application development (talk)Clean application development (talk)
Clean application development (talk)
 
Death by Technical Debt: Lessons Learned to Get you Unbuired
Death by Technical Debt: Lessons Learned to Get you UnbuiredDeath by Technical Debt: Lessons Learned to Get you Unbuired
Death by Technical Debt: Lessons Learned to Get you Unbuired
 
The software evolution hasn't happened yet
The software evolution hasn't happened yetThe software evolution hasn't happened yet
The software evolution hasn't happened yet
 
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
"Role of a CTO in software outsourcing company", Yuriy Nakonechnyy
 
Awesome application in 2014
Awesome application in 2014Awesome application in 2014
Awesome application in 2014
 
Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategies
 

More from Adam Culp

More from Adam Culp (20)

Hypermedia
HypermediaHypermedia
Hypermedia
 
Putting legacy to REST with middleware
Putting legacy to REST with middlewarePutting legacy to REST with middleware
Putting legacy to REST with middleware
 
php-1701-a
php-1701-aphp-1701-a
php-1701-a
 
Release your refactoring superpower
Release your refactoring superpowerRelease your refactoring superpower
Release your refactoring superpower
 
Developing PHP Applications Faster
Developing PHP Applications FasterDeveloping PHP Applications Faster
Developing PHP Applications Faster
 
Containing Quality
Containing QualityContaining Quality
Containing Quality
 
Debugging elephpants
Debugging elephpantsDebugging elephpants
Debugging elephpants
 
Zend expressive workshop
Zend expressive workshopZend expressive workshop
Zend expressive workshop
 
Expressive Microservice Framework Blastoff
Expressive Microservice Framework BlastoffExpressive Microservice Framework Blastoff
Expressive Microservice Framework Blastoff
 
Foundations of Zend Framework
Foundations of Zend FrameworkFoundations of Zend Framework
Foundations of Zend Framework
 
Accidental professional
Accidental professionalAccidental professional
Accidental professional
 
Build great products
Build great productsBuild great products
Build great products
 
Does Your Code Measure Up?
Does Your Code Measure Up?Does Your Code Measure Up?
Does Your Code Measure Up?
 
Practical PHP Deployment with Jenkins
Practical PHP Deployment with JenkinsPractical PHP Deployment with Jenkins
Practical PHP Deployment with Jenkins
 
Virtualizing Development
Virtualizing DevelopmentVirtualizing Development
Virtualizing Development
 
Refactoring Legacy Code
Refactoring Legacy CodeRefactoring Legacy Code
Refactoring Legacy Code
 
Deprecated: Foundations of Zend Framework 2
Deprecated: Foundations of Zend Framework 2Deprecated: Foundations of Zend Framework 2
Deprecated: Foundations of Zend Framework 2
 
Clean application development tutorial
Clean application development tutorialClean application development tutorial
Clean application development tutorial
 
Refactoring 101
Refactoring 101Refactoring 101
Refactoring 101
 
Essential git for developers
Essential git for developersEssential git for developers
Essential git for developers
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 

Managing Technical Debt

  • 2. 2 Managing Technical Debt ● About me – OSS Contributor – PHP Certified – Zend Certification Advisory Board – PHP-Fig voting member (IBM i Toolkit) – Consultant at Zend Technologies – Organizer SoFloPHP (South Florida) – Organizer SunshinePHP (Miami) – Long distance (ultra) runner – Photography Enthusiast – Judo Black Belt Instructor
  • 3. 3 Managing Technical Debt ● About me – OSS Contributor – PHP Certified – Zend Certification Advisory Board – PHP-Fig voting member (IBM i Toolkit) – Consultant at Zend Technologies – Organizer SoFloPHP (South Florida) – Organizer SunshinePHP (Miami) – Long distance (ultra) runner – Photography Enthusiast – Judo Black Belt Instructor I am the PHP Ninja!!!
  • 4. 4 Managing Technical Debt ● Fan of iteration – Pretty much everything requires iteration to do well: ● Long distance running ● Judo ● Development ● Evading project managers ● Managing Technical Debt!
  • 6. 6 Managing Technical Debt ● What is Technical Debt? – Code Smells ...a code smell is any characteristic in the source code of a program that possibly indicates a deeper problem… - wikipedia https://en.wikipedia.org/wiki/Code_smell
  • 7. 7 Managing Technical Debt ● Code “smells” – “Smells” hinting a refactor may be needed: ● Duplicate Code (rule of 3) ● Long Methods ● Large Class ● Long Parameter (argument) List ● Divergent Change – cascade change to accommodate another ● Shotgun Surgery – change ripples as bugs ● Feature Envy – method uses parts from other class ● Switch Statements – sacrifice polymorphism
  • 8. 8 Managing Technical Debt ● Code “smells” – Cont'd: ● Lazy Class – class not doing much ● Speculative Generality – something built for possible future ● Temporary Field/Variable ● Message Chains – object asking object asking object ● Middle Man – directors in place but serve no real purpose ● Inappropriate Intimacy – classes share private parts ● Data Class – getters and setters, but nothing else ● Comments – where comments cover bad code
  • 9. 9 ● Comments can also be a bad “smell“ ● Comments are often used to cover up bad code. ● Code should be self-documenting Managing Technical Debt
  • 10. 10 ● Coding Standards save time ● Gives direction ● PHP Framework Interoperability Group (https://www.php-fig.org). ● Standard NOT important ● Unless it‘s public code ● Choose one ● Stick with it ● Consistency is key Managing Technical Debt
  • 11. 11 ● Names should be clear ● Functions and variables should tell a story. $elapsedTimeInDays; $daysSinceCreation; $daysSinceModified; $fileAgeInDays; $elapsed; $createdDays; $modifiedDays; $age; GoodBad Managing Technical Debt
  • 12. 12 ● Shy away from variations of the same name ● To ensure names are different enough to portray difference. $product $productInfo $productData $productDescription What is the difference between these? Managing Technical Debt
  • 13. 13 ● Certain characters are hard to understand Lower case L Uppercase O (oh) Uppercase I (eye) Bad Managing Technical Debt
  • 14. 14 ● Technical names help developers who actually read the code. ● Non-technical terms for client documentation. ● Class names should be nouns ● Describe. ● Ex. - Customer, Account, Product, Company. ● Method names should be verbs ● Action. ● Ex. - getCustomer, closeAccount, updateProduct, addCompany. ● Pick a set of keywords and stick with them. ● Ex. - fetch, get, add, update, remove, delete Managing Technical Debt
  • 15. 15 ● More on Clean Code ● Functions: ● Short ● Single purpose ● As expected ● Well named ● Recognizing bad doesn't mean we know how to make good ● We know a good/bad song, but are not song writers ● Clean code = caring developer ● Does not require many comments Managing Technical Debt
  • 16. 16 Managing Technical Debt ● What is Technical Debt? – Code Smells – Impossible to avoid – Builds up like credit card
  • 17. 17 Managing Technical Debt ● Causes of Technical Debt? – Happens while coding ● Adding functionality ● Enhancing logic
  • 18. 18 Managing Technical Debt ● Causes of Technical Debt? – Happens while coding ● Adding functionality ● Enhancing logic – Architectural ● Passwords in source control ● Domain names in code ● Env info in code
  • 19. 19 Managing Technical Debt ● Causes of Technical Debt? – Happens while coding ● Adding functionality ● Enhancing logic – Architectural ● Passwords in source control ● Domain names in code ● Env info in code – Deadlines
  • 20. 20 Managing Technical Debt ● Causes of Technical Debt? – Happens while coding ● Adding functionality ● Enhancing logic – Architectural ● Passwords in source control ● Domain names in code ● Env info in code – Deadlines – Tech un-savvy boss
  • 21. 21 Managing Technical Debt ● Causes of Technical Debt? – Happens while coding ● Adding functionality ● Enhancing logic – Architectural ● Passwords in source control ● Domain names in code ● Env info in code – Deadlines – Tech un-savvy boss – YOU!
  • 22. 22 Managing Technical Debt ● What about support items? – Lack of documentation – Lack of license – No Sharing (OSS) – Ignoring Community
  • 23. 23 Managing Technical Debt ● Why Remove Technical Debt? – More creating and less reading
  • 24. 24 Managing Technical Debt ● Why Remove Technical Debt? – More creating and less reading – Easier onboarding
  • 25. 25 Managing Technical Debt ● Why Remove Technical Debt? – More creating and less reading – Easier onboarding – Less bugs – Reduce unexpected behavior
  • 26. 26 Managing Technical Debt ● Why Remove Technical Debt? – More creating and less reading – Easier onboarding – Less bugs – Reduce unexpected behavior – Happier developers, customers, boss – More money!
  • 27. 27 Managing Technical Debt ● When To Remove Technical Debt? – Always! – Part of “Normal Development” cycle ● Code...refactor...code...refactor...etc.
  • 28. 28 Managing Technical Debt ● Tools To Find Technical Debt? – Static Analysis ● 3rd party – Exakat Cloud ● Self-hosted is free ● Cloud hosted commercial product ● Pricing model is complicated
  • 29. 29 Managing Technical Debt ● Tools To Find Technical Debt? – Static Analysis ● 3rd party ● SaaS – Codacy – CodeClimate – Scrutinizer
  • 30. 30 Managing Technical Debt ● Tools To Find Technical Debt? – Static Analysis ● 3rd party ● SaaS ● OSS – Codesniffer – PHP Mess Detector (phpmd) – PHP Copy/Paste Detector (phpcpd) – PHPDepend – PHPStan – Phan – PHPMetrics Good source: https://github.com/exakat/php-static-analysis-tools
  • 31. 31 Managing Technical Debt ● Containers – Job specific images ● https://hub.docker.com/u/adamculp/
  • 32. 32 Managing Technical Debt ● Containers – Job specific images ● https://hub.docker.com/u/adamculp/
  • 33. 33 Managing Technical Debt ● Automation – Static Analysis Automated ● Continuous delivery/integration ● Source control hooks ● IDE
  • 34. ● Thank you! – Code: https://github.com/adamculp/ Adam Culp http://www.geekyboy.com http://RunGeekRadio.com Twitter @adamculp Questions?