The mistake is comparing licence cost to development cost, so the model has to
include the years after the first.
Requirement: feature-flagging and staged rollout across 30 services
BUY vendor SaaS
licence, 30 services, growing seats yr1 38,000 yr2-5 46,000 each
38,000 + (4 x 46,000) = 222,000
integration, 1 engineer for 6 weeks yr1 18,000 = 18,000
ongoing ownership, 0.1 FTE 14,000 x 5 yrs = 70,000
---------
5-year total 310,000
BUILD in-house service
initial build, 2 engineers x 4 months yr1 200,000 = 200,000
infrastructure and on-call 16,000 x 5 yrs = 80,000
maintenance and features, 0.4 FTE 56,000 x 4 yrs (2-5) = 224,000
---------
5-year total 504,000
Difference over five years: build costs 1.63x buy, 194,000 more.
Break-even on licence alone: build 504,000 less the buy-side costs that
are not licence (18,000 integration + 70,000 ownership = 88,000) leaves
416,000 of licence budget, so ~83,000/yr against today's ~44,400/yr
average. The vendor would have to be about 1.9x more expensive than
quoted before building wins on cost.
The line that decides it is maintenance, and it is the line always omitted. The
build column's four-tenths of an engineer forever is not padding: someone answers
the pages, patches the dependencies, adds the feature the third team needs, and
onboards their replacement. Over years two to five that line alone reaches
224,000, more than the 200,000 initial build it is supposed to be the cheap tail
of, which is why "we could write that in a month" is usually true and usually
irrelevant.
Buy wins here, and by a wide enough margin — 310,000 against 504,000 — that the
conclusion does not turn on any single assumption. It survives the licence
growing faster than modelled, because the vendor would have to charge roughly
twice the quoted rate before the columns cross, and it survives the build coming
in under estimate, because the initial build is less than half of the build
column. What it would not survive is the maintenance line being deleted, which is
precisely the edit that gets made when someone wants the answer to be build.
What the arithmetic does not settle is strategy, and this is where a senior answer
diverges. Buy anything that is not your differentiator, even at a premium,
because the scarce resource is engineering attention rather than money. Build what
you sell. Feature flagging is nobody's product, so the numbers and the strategy
agree here; where they disagree — a vendor is cheaper but owns the data model of
your core domain — the strategy wins.
Three costs to name that resist quantification. Exit cost, because migrating off
a vendor whose data model you have adopted is a project, so ask what leaving
looks like before signing. Roadmap risk, since the feature you need may never
arrive and you cannot build it. And integration surface: thirty services calling
a vendor SDK is a coupling you now version.
The buy-side trap is the seat-count curve. A licence priced per service or per
seat grows with your success, so model it against the headcount plan rather than
today's, and the break-even year moves.