Reuse Over Custom Code: Why Solution Architects Must Break the Developer Mindset

A solution architect at a mid-sized fintech startup was wrapping up a Friday afternoon sprint planning session when a developer pitched an exciting idea: "We could build a custom notification service in about three sprints. I’ve already sketched out the microservice architecture." The architect paused, coffee cup halfway to their lips, recognizing a pattern they’d seen countless times before. The developer’s eyes gleamed with the prospect of greenfield development, completely overlooking the three notification platforms already humming away in their infrastructure, not to mention the dozen battle-tested commercial solutions that could be deployed by Monday.
This scenario plays out in conference rooms worldwide, and it reveals one of the most expensive blind spots in software architecture: the reflexive leap to custom development. For architects who climbed the ladder from senior developer roles, this tendency runs deep. After all, they spent years being rewarded for solving problems with code. But here’s the uncomfortable truth: every line of custom code you write is a liability you’ll maintain forever, or at least until your next architectural review forces a reckoning.
The Real Cost of "We Can Build That"
The urge to build from scratch is rooted in legitimate developer instincts: control, learning, and the satisfaction of crafting something new. But what works for a developer optimizing a single component becomes dangerous when scaled to enterprise architecture decisions. The TOGAF framework’s Opportunities and Solutions phase exists precisely to prevent this costly reflex.
Consider the total cost of ownership. When a developer estimates "three sprints," they’re calculating initial development time. They’re not accounting for the ongoing security patches, the compliance audits, the documentation, the knowledge transfer when team members leave, the performance optimization cycles, or the inevitable feature requests that turn your "simple" notification service into a full-time maintenance burden. A commercial solution amortizes these costs across thousands of customers. Your custom build? That’s all on you.
Think of It Like Furnishing an Apartment
Imagine you’re moving into a new apartment. You need furniture, appliances, and basic utilities. The "build from scratch" approach would be like deciding to forge your own refrigerator from raw materials because you want it to fit perfectly in your kitchen nook. Sure, you’d get exactly what you want, but you’d also need to become an expert in thermodynamics, electrical engineering, and manufacturing. Meanwhile, any appliance store has a perfectly serviceable fridge that’ll be delivered tomorrow.
The "Reuse before Buy, Buy before Build" principle operates on the same logic. Your organization likely already has systems that solve 80% of your problem. Reusing them means adapting your requirements slightly, but you get instant deployment, proven reliability, and zero additional maintenance burden. If nothing internal fits, commercial solutions represent collective wisdom from thousands of implementations. Building from scratch should be your last resort, reserved for true competitive differentiators where custom code provides measurable business advantage.
It’s about being strategic with your organization’s most precious resource: engineering capacity. Every hour spent building commodity functionality is an hour not spent on features that actually differentiate your business.
The Three-Tier Decision Framework
The framework is straightforward: before committing to any new capability, work through three tiers in order. Only move to the next tier when the current one genuinely cannot meet your needs. Each tier represents a step-change in cost, risk, and long-term maintenance burden. So, the earlier you stop, the better.
Tier 1: Reuse Existing Internal Systems
Start by conducting an honest inventory of what you already have. This sounds obvious, but in organizations with multiple teams or acquired companies, you’d be surprised how often teams build duplicate capabilities because they don’t know what exists.
Discovery checklist:
- Review your enterprise architecture repository (if you have one)
- Interview architects from other business units
- Check your API gateway or service mesh for existing services
- Examine your cloud resource inventory
- Ask your infrastructure team what’s already deployed
Create a capability matrix comparing your requirements against existing systems:
| Requirement | Existing System A | Existing System B | Gap |
|---|---|---|---|
| Real-time notifications | Yes | No | None |
| Email delivery | Yes | Yes | None |
| SMS support | No | Yes | None |
| Webhook callbacks | Partial | No | Custom needed |
| Multi-tenancy | Yes | No | None |
The 80/20 rule applies here: If an existing system covers 80% of your needs, seriously consider adapting your requirements rather than building new. The friction of working within constraints is usually cheaper than the freedom of custom development.
Warning signs you’re forcing reuse:
- You need to fundamentally alter the existing system’s core purpose
- The technical debt of adapting exceeds building new
- Compliance or security requirements create irreconcilable conflicts
- Performance characteristics differ by orders of magnitude
Tier 2: Buy Commercial or Adopt Open Source
When internal reuse isn’t viable, evaluate external solutions. This is where architects from developer backgrounds often stumble. They focus on technical fit while underweighting operational maturity.
Evaluate external solutions across these key dimensions:
Functional Fit (30% weight)
- Does it meet core requirements?
- How much customization is needed?
- Can it scale to your projected load?
Operational Maturity (40% weight)
- What’s the vendor’s track record?
- How active is the open-source community?
- What does the support model look like?
- How frequently are security patches released?
- What’s the upgrade path?
Integration Complexity (20% weight)
- Does it support your authentication model?
- Can it integrate with your observability stack?
- What’s the API quality?
- Does it fit your deployment model (cloud, on-prem, hybrid)?
Total Cost of Ownership (10% weight)
- Licensing costs
- Infrastructure requirements
- Training and onboarding
- Migration effort
Notice that functional fit is only 30%. This trips up developer-minded architects who optimize for technical elegance over operational reality. A solution that’s 85% functionally perfect but comes from a vendor with 24/7 support and quarterly security updates beats a 95% fit from a startup with three engineers.
For open-source solutions, ask these hard questions:
- When was the last commit?
- How many active contributors exist?
- What’s the issue resolution time?
- Are there commercial support options?
- What’s the governance model?
Consider creating a scorecard:
| Solution | Functional | Operational | Integration | TCO | Total |
|---|---|---|---|---|---|
| Vendor A | 85 | 95 | 70 | 80 | 85.5 |
| OSS Option B | 95 | 60 | 85 | 95 | 80.0 |
| Vendor C | 75 | 90 | 90 | 70 | 82.5 |
Tier 3: Build Custom (The Last Resort)
Building from scratch should trigger a formal justification process. Require a written business case that addresses:
Strategic Necessity:
- Is this capability a competitive differentiator?
- Does it embody proprietary business logic?
- Will it provide measurable business advantage?
Market Gap:
- Why can’t existing solutions be adapted?
- What specific requirements are unmet?
- Have you validated these requirements with actual users?
Organizational Capability:
- Do you have the expertise to build and maintain this?
- Can you commit to long-term ownership?
- What happens when key developers leave?
Economic Justification:
- What’s the 5-year TCO compared to commercial options?
- What’s the opportunity cost of diverting engineering resources?
- How will you measure ROI?
The Mind Shift: From Craftsman to Curator
For architects with developer backgrounds, this principle requires a fundamental identity shift. You’re no longer primarily a code craftsman. You’re a capability curator, an economic optimizer, and a risk manager.
Old developer thinking: "I can build a better version of this."
New architect thinking: "Should we invest our limited engineering capacity here, or focus on capabilities that differentiate our business?"
Old developer thinking: "This vendor solution is bloated with features we don’t need."
New architect thinking: "Those ’extra’ features represent edge cases we haven’t encountered yet, and someone else maintains them."
Old developer thinking: "We’ll have complete control if we build it."
New architect thinking: "We’ll have complete responsibility for maintenance, security, compliance, and evolution."
This shift is uncomfortable because it means admitting that your coding skills, while valuable, aren’t always the right tool. It means advocating for solutions that feel less elegant but are more pragmatic. It means sometimes being the person who says "no" to an exciting technical challenge.
Practical exercises to internalize this mindset:
- The Maintenance Meditation: For every custom build proposal, calculate the 5-year maintenance burden in engineer-hours. Make it visible.
- The Opportunity Cost Exercise: List what your team could build instead if they weren’t maintaining this custom solution. Make leadership choose.
- The Failure Mode Analysis: Document what happens when the primary developer leaves. Who owns it then?
- The Vendor Comparison: For every "we should build this" proposal, require researching at least three commercial alternatives first.
Putting It Into Practice
Here’s how to operationalize this principle in your architecture practice:
1. Establish a Decision Gate Process
Create a formal review for any new capability. Before any code is written:
- Document the business need
- Inventory internal capabilities
- Research commercial and open-source options
- Justify the chosen approach
- Get sign-off from architecture review board
2. Build a Capability Catalog
Maintain a living document of your organization’s existing systems and their capabilities. Update it quarterly. Make it searchable. Include:
- System name and purpose
- Owning team
- Key capabilities
- API documentation links
- Current usage metrics
- Support model
3. Create Vendor Evaluation Templates
Standardize how you assess commercial solutions. Include:
- Functional requirements checklist
- Operational maturity scorecard
- Integration assessment
- TCO calculator
- Reference check questions
4. Implement a "Build Justification" Template
Require written justification for custom development that addresses:
- Why reuse isn’t viable
- Why buy isn’t viable
- Strategic value of custom build
- Long-term ownership plan
- Economic analysis
5. Measure and Learn
Track outcomes:
- Time-to-market for reuse vs. buy vs. build
- Maintenance burden (hours/month)
- Defect rates
- Security incidents
- Team satisfaction
Review these metrics quarterly and adjust your decision framework.
The Bottom Line
Embrace the following principles to guide your architectural decisions:
- Reuse aggressively. Your existing systems represent sunk costs and proven reliability. Adapt requirements before building new.
- Buy strategically. Commercial solutions amortize costs and risks across many customers. You’re unlikely to out-engineer specialized vendors.
- Build reluctantly. Custom code is a long-term liability. Reserve it for true competitive differentiators.
- Shift your identity. You’re no longer a code craftsman first. You’re a curator of capabilities and an economic optimizer.
What custom systems are you maintaining today that could have been commercial solutions? What’s the actual cost of that "freedom"? If you could reclaim those engineering hours, what would you build instead? And most importantly: are you making architecture decisions based on what’s best for the business, or what’s most interesting to build?
The next time someone proposes a custom build, pause with that coffee cup halfway to your lips. Ask the hard questions. Run the numbers. Check what already exists. Your future self, drowning in maintenance tickets, will thank you.
Share this article
Enjoyed this article?
Subscribe to get more insights delivered to your inbox monthly
Subscribe to Newsletter