technical debt management
Post on 15-Aug-2015
23 Views
Preview:
TRANSCRIPT
Technical Debt ManagementMark Niebergall
About Mark Niebergall● Developing in PHP since 2005● Working on 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’
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)
The Problem - Files]$ cd /var/www/html]$ lsindex.htmlstuff.jsmorestuff.jsmoreawesomestuff.jssuper_more_awesome_stuff.jsevenMoreSuperAwesomeAtuff.jsDo_Even_More_Super_Awesome_Stuff.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, …
● 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 - 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]];
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
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● Software brittleness● Software bloat
Personal Finances● Consider similarities between personal debts
and technical debts● Personal credit score or rating● Balanced budget● Expenditures● Savings● Education and training
Positive Impacts of Debt● Education● Housing● Goals● Business
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● Use a framework● Be open to new technologies● Unit tests● Loosely coupled code● Code reusability● Reduce code complexity
Avoid Debt - Technical● Continuous integration tools● Configuration management tools● Code reviews and feedback● Coding standards● Design patterns● General best practices
Pay off Debt● Consistency● Make a plan● Set goals● Stay inside your budget● Pay off some debt each sprint or regular
interval
Repeating Process● Identify debt● Make a plan● Take action
Taking on DebtFour Rights● Reason● Time● Terms● Amount
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● Keep learning● Pay off debt using repeating process
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
Questions?● https://joind.in/14427
top related