technical debt management
TRANSCRIPT
About Mark Niebergall● Developing in PHP since 2005● Masters degree in Information Systems● Senior Software Engineer and Team Lead● Occupational health screening project● Security: SSCP, CSSLP Certified● PHP, databases, JavaScript● Enjoy being outdoors
Niebergall● German● Ancestry.com: nickname for someone who
habitually failed to repay his debts, from Middle High German nie ‘never’ + a derivative of vergelten ‘to repay’
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 - Updatesif ( !isNaN(parseFloat(a)) || isFinite(a) || !isNaN(parseFloat(b)) || isFinite(b)) { throw “Not a number”;}return (a + b).toFixed(2)
The Problem - Filesindex.htmlstuff.jsmorestuff.jsmoreawesomestuff.jssuper_more_awesome_stuff.jsevenMoreSuperAwesomeAtuff.js
The Problem - DatabaseTable: personColumns: 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 - DatabaseTable: thingColumns: name, description, image, what_it_does, hours, location, cost, time, owner, obscure_field, ts, sd, or, qa, ei, num, + 50 more columns
The Problem - Architecture$sql = “SELECT * FROM big_table WHERE something = “ $_POST[‘from_user’];
$result = mysql_query($sql);
The Problem - Architecture$value = [ ‘some_key’ => [ ‘another_key’ => [‘maybe_key’ => ‘alice’, 1 => ‘super awesome’], ‘questionable’ => [‘bob’, ‘cat’ => ‘kittens’, ‘mixed’ => new stdClass]];
Definition● Consequences of poor design, architecture● Prudent vs reckless● Incurred knowingly and inadvertently● Work needed to complete job properly
Examples● Incomplete coding standards● Missing database constraints● Missing validation● Tightly coupled code
Sources of Technical Debt● Time, resources, and scope creep● Ignorance● Misunderstanding of requirements● Understanding of project● Unwillingness or lack of motivation
Impact● Increased time to deliver new features● Increased time to maintain application● Increased time paying off debts● Increased code complexity
Personal Finances● Consider similarities between personal debts
and technical debts● Personal credit score or rating● Balanced budget● Expenditures● Savings● Education and training
Negative Impacts of Debt● Loss of freedom● Hopelessness● Depression● Burdensome● Stress● Relationships with others
Stay within Budget● Avoid excessive debt● Minimize risk● Stay within means● Use available resources● Iron Triangle: Scope, Resources, Time
Avoid Debt - Operational● Planning● Requirements gathering● Analyze project● Documentation● Acceptance tests
Avoid Debt - Technical● Code reviews and feedback● Coding standards● Design patterns● General best practices
Avoid Debt - Technical● Static code analysis● Continuous integration tools● Configuration management tools
Professional Development● Participate in local user groups● Find experienced mentors● Attend conferences● Read blogs● Learn
Refactor● Sustainability of current solution● Large effort● Long term benefits● Explore available technologies● Prevent excessive new debt
Technical Debt● Metaphor● Reduce your debt● Pay off debt using repeating process● Tools available for your project● Keep learning
References● Ancestry.com http://www.ancestry.com/name-origin?surname=niebergall● Ward Cunningham https://www.youtube.com/watch?v=pqeJFYwnkjE● Martin Fowler http://martinfowler.com/bliki/TechnicalDebt.html● David Laribee https://msdn.microsoft.com/en-us/magazine/ee819135.aspx● Mark Noneman https://www.youtube.com/watch?v=cb5fkftdD9k