Understanding build vs buy.
What can feel like a straight-forward project frequently hides complexity. This tool helps organizations identify the scope of their AI-powered revenue enablement projects so they can make informed decisions when choosing to build or buy a solution.
Tune the customer profile.
Team size and release cadence drive maintenance costs and the Spekit license comparison. Numbers persist in your browser.
How the maintenance multiplier works
Two scenario factors scale the ongoing maintenance burden. They apply only to ongoing FTE shares, never to one-time build effort.
Team adjustment
teamAdj = 0.25 × log₁₀(users / 50), clamped to [−0.30, +0.70]. 50 GTM users is the baseline (0 adjustment). Doubling to 100 adds ~+0.08; 500 adds ~+0.25; 1,000 adds ~+0.33.
Release adjustment
releaseAdj = 0.25 × log₁₀(annual releases / 4), clamped to [−0.20, +0.60]. 4 releases per year is the baseline (1 product × 1 release per quarter). Annual releases = products × releases-per-quarter × 4.
Combined
multiplier = 1 + teamAdj + releaseAdj. The total stays bounded between 0.50× and 2.30× at the clamp extremes.
Log scaling reflects diminishing marginal cost: the second 100 users add less burden than the first, but burden never goes to zero. The clamps prevent extreme inputs (1 user, 200 releases) from producing absurd multipliers.
Chat tool
Where does the AI tooling live in Rep's workflow?
Proactivity
How do reps get answers from the tool?
Context
What does the tool know about the rep's work?
Knowledge
What does the AI know about your business?
Controls
How do you make sure correct and permitted answers and content is used?
Analytics
How does the tool impact performance?
Authoring
How is new content created?
Education
How do reps ramp and stay current?
Buyers
How does the tool support buyer experiences?
Nothing selected yet.
Pick a level above L0 on any ladder to add to the build.
Export the whole model. Hand it to Claude.
Export writes every step and ladder in full. It is a complete document, not a delta, so the file stays interpretable even after src/lib/capability-model.ts drifts. Hand the file to Claude and the values get baked into the source.
File format reference
{
"$schema": "bvb-model-snapshot/v3",
"exportedAt": "2026-05-25T18:30:00.000Z",
"blendedFteRateUsd": 175000,
"ladders": [
{
"id": "<ladder-id>",
"name": "...",
"framing": "...",
"steps": [
{
"id": "<atomic-step-id>",
"name": "...",
"description": "...",
"giveUp": "..." | null,
"complexity": "green" | "yellow" | "red" | null,
"buildWeeksMin": 4 | null,
"buildWeeksMax": 6 | null,
"maintain": { "eng": 0.1, "ml": 0, "pm": 0, "contentOps": 0, "dataEng": 0 }
}
]
}
]
}