Build vs Adopt vs Extend
Last reviewed · content updated
IntermediateWhat you'll learn
~20 min- Evaluate build, adopt, and extend options each on its own terms before comparing
- Build a feature-parity disposition table with an explicit 'not needed' column
- Recognize the honest limits of unweighted comparisons -- and add the weighting pass
FieldDesk’s three futures
Dana’s low-code stopgap became load-bearing, and now it has three possible futures:
- Adopt — take a mature open-source service-request product and configure it for Meridian
- Build — rebuild FieldDesk purpose-made on Meridian’s modern stack (Next.js, Entra ID for identity, a managed database)
- Extend — stay on the low-code platform and invest in doing it properly
The naive move is to pick a favorite in the first meeting and spend six weeks justifying it. The disciplined move is a rule: every option gets a full evaluation on its own terms before any comparison happens. If you evaluate “adopt” through the lens of the build you already want, you will find exactly the flaws you went looking for.
Prompt first: three advocates
I need three separate advocacy documents for the future of a service-requestapplication. For each option below, write the STRONGEST honest case for it --architecture fit, cost profile, risks, and what success looks like in 2 years.Do not compare options to each other. Do not hedge. Each document argues itsown corner.
Option A - ADOPT: [paste the OSS product's stack and feature summary]Option B - BUILD: purpose-built on Next.js + Entra ID + managed PostgresOption C - EXTEND: remain on [low-code platform], remediate properly
Context: [paste the Lesson 1.2-style assessment of FieldDesk here]Three documents, three genuine best cases. Only after all three exist do you build the comparison.
🔍Why advocate documents survive the decision
In one real evaluation this pattern came from, the incumbent product’s own deep-dive concluded pro-adoption — and the final cross-option decision overrode it and chose build. The advocate document was preserved unchanged, not retro-edited to agree. That is the process working: advocates argue the best case at component altitude; the decision happens at portfolio altitude, where factors like platform alignment live. If your advocacy documents all mysteriously agree with the final answer, someone edited history.
The comparison: a qualitative attribute matrix
With three advocates on the table, the comparison is a matrix of attributes — not scores:
| Attribute | Adopt (OSS product) | Build (Next.js) | Extend (low-code) |
|---|---|---|---|
| Architecture style | Monolith, Node 16-era | Modern app, your patterns | Vendor runtime |
| Identity | Plugin-based SSO | Entra ID native | Platform connector |
| Type safety | None | End-to-end TypeScript | N/A |
| Ops burden | You patch a fork | You own an app on PaaS | Vendor owns runtime |
| Licensing/ownership | Apache-2.0 fork drift | Fully owned | Per-user, rising |
| Team fit | New stack island | Existing portal skills | Citizen-dev ceiling |
The table that wins schedules
The single most valuable artifact in this decision is the feature-parity disposition table. Take every capability the current FieldDesk has, and force each into one of four columns:
| Capability | MVP | Later | Not needed | Defer decision |
|---|---|---|---|---|
| Request intake + assignment | ✔ | |||
| SLA timers | ✔ | |||
| Storm-day bulk dispatch | ✔ | |||
| Emailed CSV integrations | ✔ (replaced by API) | |||
| The reporting module | ✔ (moves to the data platform, Module 3) | |||
| Multi-language UI | ✔ (workforce is single-language) | |||
| Custom branding engine | ✔ | |||
| Mobile offline mode | ✔ |
The “not needed” column is where the schedule is won. Every row you can honestly place there is scope the build option does not carry — and in real evaluations, discoveries like “we never migrated the legacy data anyway” or “authentication is IdP-only now” repeatedly shrink the build until it beats adoption. Scope discovery is not cheating; it is the evaluation doing its job.
What actually tips these decisions
Documented tipping factors from evaluations of exactly this shape, in weight order:
- Platform alignment — Meridian already runs a settled modern-web ecosystem. Adopting a divergent stack means maintaining a technology island forever.
- Remediation cost converges on build cost — with a worse endpoint: money spent modernizing a fork still leaves you on someone else’s architecture.
- Scope discoveries — the disposition table deletes the adopt option’s biggest advantage (all those features you turn out not to need).
- Security debt as entry cost — a customized fork can’t cleanly take upstream fixes; you inherit its vulnerability backlog on day one.
- Run-rate economics — a purpose-built app on PaaS versus per-user licensing that rises with headcount.
And one discipline for whatever wins: the loser becomes a functional reference spec. If build wins, the OSS product’s battle-tested feature set defines what to build — and none of its code comes along.
The honest caveat — and your exercise
A qualitative matrix has a real limit: with no criteria weighting, the trade-off between rows is not auditable. A reviewer who values ops burden over platform alignment could defensibly reach the other answer. So run the weighting pass yourself:
Take this attribute matrix and disposition table. Propose weights for eachattribute from the perspective of (a) a CIO focused on 5-year run cost,(b) a security officer, (c) the field-operations director. Score all threeoptions under each weighting. Where does the decision flip?If the answer survives all three weightings, you have a robust decision. If it flips, you have found the actual disagreement to take to the steering committee — which is worth more than false consensus.
Why are the three options evaluated separately, each on its own terms, before any comparison is made?
Key takeaway
Evaluate each future on its own terms, compare with an attribute matrix, and force every existing capability into MVP / later / not needed / defer — the “not needed” column is where schedules are won. Then stress the answer with a weighting pass. Next lesson: turning the winner into a roadmap that survives contact with reality.