Evolvier Engineering Team
Engineering
11 min read
Every engineering leader runs into the build vs. buy software decision, and most run into it badly — not because the analysis is hard, but because the inputs are dishonest. The buy column hides integration and exit costs. The build column hides maintenance and operations. And the loudest voice in the room is usually either a vendor with a polished demo or an engineer who wants to build something interesting.
This is the framework we use at the start of every custom software development engagement — including the ones where we tell the client not to build. The calculus is the same whether you are a funded startup or an enterprise replacing a legacy platform: identify what actually differentiates you, price both columns honestly over a multi-year horizon, and choose an architecture that keeps the decision reversible.
Start with the only question that matters
Strip away the spreadsheet and the decision reduces to one question: is this capability part of how you win, or part of how you operate?
- Commodity capability — payroll, email, accounting, ticketing, CRM for a standard sales motion, video calls. Hundreds of companies have the same problem in the same shape. The market has already amortized the engineering cost across thousands of customers, and you will never out-build a vendor whose entire company exists to solve that one problem. Buy.
- Differentiating capability — the pricing engine that encodes how you quote, the logistics workflow that clears your goods through customs a day faster than the competition, the marketplace mechanics that define your product. If the workflow is the moat, renting it from the same vendor your competitors rent it from caps your advantage at parity. Build.
The hard cases live in the middle: capabilities that start as commodity and drift toward differentiation as the business grows. A standard storefront is commodity in year one. A multi-vendor, multi-currency commerce operation with regional tax rules and custom settlement flows is not. That drift — not the day-one comparison — is what the architecture section below is really about.
The decision framework
Buy when
- The problem is solved, stable, and identical across your industry. Accounting rules do not care about your org chart.
- A vendor's roadmap moves faster than your team realistically could — model providers, payment networks, and communication infrastructure are the obvious examples.
- Compliance certifications would cost more to obtain than to inherit. PCI DSS scope reduction through a payment provider is the canonical case.
- Your usage fits the product's standard configuration today, and you can articulate the exit path if it stops fitting.
- Time-to-value is measured in weeks and the integration surface is small.
Build when
- The workflow is your competitive edge, and forcing it into someone else's data model loses precision exactly where you make money.
- You are already paying the workaround tax: spreadsheets bridging two systems, manual re-entry between tools, plugins that break on every vendor upgrade.
- Per-seat or per-transaction pricing scales against you — your costs grow linearly with success while the vendor's marginal cost stays near zero.
- Data residency, audit, or security requirements exceed what the vendor will contractually commit to.
- You have customized a bought platform so heavily that upgrades have become projects. At that point you are maintaining custom software anyway — just on the worst possible foundation.
The hybrid most companies actually run
Real systems are rarely pure. The pattern that holds up in production is a thin custom core with bought edges: build the domain logic that differentiates you, buy identity, payments, email, observability, and everything else commodity, then connect them through well-defined seams rather than deep coupling. Much of what we ship in API integration and business automation engagements is exactly this seam layer — the part that decides whether bought components stay replaceable or calcify into lock-in.
The honest cost model
Both columns lie by omission. Here is the full list.
What a build really costs
- Discovery and design. Domain modeling, architecture, and the security model before the first feature ships. Cheap relative to what it prevents, but real time on the calendar.
- The build itself. The number in everyone's head — and reliably the smallest of the long-term line items.
- Operations. Hosting, CI/CD, monitoring, backups, and incident response. A custom system is a production responsibility, not an artifact. Treat cloud hosting and DevOps as a permanent line item, not a launch task.
- Maintenance and evolution. Over a system's life, the cost of changing software typically exceeds the cost of writing it the first time. Dependencies need patching, requirements keep moving, and someone has to understand the code well enough to change it safely. This is where underqualified builds die — not at launch, but in year two.
- Continuity risk. If one developer holds the system in their head, you do not own an asset; you own a dependency on a person. Documentation, tests, and handover discipline are part of the price.
What buying really costs
- The license — then the seats, then the tiers. SaaS pricing is designed so the affordable tier never quite fits a growing company. Project the bill at three times your current usage before signing.
- Integration. No serious system runs alone. Connecting the bought tool to your identity provider, your data warehouse, and the systems around it is engineering work — on every vendor's schedule but yours.
- The workaround tax. Every gap between the product's data model and your operation becomes a manual process, an export, or a fragile plugin. Invisible in procurement, enormous in operations.
- Process distortion. The subtler version of the workaround tax: teams quietly reshape how they work to fit the tool. You bought software, and it edited your operating model.
- Exit cost. Data egress, retraining, re-integration, and contract terms. A platform with no exit path is not a purchase; it is a merger. Price the divorce before the wedding.
Architecture patterns that change the math
Build vs. buy gets treated as a binary because people imagine the build as a monolith they marry. Architecture is what makes the decision reversible — and reversibility is worth real money.
Anti-corruption layers around everything you buy
Never let a vendor's data model leak into your domain logic. Wrap every bought system in an adapter that translates between the vendor's contract and your internal model. When the vendor raises prices, sunsets an API version, or gets acquired, you rewrite one adapter instead of refactoring your codebase. This single pattern converts buy decisions from one-way doors into two-way doors.
A modular monolith before microservices
For a new build, the cheapest architecture that preserves options is a modular monolith: one deployable, strict internal module boundaries, one database with schema discipline. You get the operational simplicity of a monolith plus the future option to extract services along boundaries that production traffic has validated. Premature microservices are how build projects acquire distributed-systems costs before they have distributed-systems problems.
The strangler fig when replacing what you bought
When a bought platform has to go — usually after the customization cliff described below — do not schedule a cutover weekend. Pin the current behavior with tests, route traffic through a facade, and replace the system capability by capability while the old one keeps running. Incremental replacement is the difference between a migration and a rewrite-shaped outage.
API-first keeps built and bought interchangeable
Design your own systems headless — APIs first, frontends as clients — and prefer bought products that expose the same discipline. We build our own products this way: Peyze, our multi-vendor commerce platform, is API-first precisely so the build-vs-buy line can sit anywhere in a client's stack without trapping them. Once everything speaks through contracts, the question stops being "build or buy the platform" and becomes "which capabilities do we own behind which interfaces" — a much better question.
Failure modes to engineer against
How builds fail
- The big-bang rewrite. Years of parallel development, nothing shipped, requirements drifted out from under the spec. Replace incrementally or do not replace.
- Rebuilding commodity. A custom CRM with standard pipeline stages is a monument to not-invented-here. Spend custom-engineering budget only where differentiation lives.
- Ignoring the operations bill. The build was scoped; the on-call rotation, monitoring, and patch cadence were not. The system works at launch and slowly rots.
- The hero developer. One person's unwritten knowledge as your single point of failure. If it is not documented and tested, it is not owned.
- Security as a launch-week patch. Access control, audit logging, and encryption retrofitted after the architecture is set cost multiples of building them in. Our security and compliance architecture describes what built-in means in practice.
How buys fail
- The customization cliff. Configuration becomes plugins, plugins become custom code inside the vendor's framework, upgrades become projects. You now maintain custom software with none of the ownership benefits.
- Pricing that scales against you. Seats, API calls, transaction percentages — success inflates the line item until the build option you rejected becomes cheap by comparison.
- Roadmap hostage. The feature you need has been on the roadmap for three consecutive years, and competitors on the same platform receive it the same day you do.
- The acquisition rug-pull. The vendor gets acquired, the product enters maintenance mode, prices rise. Without an exit design, you migrate in a hurry — the most expensive way to migrate.
- Internal-tool sprawl. A dozen point solutions, none integrated, with the real business process living in the gaps between them. The fix is often not tool thirteen but a single custom admin panel or control center over the data you already have.
What 2026 changes — and what it does not
Two real shifts are moving the line this year.
Building thin custom layers got cheaper. AI-assisted development has compressed the cost of well-specified glue code, internal tools, and integration layers. The hybrid pattern — custom core, bought edges — now costs less to execute than it did even two years ago, which moves marginal cases toward build.
Bought software got more capable and more open. Mainstream SaaS now ships LLM features and, increasingly, structured agent interfaces such as MCP servers. A platform your AI agents can operate through a clean protocol is worth more than the same platform without one — a genuinely new column in the evaluation. It also raises the bar for what you build: custom systems should expose the same structured, secure interfaces, which is a core part of our AI development and MCP integration work.
What 2026 does not change: maintenance still dominates lifetime cost, generated code still needs the same architecture, testing, and security discipline as handwritten code, and a vendor's data model still will not match your domain just because both of you added a copilot. AI lowers the cost of writing software. It does not lower the cost of owning it carelessly.
Run the decision in four steps
Classify the capability
Differentiating or commodity — and is it drifting from one toward the other? Write the answer down with the reasoning. The document is what you revisit when the context changes in 18 months.
Price both columns over three to five years
Build: design, build, operations, maintenance, continuity. Buy: licenses at projected scale, integration, workaround tax, exit cost. If buy still wins with the hidden items restored, buy — without guilt.
Design the seams before choosing sides
Decide which contracts separate owned components from rented ones: anti-corruption layers around every vendor, API-first interfaces on everything you own. The seams are what keep the decision reversible.
Scope the smallest build that proves the value
If building, cut a thin first increment around the differentiating core. Ship a production-grade slice fast, validate it against real usage, then extend — never the whole vision in one bet.
That last step is its own discipline — scoping a 0→1 build so the first release is real, load-bearing software rather than a throwaway prototype — and it is the core of how we run product engineering engagements.
The bottom line
Buy commodity capabilities. Build differentiating ones. Connect them through seams you control, and price both options over the horizon you will actually live with. The companies that get this wrong rarely fail at analysis — they fail at honesty about the hidden columns, and at architecture that would have kept their options open.
A decade of bespoke software development — alongside running our own products — has put us on both sides of this decision many times, including the times the right answer was a purchase order. If you are weighing a build, the most useful next step is an architecture-level conversation about your specific workflows, not a proposal.
Put this thinking to work on your roadmap.
Our Custom Software Development team ships exactly this kind of work. You will talk to a senior engineer within one business day.
Prefer email? support@evolvier.com