Kaizen Labs · Customer Portfolio

Customer Health & ROI Mapping

Grade = what the account costs us. Estimated service hours × loaded rate, as a % of contract value: A ≤15% · B ≤30% · C ≤50% · D ≤75% · F >75%.
Health = how the account behaves (0–100: bugs, scope, relationship, growth). Health under 40 knocks the grade down one notch — it never raises it. Hover any grade for the why.

Assumptions (adjust — the whole portfolio recalculates)

Calendar hours are actuals; email/ticket/Intercom time is estimated from counts × these handle times.

Portfolio ROI map — what it costs vs how it behaves (bubble = contract value)

x = annualized service cost as % of ACV (quadrant split at 30%, the B/C line) · y = qualitative health score (split at 55, the C line). Diamond markers = pre-launch accounts (implementation effort is expected; re-grade after go-live). Bubble area ∝ ACV. Hover any bubble for details.

Contract value & service cost by stage

StageAccountsΣ Contract valueΣ Ann. service costBlended cost % of ACVAccounts

Portfolio ranking

Click any column header to sort. Filters also drive the charts and stage table above.
How to read this. Est. hrs/wk × 52 × loaded rate = Ann. cost; Cost % of ACV sets the grade; Svc margin = ACV − ann. cost (what survives service effort); Contract $/hr = ACV ÷ annual service hours — below the loaded rate means every hour serviced loses money. Health <40 lowers the grade one notch; hover a grade chip to see when that happened. Pre-launch stages (anything not Live) are expected to carry implementation effort — re-grade after go-live.

Cost as % of contract, ranked (colored by final grade)

Rubric detail compare with

DimensionMaxEvidenceScoreComparisonScore
Health total100
Weighting. Health is 100% qualitative: trajectory 20 · issue resolution 25 · scope discipline 20 · relationship risk 20 · expansion & referenceability 15. Economics is deliberately not in the health score — it already sets the grade, so counting it again would double-weight money and hide behavioral risk. For pre-launch accounts the trajectory dimension is excluded (a ramp isn’t decay) and health is renormalized over the remaining 80 points. Health bands (diagnostic): A 85+ · B 70–84 · C 55–69 · D 40–54 · F <40.
Method. Calendar hours are actuals from each account audit. Email, Linear, Intercom, and untracked-meeting time are estimates (counts × handle-time assumptions), since audits record counts, not durations. Cost = est. hours × loaded rate; annualized = window cost ÷ weeks × 52. ACVs verified against the Salesforce contracts report (2026-07-16) except where noted in each account’s acvNote. Stages from the Notion deployment tracker.

Adding an account. Append one entry to the ACCOUNTS array: id, name, short, acv, owner, stage (from the deployment tracker), optional preLive:true for pre-launch accounts, the weekly rows from its audit CSV (mr/ma = recurring/ad-hoc meeting hrs, un = untracked meetings, es/er = emails sent/received, it = Intercom touched, lc = Linear created), optional peak/late phase dates, and the four qualitative scores (issue resolution /15, scope /10, relationship /10, expansion /10) with evidence notes. Everything else updates automatically.