Pillar 2 Experience & Interface
architecture The "By Design" Architecture Framework // Pillar 2

Extensible by Design

Build architectures that absorb future business requirements and third-party integrations without requiring rewrites or breaking downstream consumers.

shield
Primary Failure Prevented: High-friction rewrites when business requirements change
help
Day 0 Review Question: Can new capabilities or schema fields be added without breaking consumers?
verified Core Architectural Tenet

Systems must absorb future business requirements, third-party integrations, and schema changes without requiring architectural refactoring or breaking downstream dependencies.

Strategic Intent: Decoupling Evolution from Destruction

Change is the only constant in enterprise systems. Markets evolve, regulatory standards mandate new data fields, and commercial partnerships demand unexpected third-party integrations. When an architecture is fragile, each change requires cascading updates across producers, consumers, data stores, and analytics pipelines.

Extensible by Design establishes an architectural covenant: systems must absorb structural evolution without breaking existing clients or demanding emergency refactorings.

Extensibility is not about speculative over-engineering or premature generic abstractions. It is about enforcing explicit interface boundaries, backward-compatible evolutionary mechanics, and contract-first isolation so that change remains an incremental operational routine rather than a terrifying release event.


The Three Architectural Heuristics

1. Contract-First Boundaries

Systems that share internal database schemas or rely on undocumented JSON payloads inevitably form brittle distributed monoliths. Extensibility requires rigid contract discipline:

  • Explicit Machine-Readable Specifications: Every integration point—whether synchronous HTTP/REST, asynchronous message queues, or high-throughput RPC—must be defined by an unambiguous, version-controlled schema (OpenAPI 3.1, gRPC/Protocol Buffers, Avro, or AsyncAPI).
  • Consumer-Driven Contract Testing: Validate schemas before code reaches production using contract testing frameworks (e.g., Pact). Ensure that changes made by service producers do not violate consumer expectations.
  • Bounded Contexts (DDD): Strictly encapsulate internal domain models behind public contract facades. Internal entity changes (such as database column renames) must never bleed into downstream client contracts.

2. Additive Evolution & Semantic Discipline

Breaking changes represent an architectural failure to design for evolution:

  • Strict Semantic Versioning (SemVer): Enforce SemVer across all exposed APIs, client SDKs, and event schemas. Patch versions fix bugs; minor versions introduce non-breaking additive features; major versions signal breaking changes.
  • Additive Changes by Default: All schema evolutions must be strictly additive. New properties, optional parameters, and non-mandatory fields can be introduced without breaking existing consumers that adhere to Postel’s Law (be conservative in what you send, liberal in what you accept).
  • Deprecation Lifecycles & Dual-Run Windows: When breaking alterations are unavoidable, implement a formalized deprecation lifecycle. Maintain parallel schema versions through routing layers or dual-run publishers with transparent sun-setting timelines and usage metric tracking.

3. Decoupled Composition & Event Meshes

Tightly coupled architectures freeze when one component requires modification. Compositional decoupling allows boundaries to flex independently:

  • Presentation and Backend Separation: Separate presentation surfaces from core business orchestrations using patterns like Backend-for-Frontend (BFF) or headless API architectures. User interface changes must never dictate database design.
  • Event-Driven Choreography: Shift from deeply nested synchronous request/response chains to asynchronous event-driven choreography (using Azure Event Grid, Apache Kafka, or Cloud Pub/Sub). Producers publish domain events without knowing or caring how many downstream consumers will react.
  • Pluggable Extension Points: Architect core workflows with explicit extension hooks (plugins, webhooks, or middleware pipelines) that permit third-party integration without modifying core codebase binaries.

Anti-Patterns to Reject at Day 0

Anti-PatternManifestationArchitectural Consequence
Shared Database IntegrationsMultiple services reading and writing directly to the same database tables.Any schema change breaks multiple teams; zero independent deployments possible.
Silent Schema AlterationsRenaming or removing JSON payload fields without bumping API versions.Downstream consumer deserialization crashes and silent data corruption.
God-Object ContractsPassing complete domain entities containing 80+ fields across API boundaries.Tightly couples consumers to internal implementation details and leaks sensitive data.
Synchronous Integration ChainsService A calls Service B, which synchronously calls Services C, D, and E to fulfill a request.Extensibility drops to zero; latency compounds and system availability equals the product of all downstream nodes.

Day 2 Operational Reality

Designing for extensibility pays immense dividends as platforms scale:

  • Frictionless Onboarding of Partners: External vendors and partners integrate via versioned contracts and webhooks without demanding custom engineering sprints from internal platform teams.
  • Independent Team Cadence: Multiple engineering squads deploy updates daily without coordinating multi-team release windows or synchronised database migrations.
  • Auditability and Lineage: Explicit event schemas provide a permanent record of domain events, making historical replay and compliance audits straightforward.

Architecture Review Checklist

Before signing off on an integration design, the Review Board must ask:

  1. Is every API and event payload governed by a strongly typed, machine-readable schema in version control?
  2. Does the proposed schema change introduce any non-backward-compatible modifications (e.g. required new fields, deleted attributes, changed data types)?
  3. If this service needs to integrate with three new downstream consumers next quarter, can they subscribe without code modifications to the producer?
  4. Are public contracts decoupled from internal persistence storage models?
Architecture Review Consultation

Review Your Workloads Against Extensible by Design

Identify latency bottlenecks, security drift, or cost traps in your system before they impact production.