Systems Thinking with AI, illustrated chapter reader ยท Chapter 33

33Technical Debt as a Stock

Debt is a stock nobody can count, and the review window decides which policy looks wise.

Four runs of the chapter's delivery team. Move the review date and watch the lead change hands, compare nominal and available capacity, read the share of capacity going to rework before delivery volume shows anything, and test whether the repayment conclusion survives the range of the drag coefficient nobody has measured.

Every example in these readers is a constructed teaching example built from the chapter's own numbers. Chapters 36 to 39 start from committed public records; their fitted values are inferred from those records, and nothing here is a forecast.

1Demonstration 1 of 4

The review window picks the winner

When does a team that reserves capacity for repayment overtake one that pushes hard?

Repayment spends capacity now and drains the debt that later creates defects and drag. Early on only the spending shows; later the saved capacity shows, and the paths cross.

Equation: drag equals the drag coefficient times the debt

Equation: available capacity is nominal capacity minus drag, times morale, never below zero

Features delivered is a cumulative count. The repayment share is the fraction of usable capacity reserved for paying debt. A period is one time step; capacity is 10 engineer-weeks per period.

Predict first. At a review in period 12, which policy has delivered more, push hard or repay 20 percent?

Choose an example

Figure: The review window picks the winner. Cumulative features over 60 periods for push hard and for repaying 20 percent, with a dashed line at the review in period 12, where the totals are 100.1 and 87.2.
Review at period: 12, Share of capacity reserved for repayment: 0.2
Constructed example: the chapter's two policies, recomputed with the pack's run function.

Calculated values

Review at period
12
Push hard, features
100.1
Repay 20%, features
87.2
Repaying minus push hard
(-12.9)
Debt under push hard
50.1

At period 12: 87.2 - 100.1 = (-12.9) features for the repaying policy. The larger total over the smaller is 100.1 / 87.2 = 1.148. At this review push hard looks better, and a short window would confirm it.

Use the idea

Ask what horizon a policy comparison was scored on before accepting it, and what the two policies look like one review later.

Where the conclusion applies

Constant pressure, the pack's drag and defect rates, and cumulative features as the score. A short-lived codebase is the case where the short window gives the right answer.

Check your understanding: At period 60, how many times more features has repay 20 percent delivered than push hard?
319.0 / 230.1 = 1.39, about 39 percent more.

Chapter 33 source: section "Why the first review favors the wrong policy". Demonstration C33-D01.

2Demonstration 2 of 4

Capacity is not what the plan says

How much of the nominal capacity exists once debt drag and morale are subtracted?

Drag takes the drag coefficient times the debt off nominal capacity, then morale scales the remainder. Debt only grows under push hard, so the gap widens with every period.

Equation: drag equals the drag coefficient times the debt

Equation: available capacity is nominal capacity minus drag, times morale, never below zero

Nominal capacity is 10 engineer-weeks per period. Debt is shortcuts taken and not repaid. The drag coefficient is capacity lost per unit of debt. Morale scales what is left.

Predict first. After a year of pushing hard, is available capacity closer to 10 or to 6?

Choose an example

Figure: Capacity is not what the plan says. Three bars: nominal capacity 10.0, capacity after debt drag 7.70, and available capacity after morale 6.31.
When: After 60 periods, Drag coefficient: 0.02
Constructed example: states from the chapter's push-hard run, recomputed with the pack's available_capacity function.

Calculated values

Debt carried
115.0
Morale
0.82
Drag coefficient
0.020
Available capacity
6.31
Plan over reality
1.58

Drag = 0.020 x 115.0 = 2.30. Available = max(0, (10.0 - 2.30) x 0.82) = 6.31. Plan over reality = 10.0 / 6.31 = 1.58. A plan built on nominal capacity assumes 1.58 times what exists.

Use the idea

Compare the capacity a delivery plan assumes with the capacity measured over the last quarter.

Where the conclusion applies

The states are those of the push-hard run. Debt and morale are proxies in practice, so the exact available figure is an estimate; the direction of the gap is the claim.

