
Engineering
Build vs. buy vs. configure: the third option most teams miss
FastYoke Engineering · 8 min read · Jul 8, 2026
- Business
- aPaaS
- Strategy
The tool that almost fits
Most operations teams know this moment. You've outgrown the spreadsheet. Orders, jobs, inspections, or cases move through a sequence of states — received, assigned, in progress, done — and three people are tracking that sequence in three different tabs, with a fourth finding out about a status change by asking in Slack. So you go looking for software.
You find a vertical SaaS tool that gets most of it right. The intake form is close. The stages match maybe eighty percent of how your team actually works. And then you hit the twenty percent that doesn't: a state your process needs that the tool doesn't have, a field the vendor won't add, an approval step that has to happen in a specific order for compliance reasons the vendor has never heard of. You ask support. You get a roadmap ticket, a "vote on this feature" link, or a quiet no.
At that point, the conversation inside the company splits into two camps. One says: let's just build it ourselves, we have engineers. The other says: let's find a different vendor, or live with the gap. Both of those are real options. But framing the decision as build-versus-buy skips the option that actually fits most operations teams best — configuring a platform you own.
Why the binary framing keeps winning the argument, and losing the outcome
Build vs. buy is an old, well-worn framework, and it persists because each side of it is easy to argue from experience. Everyone has a build horror story — the internal tool that took eighteen months, needed a dedicated engineer to keep alive, and quietly rotted the day that engineer left. And everyone has a buy horror story — the SaaS contract that looked cheap in the demo and turned into a multi-year hostage situation once the process needed to change and the vendor's roadmap didn't move.
What the framing hides is that "build" and "buy" aren't actually two points on a line — they're two different bets on where the risk sits. Build bets that your engineering team can absorb an open-ended maintenance obligation. Buy bets that the vendor's product roadmap will keep matching your process forever. Most operations teams don't want to make either bet. They want software that fits the process they actually run, that they can change when the process changes, without signing up to maintain a bespoke system from a blank file.
That's a different question than "build or buy," and it has a third answer: take a platform that already handles the parts every operational tool needs — data storage, an audit trail, a UI, a workflow engine — and configure your process on top of it, on infrastructure you control.
What "configure a platform you own" actually means
This isn't a rebrand of "buy a more flexible SaaS tool." Owning the platform changes what you're actually getting, in ways that show up the moment your process is unusual, or your compliance requirements are strict, or your vendor relationship goes sideways.
FastYoke is built around a single idea: the workflow itself — the sequence of states a job, order, or case moves through, and the rules that govern each transition — is modeled explicitly as a finite-state machine, not buried in application code you'd have to read line by line to understand. When your process has a state a generic tool doesn't support, or a rule a vendor's product team has never prioritized, you add it directly: define the state, define the guard condition that governs when a transition is allowed, and the engine enforces it. That guard logic runs through a sandboxed evaluator rather than arbitrary code, so adding a rule doesn't mean opening up your production system to whatever anyone wants to write.
The forms and record views around that workflow are generated from the same schema that defines your data — so adding a field to an entity adds it to the UI automatically, instead of waiting on a development cycle to hand-build a new form. Every state change gets written to an append-only event log, which means the audit trail that compliance or operations eventually asks for — who changed what, when, and through which transition — already exists, rather than being bolted on after the first audit request.
And underneath all of it, each tenant's data lives in a database that tenant owns. FastYoke runs as a single binary — in our cloud, in a customer's own data center, at the edge, or fully air-gapped with no outbound network at all. If you need your operational data to stay inside your own walls for regulatory reasons, or you simply don't want your process history sitting exclusively in a vendor's multi-tenant database, that's the deployment model, not a special enterprise add-on you negotiate for.
Marketplace apps — a CRM, a warehouse-management workflow, an inventory tracker — install as data into that same database. You get a working starting point without a blank-file build, and then you configure it, because it's sitting on the same schema-driven, FSM-governed foundation as anything you build yourself. There's no separate customization layer bolted onto a closed product; the thing you configure is the same thing the platform is made of.
When build still wins, and when buy still wins
Configuring a platform you own is the right default for most operational software, but it isn't the right answer for everything, and it's worth being honest about where the other two options still hold.
Build wins when the workflow itself is your competitive advantage. If the logic you're encoding is genuinely proprietary IP — a pricing algorithm, a matching engine, a physical process nobody else runs — and protecting or extending that logic is core to why customers pay you, that's worth a dedicated engineering investment. You're not saving engineering effort by configuring a platform for something that differentiates your business; you're the one place where the from-scratch build earns its cost.
Buy wins when a mature, narrow tool already fits. If your process is genuinely standard — expense reports, applicant tracking, standard double-entry accounting — a mature vertical SaaS product built by a team that's spent a decade on exactly that problem will usually beat a configured general platform on depth, polish, and integrations specific to that niche. Don't configure your own accounts-payable workflow when a compliant, audited accounting product already does it better than you'll build it in a quarter.
Configuring a platform earns its place in the middle: your process isn't so standard that an off-the-shelf tool fits without a fight, but it also isn't the thing your company is actually selling.
What to watch out for
Configuring is real work, not a shortcut, and treating it like a free lunch is how these projects go sideways.
You still have to model the process correctly. A finite-state machine forces a kind of precision that a spreadsheet or a generic ticket queue never demanded — every state, every valid transition, every guard condition has to be named and agreed on. That's a feature, not a formality, but it does mean a real design conversation up front, not just a form-builder session.
You still own the operational outcome. Because the platform runs on infrastructure you control, you're accountable for keeping it running, backed up, and monitored — the same way you would be for anything you built, just without having built the underlying engine, storage layer, or UI generator from scratch. That's a materially smaller obligation than a bespoke build, but it isn't zero.
And it's still possible to configure your way into a mess. A flexible platform doesn't stop a team from wiring together a workflow that's as tangled as the spreadsheet it replaced. The FSM model makes bad process design visible faster than free-form software does, but "visible faster" isn't the same as "prevented."
Where to go next
If your process is the thing three teams argue about in Slack every week, it's usually a sign that it's specific enough to be worth modeling explicitly, and common enough that building the underlying engine yourself would be waste. Take a look at FastYoke's runtime to see what configuring on top of it looks like, or read about why the FastYoke core is written in Rust if you want the engineering case for why "own the platform" doesn't mean "own a fragile one."