Build vs Buy: A Decision Framework for Technical Leads
A practitioner's framing for deciding when to build, when to buy, and when reversing a vendor choice will cost more than the feature itself.
General lesson
Build-versus-buy is not a price comparison. It is a question about control, learning, differentiation, and reversibility. Cheap software becomes expensive when it captures a strategic workflow you need to evolve. Custom code becomes expensive when it recreates a solved commodity problem.
The right answer depends on where product knowledge compounds. Own the parts where your data, workflow, trust, or judgment improves over time. Rent the parts where the market is already better than you will be.
The control surface test
For each capability, ask what must remain under your control: data model, user experience, business rules, compliance evidence, latency, cost envelope, migration path, and failure handling. A vendor can provide the engine while you still own the product semantics.
A common good architecture is not pure build or pure buy. It is commodity provider plus owned domain layer. Payments are bought; billing entitlement rules are owned. Authentication is bought; permission semantics are owned. Messaging infrastructure is bought; escalation logic is owned.
Project example
InvoiceHub, Prospr, and CareFlow show different control surfaces. InvoiceHub should not rebuild banking primitives casually, Prospr should own career-workflow semantics, and CareFlow should treat communication reliability and auditability as product trust. Public project context: portfolio projects.
The useful decision is not whether a vendor exists. Vendors always exist. The decision is whether using one makes the product smarter over time or freezes the workflow at the vendor's abstraction level.
Scoring the decision
I score capabilities on five dimensions: differentiation, data compounding, operational risk, reversibility, and team competence. A high differentiation/high data-compounding capability leans build. A low differentiation/high operational-risk capability leans buy.
Reversibility is the underrated variable. A vendor choice is safer when the product owns canonical state and can migrate. A build choice is safer when the team can operate the system without heroics.
Implementation pattern
Create an architecture decision record with: capability, user promise, commodity layer, owned semantic layer, vendor escape path, failure mode, and review date. Revisit the decision when volume, regulation, or strategic value changes.
The rule of thumb: buy engines, own contracts. Buy infrastructure, own product meaning. Buy speed only when you are not selling the very capability you are outsourcing.
Concrete diagnostic
A technical lead can pressure-test the decision with an ownership matrix. For each capability, mark who owns canonical data, business rules, user-facing failure, audit log, migration path, cost envelope, and support response. If a vendor owns too many product semantics, buying may freeze differentiation. If the team owns too much commodity infrastructure, building may drain focus.
InvoiceHub should likely buy regulated payment and banking primitives while owning invoice semantics and reconciliation policy. Prospr should likely own career-workflow state while buying commodity messaging or authentication. CareFlow should be conservative around communication audit and retry state because trust and reliability are part of the product promise.
What changes in practice
The technical lead stops defending a preference and starts exposing the control surface. The decision record should show which state is canonical, which business rules are owned internally, which API can be swapped, which failure events are observable, and which cost metric triggers review.
A team can apply this tomorrow by drawing one capability as two layers: commodity engine and owned semantic contract. If those layers cannot be separated, the team is either outsourcing product meaning or rebuilding infrastructure without a reason. The best build-versus-buy decision usually makes the boundary explicit enough to change later.
Keep reading
Related product architecture notes
Technical Product Leadership
How to Triage Technical Debt Without Stalling the Roadmap
A practitioner's method for deciding which technical debt to pay down now, which to leave, and how to fund the work without a freeze.
Read nextTechnical Product Leadership
Why Architecture Documentation Should Be an Operational Control Surface
Useful architecture documentation answers live operating questions: where state lives, how releases move, what breaks first, and who owns recovery.
Read nextTechnical Product Leadership
How to Make Architecture Decisions Without Slowing Delivery
A practical decision-log method for resolving architecture choices quickly, preserving the reasoning, and reopening them only when the assumptions change.
Read next