Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Subtle Art of Intentional Technical Debt - ...

Avatar for Ryan Craig Ryan Craig
January 26, 2026
38

The Subtle Art of Intentional Technical Debt - DDD Adelaide 2025

Making bad decisions ... on purpose.

Many technical decisions involve balancing the ideal with the practical. Sometimes the “best” technical choice isn’t the right one, especially when factors like time to market, product validation, or resource constraints come into play. Like financial debt, technical debt isn't inherently bad. The nuance lies in how it's taken on, how it's managed, and what the repayment strategy looks like.

Some debt can be carefully managed as a strategic investment that accelerates short term growth without sacrificing long term velocity. While others, if left unchecked or poorly understood, accumulate interest that drains your team’s capacity and grinds development to a halt.

In this session, I will share real-world examples where I made tough calls. Sometimes we shipped imperfect code quickly to validate value, and other times we held back because the debt cost would have been too high for years to come. You will learn frameworks to help assess when to accept debt, how to communicate those decisions clearly, and how to plan for repayment before it becomes crushing.

Avatar for Ryan Craig

Ryan Craig

January 26, 2026

Transcript

  1. Hola! I am Ryan Craig CTO @ Quoterite Previously at:

    ▪ HappyCo ▪ MaxMine ▪ Buddy/LIFX ▪ Accenture ▪ BlackStorm
  2. 7 Monetary Debt □ Business Loan □ Home Loan □

    Car Loan □ Credit Cards □ Afterpay
  3. 9 Reckless Monetary Debt ▪ An unintentional and/or accidental arrangement

    where money is borrowed from another party with effects and repayment terms that are not adequately known, understood, or budgeted for, typically due to negligence, error, incompetence or ignorance
  4. 10 Intentional Monetary Debt ▪ A conscious and strategic arrangement

    where money is borrowed from another party to achieve a desired outcome sooner, with agreed-upon effects and repayment terms that are known, understood, and budgeted for
  5. 11 Intentional vs Reckless ▪ Unintentional and/or accidental vs conscious

    and strategic □ Blind acceptance is by definition reckless ▪ Effects □ You □ Lifestyle ▪ Repayment Terms □ Interest Rates □ Time Period □ Exit Clauses
  6. 13 Reckless Technical Debt ▪ An unintentional and/or accidental arrangement

    where effort is borrowed from our future selves with effects and repayment terms that are not adequately known, understood, or budgeted for, typically due to negligence, error, incompetence or ignorance
  7. 14 Intentional Technical Debt ▪ A conscious and strategic arrangement

    where effort is borrowed from our future selves to achieve a desired outcome sooner, with agreed-upon effects and repayment terms that are known, understood, and budgeted for
  8. 15 Monetary vs Technical ▪ Effects □ You □ Team

    □ Company ▪ Repayment Terms □ Interest Rates □ Time Period □ Exit Clauses
  9. 17 Assessment ▪ Effects □ Other projects □ Team □

    Business ▪ Repayment Plan □ Exit clauses □ Interest rate □ Time period
  10. 18 Agreement ▪ Parties □ Engineering □ Product Owners □

    Leadership ▪ Agree □ Effects □ Repayment Plan
  11. 19 Acronyms ▪ KISS □ Keep It Simple Stupid ▪

    DRY □ Don’t Repeat Yourself ▪ WET □ Write Everything Twice ▪ TLA □ Three Letter Acronyms ▪ FLA □ Four Letter Acronyms / Five Letter Acronyms ▪
  12. 20 Acronyms ▪ YAGNI □ You Ain’t Gonna Need It

    ▪ YAGNIY □ You Ain’t Gonna Need It Yet ▪ WDNIY □ We Don’t Need It Yet ▪ WDNINBPFWWBRIFD □ We Don’t Need It Now But Plan For What Would Be Required If We Did
  13. Political Capital ▪ Brownie points ▪ Relationships aren't binary ▪

    Wording matters ▪ Us vs Them -> We ▪ You promised -> We agreed 21
  14. CreatedAt • Suggestion ◦ YAGNI - Forget about the column

    • Assessment ◦ Effects ◦ Repayment Plan • Agreement ◦ Just Engineering right? 23
  15. Proof of Concept (PoC) ▪ Throw 💩 at the wall

    - see what sticks ▪ Need it yesterday ▪ Have customers waiting ▪ PoC != Production Grade 24
  16. The Hack The Assessment ▪ Quickest ▪ Dirtiest ▪ Effects

    □ Short term morale boost, long term drain ▪ Repayment Plan □ Exit clause - Delete it, delete it all □ High, compounding interest rate □ Very very short term 26
  17. The Agreement ▪ Agree this is duct tape on spaghetti

    on bandaids ▪ Fixed short lifespan ▪ Needs to be rewritten ▪ Not kidding, it needs to be rewritten ▪ Cannot scale ▪ Good choice if we have low confidence 27 The Hack
  18. The Assessment ▪ Not the quickest ▪ Not the dirtiest

    ▪ Some thought ▪ Effects □ Not our best work, could slow down some stuff ▪ Repayment Plan □ Exit clause - Needs works before scale □ Medium interest rate (hopefully fixed) □ Medium term (months) 29 It’s “OK”
  19. The Agreement ▪ Refactoring is required ▪ Possibly switch framework

    ▪ Feature velocity will be lumpy until cleaned up ▪ It will scale - to a point ▪ Planning needed before work commences ▪ Good choice if we have some confidence 30 It’s “OK”
  20. The Assessment ▪ Very much not the quickest ▪ Chef’s

    kiss quality ▪ Effects □ Morale boost, high quality, proud of our work ▪ Repayment Plan □ Exit clause - High cost due to time □ Low interest rate (hopefully fixed) □ Time Period - Very low 31 Production Grade
  21. The Agreement ▪ Will take time, a lot of time

    ▪ Can’t start coding until we plan □ Future Features - Backlog + 3 Sprints ▪ Will result in good feature velocity ▪ Good choice if we have high confidence 32 Production Grade
  22. 33

  23. 36 React Render Function interface Props { name: string }

    function render(props: Props) { // intense calculation return “<h1>Hello ${props.name}<h1>” } <MyComponent name={selectedUser.name} />
  24. 37 React Render Function interface Props { name: string companyName:

    string } function render(props: Props) { // intense calculation return “<h1>Hello ${props.name} from ${props.companyName}<h1>” } <MyComponent name={selectedUser.name} companyName={selectedUser.companyName} />
  25. 38 React Render Function interface Props { userId: String companyId:

    String } function render(props: Props) { const name = userService.getUser(props.userId).name const companyName = companyService.getCompany(props.companyId).name // intense calculation return “<h1>Hello ${name} from ${companyName}<h1>” } <MyComponent name={selectedUser.userId} companyName={selectedUser.companyId} />
  26. 39 React Render Function interface Props { user: User company:

    Company } interface User { name: string age: number updatedAt: string ...otherFields } function render(props: Props) { // intense calculation return “<h1>Hello ${props.user.name}<h1>” } <MyComponent name={selectedUser} company={selectedCompany} />
  27. The Aftermath • Spend 1 month doing first pass of

    cleanup • Took 6 months to finish cleanup • Feature velocity was acceptable at launch and good post cleanup • Earnt me a bucket of political capital • Could have failed but cost was known and agreed upon 40
  28. Takeaways • Technical Debt != Bad • Intentional vs Reckless

    • Framework ◦ Assessment ◦ Agreement 42
  29. Clarity beats perfection. When everyone understands and agrees to the

    trade-offs, even the “wrong” choice can be the right move. Ryan Craig
  30. 46 Icons • Freepik - Flaticon • William Richon -

    Flaticon • Vecteezy.com Attributions