Pricing / TCO method
references/pricing-tco.md — direkt aus der Skill-Doktrin gerendert.
This file is the home of the cost method — how you turn incomparable sticker
prices into a comparable, risk-bearing TCO. It owns the reasoning: teardown → parameter-union
questionnaire → 3-point bands → 4-bucket rollup, band-width-as-cost-risk, count-each-package-once,
annotate-excluded-costs. The field shapes it produces (pricing, costModel, workPackages,
the four buckets) live in contract.md; cite it, don’t restate it here.
Cost is a separate axis from Fit, and the pricing pass runs after the deep-dive scoring —
you need to know what the survivors cost before you can recommend, but cost must never contaminate
the Fit score (the doctrine is model.md § The four axes). Fold price into the weighted score and
you hide the very cost-vs-value trade-off the buyer needs to see. The pass can run as its own short
mini-loop, or fold into the deep-dive research (have the research agent return each tool’s pricing
model + parameters alongside its scores — see the deep-dive brief in research-briefs.md).
Why this needs a method at all: real candidates price on incompatible models — per-seat, per-resolution, per-conversation, AI credits, tiered-with-caps, self-host. Sticker prices are not comparable. The method below makes them comparable and — just as important — surfaces cost risk (how far a tool’s bill can swing), which is often more decision-relevant than the midpoint.
The mini-loop: teardown → questionnaire → compute
Step 1 — Pricing-model teardown (per surviving tool)
For each survivor, document how it charges and decompose it into cost components, each tied to the parameter that drives it — one row per tool: the billing model, the cost formula (its components), the parameters that drive the cost, and the band width (how far it can swing).
Read the teardown for shape: flat/tiered tools have narrow bands (cost-safe, maybe a higher floor); usage-priced tools have wide bands (cheaper at low volume, exposed at peak). And annotate excluded costs — ops labour, a mandatory second product or KB, integration effort. A cash figure that quietly drops them lies, and the lie favours exactly the tool that looks cheapest.
Step 2 — Parameter union, split two ways
Collect every parameter across all the teardowns, then divide them:
(A) Org-usage parameters → the questionnaire. Shared across tools, so you ask them once and the answers feed every tool’s formula. Typical set: seats; email volume + active months; AI-draft events/mo; chatbot conversations/mo; deflection/resolution rate; languages; season peak multiplier + peak weeks; #bots/instances; AI-assist seats; annual-vs-monthly commitment.
(B) Billing-mapping assumptions → modelling choices you set (with justification). NOT user questions — they are your decisions, and they are the source of the optimistic↔pessimistic spread: what counts as one billable unit; multi-turn chat = 1 or many; annual-commit discount applied or not; included allotments before overage; one-time onboarding; how to treat unverified rates (assume high in the pessimistic case).
The teaching point: asking pricing questions per tool is chaos. Enumerating each tool’s parameters and taking the union yields one short questionnaire whose answers drive every formula — and keeps the tools comparable.
Step 3 — Elicit user inputs as RANGES, not points
For uncertain usage parameters, ask for low / expected / high. Uncertainty is a feature here: it
is the optimistic/pessimistic spread. “Don’t know, somewhere between X and Y” is a perfectly good,
useful answer. (Same disciplined interview style as Phase 2 — requirements-interview.md.)
Step 4 — Compute a 3-point parametric TCO per tool
Cost = f(params), evaluated at three scenarios using the same usage vector across all tools
(this is what keeps them comparable):
- Optimistic — low volume + annual-commit discount + favourable billing mapping.
- Expected — realistic volume + normal mapping.
- Pessimistic — sustained-peak volume + overage rates + worst-case mapping + unverified rates assumed high.
Report year-1 (incl. one-time) and steady-state; for usage-priced tools flag the peak-period bill separately. Cap each tool at its 2–3 dominant drivers — don’t model every line item at three levels (combinatorial explosion); hold minor items fixed.
The bundled tool-level explorer ships a calculator scaffold that implements exactly this shape —
scenario vectors + one formula per tool + a sortable band table (cockpit.md § The bundled
explorer). Fill in one formula per surviving tool from the teardown and it computes the bands live.
It’s a scaffold, not a fixed engine: every engagement’s per-tool formulas differ.
Step 5 — Band width IS a result; price is a SEPARATE axis
- The width of a tool’s optimistic→pessimistic band measures cost risk. Flat/tiered tools have narrow bands (predictable); usage-priced tools have wide bands — a tail that bites exactly when volume spikes (e.g. a seasonal peak). Surface this explicitly; it is often more decision-relevant than the midpoint.
- Never fold price into the weighted Fit score. Keep it a separate axis and present a
cost-vs-value view (Fit score vs cost band) at synthesis. Mixing cost into the 0–N score hides
the very trade-off the buyer needs to see. (Axis doctrine —
model.md.)
Rolling up to a solution: the 4-bucket TCO
Everything above prices a tool. A solution-design engagement prices a solution (a
composition), and the move that makes buy, compose, and build comparable is to split every
solution’s cost into the same four buckets — then sum within each bucket across whatever the
composition contains. The bucket shapes (and which costModel / workPackages fields feed each)
are in contract.md § Solutions; the buckets themselves are:
- ① Project / build + integration — all one-time costs to stand the solution up: effort (set up, build the custom pieces, glue the tools together) and cash (hardware, perpetual licence, setup fees, any non-recurring outlay).
- ② Maintenance / year — ongoing labour to run it.
- ③ License / rent / year — recurring software fees, summed across every tool in the composition.
- ④ Usage / year — volume-driven costs (resolutions, conversations, AI tokens) across every tool.
Year-1 = ① + ② + ③ + ④; Ongoing/yr = ② + ③ + ④. The three solution kinds differ only in where
the weight sits, not in the buckets:
- Rent (SaaS subscription): ③/④ dominate; ① is light (discovery + config) and mostly effort; ② is small.
- Buy (perpetual licence / hardware): ① carries the cash — hardware, perpetual licence, setup fees — but little ongoing effort; ③ shrinks (no rent) or vanishes; ② depends on how much you run.
- Compose: ③/④ across several tools, plus a real ① (integration effort + any setup cash) and a heavier ② (more surface to maintain) — the composition’s hidden tax.
- Build (Eigenbau): ① dominates and is mostly effort (the whole thing is your time), with some setup cash for parts; ③ shrinks to hosting, ④ is raw infra/token cost, ② is yours forever.
This is the point of the whole exercise: a SaaS sticker price (mostly ③) and a custom build (mostly
①) are not comparable as quoted, but their four-bucket totals under one Scenario are. Evaluate each
bucket at the three points as before — the band still carries the cost risk, and ①’s
optimistic↔pessimistic spread doubles as the Termin-Sicherheit signal for the build-heavy
solutions. Count each work package once per solution; never sum a shared package across solutions
— shared setup is identical across paths, so summing it double-charges the comparison (the unit
doctrine is model.md § Composition). And keep cost a separate axis: never blend the four-bucket
total into the Fit score.
Output
Write the teardown + 3-point result into each tool’s pricing object (and a solution’s costModel /
workPackages) — schema in contract.md § The pricing field / § Solutions. The cockpit renders
the band. Mark each figure verified once a human has confirmed the rate against the vendor’s
pricing page.
Worked illustration (Die Skischule, 8 finalists, seasonal year-1 basis, USD≈EUR)
The full Skischule engagement end-to-end is examples.md; here is just the pricing pass, because it
is the clearest demonstration of band-width-as-cost-risk. Teardown split the field into
narrow-band / cost-safe (OMQ, moinAI, hosted Zammad — flat/tiered) vs wide-band /
usage-exposed (Intercom, Zendesk, Freshdesk, Userlike — per-resolution/conversation).
Questionnaire answers were deliberately uncertain (chatbot 1k–10k/yr, peak up to 10×, draft-trigger
policy undecided), which produced the spreads:
| Tool | Opt | Exp | Pess | Band |
|---|---|---|---|---|
| Zammad (excl. ops + chatbot bolt-on) | 440 | 740 | 1,330 | 3.0× |
| Userlike / Lime | 1,400 | 3,840 | 10,100 | 7.2× |
| Freshdesk / Freshchat | 1,640 | 3,410 | 7,170 | 4.4× |
| Intercom / Fin | 1,940 | 3,690 | 8,920 | 4.6× |
| Zendesk | 3,730 | 6,920 | 16,300 | 4.4× |
| HubSpot | 4,060 | 6,720 | 13,560 | 3.3× |
| moinAI (chatbot-only add-on) | 5,140 | 5,450 | 13,500 | 2.6× |
| OMQ | 20,000 | 21,500 | 24,000 | 1.2× |
Three things the method surfaced that a single sticker price would have hidden:
- Priciest can be safest. OMQ’s language/tier gate sets a high but flat floor (predictable); everyone else is cheaper but variable. Cheapest-looking ≠ cheapest.
- The lowest number can mislead. Zammad’s figure excludes ops labour and a mandatory chatbot bolt-on (a second product + second KB). The model must annotate excluded costs or it lies.
- Usage-priced tools carry the peak tail. A 10× peak pushes Zendesk’s worst case to ~4× its best — that volatility, not the midpoint, is the real cost story for a seasonal business. Band width = cost risk.