Check your understanding: With debt 50 and drag 0.02, what is the capacity after drag, before morale?
10 - 0.02 x 50 = 10 - 1.0 = 9.0 engineer-weeks.

Chapter 33 source: section "Capacity is not what the plan says". Demonstration C33-D02.

3Demonstration 3 of 4

Rework share moves before delivery does

Which number warns first, features delivered or the share of capacity spent on rework?

Debt surfaces defects in proportion to itself. Each defect fixed takes 0.6 engineer-weeks from delivery, so the rework share climbs from the first periods, and a standing repayment share slows the climb.

Equation: available capacity is nominal capacity minus drag, times morale, never below zero

Rework share is capacity spent fixing defects divided by usable capacity. Each defect fixed costs 0.6 engineer-weeks. Repayment share is held back before delivery or rework.

Predict first. With no repayment, is the rework share in period 6 above or below 10 percent?

Choose an example

Figure: Rework share moves before delivery does. Left panel: the percent of usable capacity spent on rework in each of 60 periods, 24.0 percent in period 12. Right panel: features delivered per period.
Share of capacity reserved for repayment: 0, Period read: 12
Constructed example: the chapter's push-hard and repaying runs, rework share rebuilt from the pack's step rule.

Calculated values

Repayment share
0.00
Period read
12
Usable capacity
8.65
Rework share
24.0 percent
Features delivered that period
6.57

In period 12 the team starts with 3.47 open defects and 8.65 usable capacity. After repaying 0.00 x 8.65 = 0.00, it fixes min(3.47, 8.65 / 0.6) = 3.47 defects, spending 3.47 x 0.6 = 2.08 on rework. Rework share = 2.08 / 8.65 = 0.240, which is 24.0 percent.

Use the idea

Add a rework category to how work is tracked and plot its share beside delivery volume.

Where the conclusion applies

Rework is booked honestly. In many teams it is booked against the feature it belongs to, which hides this signal.

Check your understanding: With 4 open defects and 9 units to deliver, what is the rework share of 9 usable units?
fixing = min(4, 9 / 0.6) = 4 defects, rework = 4 x 0.6 = 2.4, share = 2.4 / 9 = 0.27.

Chapter 33 source: section "The three-act shape". Demonstration C33-D03.

4Demonstration 4 of 4

Test the conclusion against the proxy's range

Does the repayment conclusion survive not knowing the drag coefficient?

A larger drag makes debt more costly sooner, so the repaying policy overtakes earlier. At a short horizon and a small drag the lead can stay with push hard.

Equation: drag equals the drag coefficient times the debt

The drag coefficient converts debt into lost capacity and cannot be read from a register. Debt is shown as a direction, not a level. The horizon is the period at which features are compared.

Predict first. At period 60, does the repaying policy lead for every drag value from 0.005 to 0.03?

Choose an example

Figure: Test the conclusion against the proxy's range. Left panel: features at period 60, 230.1 for push hard and 319.0 for repaying 20 percent, with drag 0.020. Right panel: debt over 60 periods under each policy.
Drag coefficient: 0.02, Compared at period: 60
Constructed example: drag values defined for this reader around the pack's 0.02, run with the pack's run function.

Calculated values

Drag coefficient
0.020
Horizon (periods)
60
Push hard, features
230.1
Repay 20%, features
319.0
Repaying minus push hard
88.9

With drag 0.020 at period 60: 319.0 - 230.1 = 88.9 features. Debt under push hard is 115.0, so the drag is 0.020 x 115.0 = 2.30 engineer-weeks. Repaying leads at this horizon.

Use the idea

State the recommendation with the range of the unmeasured value, and say whether the range changes the decision.

Where the conclusion applies

Drag is held constant over time and across the codebase, which real systems do not do. The conclusion also depends on the shortcut and defect rates being as set.

Check your understanding: If push hard has 152.7 features and repaying has 154.9, which leads and by how much?
Repaying leads by 154.9 - 152.7 = 2.2 features.

Chapter 33 source: section "Making the invisible reviewable". Demonstration C33-D04.