For every short-cut taken technical debt is added to a project. Taking that path may come from one of many factors, including inexperience, time constraints, scope creep, or lack of resources. Managing technical debt with a professional approach can reduce the high interest rate you may be currently experiencing and lower team stress. That technical burden can be properly managed by giving proper attention, time, and resources to paying down the debt on a regular basis. Explore ways to consistently reduce technical debt and discuss best practices with fellow debtors. Learn how your code score can improve and how you can avoid going bankrupt from a proper technical debt management approach.
2. About Mark Niebergall
● Developing in PHP since 2005
● Working on occupational health screening
project
● Security: SSCP, CSSLP Certified
● PHP, databases, JavaScript
● Enjoy being outdoors
3. Niebergall
● German
● Ancestry.com: nickname for someone who
habitually failed to repay his debts, from
Middle High German nie ‘never’ + a
derivative of vergelten ‘to repay’
4. The Problem - Updates
● return a + b
● return (a + b).toFixed(2)
● if ( !isNaN(parseFloat(a))
|| isFinite(a)
|| !isNaN(parseFloat(b))
|| isFinite(b)
) {
throw “Not a number”;
}
return (a + b).toFixed(2)
5. The Problem - Files
]$ cd /var/www/html
]$ ls
index.html
stuff.js
morestuff.js
moreawesomestuff.js
super_more_awesome_stuff.js
evenMoreSuperAwesomeAtuff.js
Do_Even_More_Super_Awesome_Stuff.js
6. 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, …
● 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
7. The Problem - Architecture
$sql = “SELECT * FROM big_table WHERE something = “
$_POST[‘from_user’];
$result = mysql_query($sql);
$value = [
‘some_key’ => [
‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’],
‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass]
];
8. Definition
● Metaphor coined by Ward Cunningham
● Explained further by Martin Fowler, others
● Consequences of poor design, architecture
● Prudent vs reckless
● Incurred knowingly and inadvertently
● Work needed to complete job properly
9. Sources of Technical Debt
● Time, resources, and scope creep
● Ignorance
● Misunderstanding of requirements
● Understanding of project
● Unwillingness or lack of motivation
10. Impact
● Increased time to deliver new features
● Increased time to maintain application
● Increased time paying off debts
● Increased code complexity
● Software brittleness
● Software bloat
11. Personal Finances
● Consider similarities between personal debts
and technical debts
● Personal credit score or rating
● Balanced budget
● Expenditures
● Savings
● Education and training
16. Avoid Debt - Technical
● Use a framework
● Be open to new technologies
● Unit tests
● Loosely coupled code
● Code reusability
● Reduce code complexity
17. Avoid Debt - Technical
● Continuous integration tools
● Configuration management tools
● Code reviews and feedback
● Coding standards
● Design patterns
● General best practices
18. Pay off Debt
● Consistency
● Make a plan
● Set goals
● Stay inside your budget
● Pay off some debt each sprint or regular
interval