47
Managing Technical Debt Pierre G. Boutquin

Managing Technical Debt Pierre G. Boutquin. Welcome!

Embed Size (px)

Citation preview

Page 1: Managing Technical Debt Pierre G. Boutquin. Welcome!

Managing Technical DebtPierre G. Boutquin

Page 2: Managing Technical Debt Pierre G. Boutquin. Welcome!

Welcome!

Welcome to the Toronto ALM User Group“TALMUG”

Page 3: Managing Technical Debt Pierre G. Boutquin. Welcome!

Thank You, Sponsors!

Page 4: Managing Technical Debt Pierre G. Boutquin. Welcome!

Choosing or Not Choosing Technical Debt

Agenda or Summary LayoutA second line of text could go here

Agenda; TALMUG; Me

Debt Characteristics

Discovering and Preventing Technical Debt

Discussion

Intro

Part I

Part II

Part III

End

???

Page 5: Managing Technical Debt Pierre G. Boutquin. Welcome!

Work ExperienceAbout Me

Page 6: Managing Technical Debt Pierre G. Boutquin. Welcome!

Programming ExperienceAbout Me

Page 7: Managing Technical Debt Pierre G. Boutquin. Welcome!

AuthorAbout Me

Page 8: Managing Technical Debt Pierre G. Boutquin. Welcome!

About today’s talk…Under Promising…

Page 9: Managing Technical Debt Pierre G. Boutquin. Welcome!

History of a Metaphor

Ward Cunningham

1992

Page 10: Managing Technical Debt Pierre G. Boutquin. Welcome!

Part I: Debt Characteristics

Page 11: Managing Technical Debt Pierre G. Boutquin. Welcome!

Deliberate vs. Inadvertent Prudent vs. Reckless

Debt: Good or Bad?

Depends…

http://martinfowler.com/bliki/TechnicalDebtQuadrant.html

Page 12: Managing Technical Debt Pierre G. Boutquin. Welcome!

Faster Short Term Benefit Extra Cost

Why Debt?

Trade-Off…

Page 13: Managing Technical Debt Pierre G. Boutquin. Welcome!

Extra Cost (Interest) As Long as Debt (Principal) NOT Paid Off

Debt Drawback

Principal/Interest

Page 14: Managing Technical Debt Pierre G. Boutquin. Welcome!

Perpetual Debt Growing Interest

Unmanaged Debt

Aka My Credit Card

Page 15: Managing Technical Debt Pierre G. Boutquin. Welcome!

Deliberate Trade-Off: Maybe Prudent

Inadvertent Debt: Likely Reckless

Incurring Debt

Reckless vs. Prudent

Page 16: Managing Technical Debt Pierre G. Boutquin. Welcome!

Benefits Outweigh Extra Costs Affordable Repayment Plan

Deliberate Debt

When Prudent?

Page 17: Managing Technical Debt Pierre G. Boutquin. Welcome!

Deliberate Decision Positive Cost/Benefit Planned, Affordable Repayment Prudent Total Debt

Acceptable Debt

4 Criteria:

Page 18: Managing Technical Debt Pierre G. Boutquin. Welcome!

Inadvertent Decision Negative or Small Cost/Benefit Repayment Not Planned/Too High Reckless Total Debt

Unwise Debt

4 Tell-Tale Signs

Page 19: Managing Technical Debt Pierre G. Boutquin. Welcome!

Total Level of Deliberateness Size of Cost/Benefit Affordability of Repayment Total Debt Load

PART I - Conclusion

Debt Criteria:

Page 20: Managing Technical Debt Pierre G. Boutquin. Welcome!

Part II: Deliberate Technical DebtChoosing or Not Choosing Debt…

Page 21: Managing Technical Debt Pierre G. Boutquin. Welcome!

Good: Deliver Early/On Time Bad: Detestable Code Ugly: The Spike

Deliberate Technical Debt

Why???

Page 22: Managing Technical Debt Pierre G. Boutquin. Welcome!

Maybe: Date Driven Development Yes: Feature Driven Development

Deliberate Technical Debt

Avoidable?

Page 23: Managing Technical Debt Pierre G. Boutquin. Welcome!

Shipping Date is Fixed Features Are Negotiable Often Less Desirable

Deliberate Technical Debt

Date-Driven Project

Page 24: Managing Technical Debt Pierre G. Boutquin. Welcome!

Features Are Fixed Shipping Date Is Negotiable Often More Desirable

Deliberate Technical Debt

Feature-Driven Project

Page 25: Managing Technical Debt Pierre G. Boutquin. Welcome!

Release Planning Tool Combines Well With Prioritization

The MVP Concept

“Minimal Viable Product”

Page 26: Managing Technical Debt Pierre G. Boutquin. Welcome!

PrioritizationSometimes…

Page 27: Managing Technical Debt Pierre G. Boutquin. Welcome!

Agile/Scrum: Backlog Traditional: Prioritization Needs Forethought

Prioritization

Key: By Business Value

Page 28: Managing Technical Debt Pierre G. Boutquin. Welcome!

MUST: Part of MVP

SHOULD: High-Priority

COULD: Nice to Have

WOULD: Maybe Later

MoSCoW Prioritization

Page 29: Managing Technical Debt Pierre G. Boutquin. Welcome!

