loader

Design Considerations for your AI Framework

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.

author profile

Author

Christopher Durow