technical debt management

39
Reduce Your Technical Debt Mark Niebergall - https://joind.in/13911

Upload: mark-niebergall

Post on 15-Aug-2015

78 views

Category:

Software


5 download

TRANSCRIPT

Reduce Your Technical DebtMark Niebergall - https://joind.in/13911

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 - Updates

return a + b

The Problem - Updates

return (a + b).toFixed(2)

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● 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● Unused code● 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

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

Impact● Software brittleness● Software bloat● Software rot● Magic in application

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

Avoid Debt - Technical● Unit tests● Loosely coupled code● Code reusability● Reduce code complexity

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

Pay off Debt● Make a plan● Set goals● Stay inside your budget

Pay off Debt● Consistency● 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● 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

Questions?● https://joind.in/13911