Part III: Minimizing Inadvertent Debt

Discovering and Preventing Debt…

Page 30: Managing Technical Debt Pierre G. Boutquin. Welcome!

Process Tools

Minimizing: How?

2 Angles:

Page 31: Managing Technical Debt Pierre G. Boutquin. Welcome!

Process: SDLC process: Engineering Practices

Test First Development

Minimizing: How?

Process vs. process

Page 32: Managing Technical Debt Pierre G. Boutquin. Welcome!

Communications Technical Excellence

Minimizing: Type of Tools2 Objectives:

Page 33: Managing Technical Debt Pierre G. Boutquin. Welcome!

Standup Meeting Shared SME Design Reviews Code Reviews

Minimizing: Communication ToolsTools We Use:

Page 34: Managing Technical Debt Pierre G. Boutquin. Welcome!

Unit Tests Code Contracts Static Code Analysis

Adherence to Coding Standard Good Coding Practices

Code Metrics

Minimizing: Technical ToolsTools We Use:

Page 35: Managing Technical Debt Pierre G. Boutquin. Welcome!

Tool: Unit TestsRecommended Book: “The Art of Unit Testing”

http://www.manning.com/osherove2/

Page 36: Managing Technical Debt Pierre G. Boutquin. Welcome!

A Unit Test is an automated piece of code that invokes the unit of work being tested and then checks some assumptions about a single end result of that unit.

A unit test is almost always written using a unit-testing framework. It can be written easily and runs quickly.

Tool: Unit Tests

Roy Osherove’s Definition:

Page 37: Managing Technical Debt Pierre G. Boutquin. Welcome!

A Unit Test is trustworthy, readable and maintainable. It is consistent in its results as long as the production code has not changed.

Tool: Unit Tests

Roy Osherove’s Definition (cont’d):

Page 38: Managing Technical Debt Pierre G. Boutquin. Welcome!

• /// <summary>• /// This test demonstrates that constructor of • /// the <see cref="VenomSender" /> class is creating a topic session• /// when it is being given valid configuration.• /// </summary>• [TestMethod]• public void Constructor_ValidTibcoConfig_ReturnsNonNullTopicSession()• {• // ARRANGE• var tibcoConfig = TestUtils.CreateValidTibcoConfig();

• // ACT• var venomSender = new VenomSender(tibcoConfig);

• // ASSERT• Assert.IsNotNull(venomSender.TopicSession);• }

Unit Test Tips: Naming Convention[UnitOfWork]_[Condition]_[ExpectedResult]

Page 39: Managing Technical Debt Pierre G. Boutquin. Welcome!

• /// <summary>• /// This test demonstrates that constructor of • /// the <see cref="VenomSender" /> class is creating a topic session• /// when it is being given valid configuration.• /// </summary>• [TestMethod]• public void Constructor_ValidTibcoConfig_ReturnsNonNullTopicSession()• {• // ARRANGE• var tibcoConfig = TestUtils.CreateValidTibcoConfig();

• // ACT• var venomSender = new VenomSender(tibcoConfig);

• // ASSERT• Assert.IsNotNull(venomSender.TopicSession);• }

Unit Test Tips: Design PatternDesign Pattern: AAA

Page 40: Managing Technical Debt Pierre G. Boutquin. Welcome!

Use Happy Path Factory Helper Then, Create Single Sad Path Test Both Exception Type & Message

Unit Test Tips: Sad Paths

Maintainability Tip:

Page 41: Managing Technical Debt Pierre G. Boutquin. Welcome!

• /// <summary>• /// This test demonstrates that constructor of • /// the <see cref="VenomSender" /> class is throwing an exception• /// when it is being passed a null SslCertStoreName.• /// </summary>• [TestMethod]• public void Constructor_nullSslCertStoreName_ThrowsException()• {• // ARRANGE• var tibcoConfig = TestUtils.CreateValidTibcoConfig();• tibcoConfig.SslCertStoreName = null;

• // ACT• var venomSender = new VenomSender(tibcoConfig);

• // ASSERT• // etc,• }

Unit Test Tips: Sad Path

Design Pattern:

Page 42: Managing Technical Debt Pierre G. Boutquin. Welcome!

Method-Level Measure Calculated from Control Flow Graph Smaller Values Better <= 25 Acceptable

Code Metrics

Cyclomatic Complexity

Page 43: Managing Technical Debt Pierre G. Boutquin. Welcome!

Synthesis of Three Metrics Cyclomatic Complexity Lines of Code Computational Complexity

Icons Color-Coded GREEN (>20) YELLOW (10-20) RED (<10)

Not Expressed in Units!

Code Metrics

Maintainability Index

Page 44: Managing Technical Debt Pierre G. Boutquin. Welcome!

New to Me No Best Practices To Share Yet…

Code Contracts

Now Part of .NET!

Page 45: Managing Technical Debt Pierre G. Boutquin. Welcome!

Partially Matter of Opinion Let Tool Decide

StyleCop ReSharper

Coding Standard

The Final Word…

Page 46: Managing Technical Debt Pierre G. Boutquin. Welcome!

Managing Technical Debt

Page 47: Managing Technical Debt Pierre G. Boutquin. Welcome!

Questions?