Cloud Modernization Patterns Module 1 · Size It Up

Build vs Adopt vs Extend

Last reviewed · content updated

Intermediate

What 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:

  1. Adopt — take a mature open-source service-request product and configure it for Meridian
  2. Build — rebuild FieldDesk purpose-made on Meridian’s modern stack (Next.js, Entra ID for identity, a managed database)
  3. 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-request
application. 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 its
own corner.
Option A - ADOPT: [paste the OSS product's stack and feature summary]
Option B - BUILD: purpose-built on Next.js + Entra ID + managed Postgres
Option 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:

AttributeAdopt (OSS product)Build (Next.js)Extend (low-code)
Architecture styleMonolith, Node 16-eraModern app, your patternsVendor runtime
IdentityPlugin-based SSOEntra ID nativePlatform connector
Type safetyNoneEnd-to-end TypeScriptN/A
Ops burdenYou patch a forkYou own an app on PaaSVendor owns runtime
Licensing/ownershipApache-2.0 fork driftFully ownedPer-user, rising
Team fitNew stack islandExisting portal skillsCitizen-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:

CapabilityMVPLaterNot neededDefer 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:

  1. Platform alignment — Meridian already runs a settled modern-web ecosystem. Adopting a divergent stack means maintaining a technology island forever.
  2. Remediation cost converges on build cost — with a worse endpoint: money spent modernizing a fork still leaves you on someone else’s architecture.
  3. Scope discoveries — the disposition table deletes the adopt option’s biggest advantage (all those features you turn out not to need).
  4. Security debt as entry cost — a customized fork can’t cleanly take upstream fixes; you inherit its vulnerability backlog on day one.
  5. 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 each
attribute from the perspective of (a) a CIO focused on 5-year run cost,
(b) a security officer, (c) the field-operations director. Score all three
options 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.

KNOWLEDGE CHECK

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.

Search lessons