Futureproofing for MCP, A2A collaboration, and the next 24 months of change
Introduction
I’ll admit it, 18 months ago, if you asked me to design a scalable framework I would have struggled, not because I didn’t in theory understand “make it reusable so other developers can build on it”, but because I hadn’t failed enough to really identify what actually matters.
What follows is a crash course in the reality of brittle POCs, duplicated code & unstable “clever” abstractions. Don’t get me wrong, most of these problems are by my own doing and if there is one takeaway from this blog, it’s KISS.
Keep. It. Simple. Stupid.
What I've learnt.
As we mature, so did the expectations around us. What started off as a scrappy local solution which became a single-environment nightmare. It wasn’t okay, it didn’t meet basic engineering hygiene: no clean separation of concerns, poor observability and zero confidence when changing things under pressure. Growth forced a decision: keep patching or refactor. We chose the refactor.
What you need to consider (without over-engineering it)
Stability boundaries
Define the parts that should almost never change: core request/response contracts, how you surface services, how you raise errors. Everything else can flex.
Questions to ask:
- Can I swap a model or provider without rewriting?
- Does every integration use a shared set of metrics to monitor system health?
- Is there a way for the tools to self-describe?
Capability over Implementation
Focus on what systems can do, not which SDK or library they use. This way, you'll be ready to connect with new technologies later, like MCP or A2A.
Think of capabilities as a list of what’s possible:
- Supported operations (read, write, search)
- Response latency characteristics
- Limits or quota rules
You don’t need a full swarm negotiation system yet—just avoid hard-coding everything so design stays flexible.
Context as a cornerstone
Inputs to models are not a black box, they have a source, transformation and expiration date. Treat context like a supply chain: source → transform → embed → compress → consume. Inputs have provenance and expiry. Even if you start with just a few tags (source + timestamp) you create a slot for future provenance and compliance, which all builds trust in your system.
Multi-Agent implementation
Don’t jump on the hype train just because it’s fashionable. Start with a single orchestrator but design your building blocks so you can later split roles (retrieval vs validation vs domain logic). The goal, when specific agents become required, is not to rip everything up, you just add more roles.
Observability as standard
If metrics are an afterthought, you’ll be lost forever. Bake in tracing, timing, costing (tokens, payload size), model identification and correlation IDs into the core contract early. You don’t need the next best dashboard ever, just structured insights of what’s going on.
Environments
A single environment feels light weight and fast, until it isn’t. Introduce lightweight environment separation before you need it. Use it to trial that new shiny technology that might and WILL break EVERYTHING. Don’t over complicate, 3 lanes is plenty.
Governance without the red tape
You don’t need a compliance committee, you need cheap guardrails, I also don’t want to be approving PRs past my bedtime. Set those policies up now and save yourself time down the road, you need everyone to buy into the plan from doors open. So don’t create massive amounts of red tape.
Fail fast, don’t get stuck
Measure how long it takes to:
- Add a service
- Swap a provider
- Introduce a new agent
if any of this feels like you're writing a kernel from scratch, you need to rethink.
Don’t do everything
Futureproofing isn’t pre-building everything. Put off what you can:
- Full protocol negotiation logic (until standards stabilise)
- Dynamic routing
- Full lineage graphs
The next 24 months reality check
Protocols like MCP & A2A, agent ecosystems, price/performance, compliance traceability, will harden. You don’t need to predict their final evolution; you just need surfaces flexible enough to host them when they arrive. Choosing that approach is the most "futureproof" move you can make
Resilience isn’t built by guessing the future; it’s built by making intentional places for it to plug in later. If you keep the seams boring and the contracts explicit, you can absorb more change than teams chasing elegance at the wrong layer. Futureproofing is mostly restraint.
Topics Covered :
Author
Christopher Durow