Project Scenario: NovaTech Industries
NovaTech Industries is a mid-size industrial manufacturer ($450M revenue, 2,800 employees) producing precision components for aerospace and automotive sectors. They operate 4 manufacturing plants across 3 countries, have grown through acquisitions, and face digital competitors offering platform-based supply chain services.
Current Pain Points
- Fragmented Systems: 3 different ERPs from acquisitions (SAP, Oracle, legacy AS/400)
- Data Silos: No unified customer or product data across business units
- Manual Processes: 60% of inter-plant coordination done via email and spreadsheets
- Slow Innovation: 18-month average time-to-market for new product configurations
- Customer Pressure: Top 5 customers demanding real-time order visibility and API integration
Architecture Objectives
The board has approved a 3-year, $28M digital transformation program. Your task as Enterprise Architect is to design the blueprint that guides all technology investments. The architecture must achieve:
- Unified Operations: Single source of truth for orders, inventory, and production across all plants
- Customer Integration: API-first platform enabling customer self-service and real-time visibility
- Data-Driven Decisions: Analytics platform supporting demand forecasting and predictive maintenance
- Scalable Foundation: Cloud-native infrastructure that supports future M&A integration within 6 months
- Governed Innovation: Architecture governance that enables speed without sacrificing coherence
Business Capability Map
A business capability map is the foundation of enterprise architecture — it defines what the business does independent of how it's done. This creates a stable reference framework that outlasts any individual system or organizational restructure.
flowchart TB
subgraph Strategic["Strategic Capabilities"]
S1["Strategy &
Planning"]
S2["Innovation &
R&D"]
S3["M&A
Integration"]
end
subgraph Core["Core Value Chain"]
C1["Product
Engineering"]
C2["Supply Chain
Management"]
C3["Manufacturing
Operations"]
C4["Quality
Assurance"]
C5["Order
Fulfillment"]
C6["Customer
Management"]
end
subgraph Support["Support Capabilities"]
P1["Finance &
Accounting"]
P2["Human
Resources"]
P3["IT &
Digital"]
P4["Legal &
Compliance"]
end
Strategic --> Core
Core --> Support
style S1 fill:#132440,color:#fff
style S2 fill:#132440,color:#fff
style S3 fill:#132440,color:#fff
style C1 fill:#3B9797,color:#fff
style C2 fill:#3B9797,color:#fff
style C3 fill:#3B9797,color:#fff
style C4 fill:#3B9797,color:#fff
style C5 fill:#3B9797,color:#fff
style C6 fill:#3B9797,color:#fff
style P1 fill:#16476A,color:#fff
style P2 fill:#16476A,color:#fff
style P3 fill:#16476A,color:#fff
style P4 fill:#16476A,color:#fff
Capability Maturity Scoring
Each capability is scored on a 1-5 maturity scale. This quantifies where NovaTech needs the most investment and creates a heat map for prioritization:
import json
# NovaTech capability maturity assessment
# Scale: 1=Initial, 2=Developing, 3=Defined, 4=Managed, 5=Optimizing
capabilities = {
"Product Engineering": {
"current": 3, "target": 4,
"sub_capabilities": {
"CAD/CAM Design": 4,
"Product Lifecycle Mgmt": 2,
"Configuration Management": 2,
"Simulation & Testing": 3
}
},
"Supply Chain Management": {
"current": 2, "target": 4,
"sub_capabilities": {
"Demand Planning": 2,
"Procurement": 3,
"Supplier Management": 2,
"Logistics": 2
}
},
"Manufacturing Operations": {
"current": 3, "target": 5,
"sub_capabilities": {
"Production Planning": 3,
"Shop Floor Execution": 3,
"Predictive Maintenance": 1,
"Quality Control": 3
}
},
"Customer Management": {
"current": 2, "target": 4,
"sub_capabilities": {
"Order Management": 2,
"Customer Portal": 1,
"CRM": 2,
"Service & Support": 2
}
}
}
# Calculate investment priority score
print("=== CAPABILITY GAP ANALYSIS ===\n")
print(f"{'Capability':<28} {'Current':>8} {'Target':>8} {'Gap':>6} {'Priority':>10}")
print("-" * 66)
priorities = []
for name, data in capabilities.items():
gap = data["target"] - data["current"]
# Priority = gap * target (higher target = more strategic)
priority = gap * data["target"]
priorities.append((name, data["current"], data["target"], gap, priority))
priorities.sort(key=lambda x: x[4], reverse=True)
for name, current, target, gap, priority in priorities:
bar = "█" * current + "░" * (5 - current)
print(f"{name:<28} {bar} {current}/5 {target}/5 +{gap} {priority:>6}")
print(f"\n{'Total Investment Priority Score:':<40} {sum(p[4] for p in priorities)}")
Application Landscape
The application landscape maps systems to capabilities, revealing redundancies, gaps, and integration challenges. NovaTech's current landscape reflects its acquisition history — three overlapping ERP ecosystems with minimal integration.
flowchart TB
subgraph Channels["Digital Channels"]
CP["Customer Portal
(React SPA)"]
SP["Supplier Portal
(React SPA)"]
MA["Mobile Apps
(React Native)"]
end
subgraph Integration["Integration Layer"]
AG["API Gateway
(Kong)"]
EB["Event Bus
(Kafka)"]
IPaaS["iPaaS
(MuleSoft)"]
end
subgraph Services["Core Services"]
OMS["Order Management
(Microservice)"]
INV["Inventory Service
(Microservice)"]
MFG["Manufacturing
Execution (MES)"]
PLM["Product Lifecycle
(Windchill)"]
end
subgraph Data["Data Platform"]
DL["Data Lake
(Azure ADLS)"]
DW["Data Warehouse
(Snowflake)"]
RT["Real-time Analytics
(Databricks)"]
end
subgraph Legacy["Legacy (Sunset)"]
SAP["SAP ECC
(Plant 1-2)"]
ORA["Oracle EBS
(Plant 3)"]
AS4["AS/400
(Plant 4)"]
end
CP --> AG
SP --> AG
MA --> AG
AG --> OMS
AG --> INV
OMS --> EB
INV --> EB
EB --> MFG
EB --> DL
IPaaS --> SAP
IPaaS --> ORA
IPaaS --> AS4
IPaaS --> EB
DL --> DW
DW --> RT
style AG fill:#3B9797,color:#fff
style EB fill:#3B9797,color:#fff
style OMS fill:#16476A,color:#fff
style INV fill:#16476A,color:#fff
style DL fill:#132440,color:#fff
style DW fill:#132440,color:#fff
Target State Design Principles
- API-First: Every capability exposes APIs before building UIs
- Event-Driven: Systems communicate via events, not point-to-point calls
- Cloud-Native: New services deploy on Kubernetes; legacy wraps via adapters
- Data Mesh: Each domain owns its data products with federated governance
- Strangler Pattern: Legacy systems replaced incrementally, capability by capability
Data Architecture
NovaTech's data architecture must unify 3 ERPs, 14 operational databases, and 200+ spreadsheets into a coherent data estate. The design follows a data mesh pattern with domain ownership and federated governance.
Data Flow Design
flowchart LR
subgraph Sources["Operational Sources"]
ERP["ERP Systems"]
MES["MES / SCADA"]
CRM["CRM"]
IoT["IoT Sensors"]
end
subgraph Ingestion["Ingestion Layer"]
CDC["Change Data
Capture (Debezium)"]
STR["Stream Processor
(Kafka Streams)"]
BAT["Batch Loader
(Airflow)"]
end
subgraph Storage["Storage Layer"]
RAW["Raw Zone
(Bronze)"]
CUR["Curated Zone
(Silver)"]
CON["Consumption Zone
(Gold)"]
end
subgraph Serve["Serving Layer"]
API["Data APIs"]
DASH["Dashboards"]
ML["ML Models"]
end
ERP --> CDC
MES --> STR
CRM --> BAT
IoT --> STR
CDC --> RAW
STR --> RAW
BAT --> RAW
RAW --> CUR
CUR --> CON
CON --> API
CON --> DASH
CON --> ML
style CDC fill:#3B9797,color:#fff
style STR fill:#3B9797,color:#fff
style RAW fill:#132440,color:#fff
style CUR fill:#16476A,color:#fff
style CON fill:#3B9797,color:#fff
Technology Stack Selection
Technology decisions must be documented rigorously. We use Architecture Decision Records (ADRs) to capture the context, options considered, decision made, and consequences accepted for each significant choice.
Architecture Decision Record Template
# ADR-001: Event Streaming Platform Selection
# Status: Accepted
# Date: 2026-04-15
# Deciders: Enterprise Architecture Board
title: "Select Apache Kafka as Enterprise Event Streaming Platform"
context: |
NovaTech requires an event streaming platform to enable:
- Real-time integration between 4 manufacturing plants
- Event-driven communication replacing batch file transfers
- Change data capture from 3 legacy ERP systems
- IoT sensor data ingestion (50,000+ events/second peak)
Current state: Point-to-point SFTP transfers with 4-hour batch cycles.
Pain: 4-hour data latency causes inventory discrepancies and missed SLAs.
options_considered:
- name: "Apache Kafka (Confluent Cloud)"
pros:
- Industry standard for event streaming
- Managed service reduces operational burden
- Kafka Connect ecosystem for ERP/DB integration
- Proven at scale (millions of events/sec)
cons:
- Higher cost than alternatives for low volume
- Learning curve for development teams
- Schema registry adds complexity
- name: "Azure Event Hubs"
pros:
- Native Azure integration (NovaTech already on Azure)
- Lower operational overhead
- Kafka-compatible API available
cons:
- Kafka compatibility layer has limitations
- Vendor lock-in concerns
- Less mature connector ecosystem
- name: "RabbitMQ"
pros:
- Simpler mental model for developers
- Lower resource requirements
- Good for request/reply patterns
cons:
- Not designed for event streaming/replay
- Limited throughput at IoT scale
- No native log compaction
decision: "Apache Kafka via Confluent Cloud"
rationale: |
Kafka's log-based architecture uniquely supports NovaTech's requirements:
1. Event replay for reprocessing (critical during ERP migration)
2. IoT-scale throughput with horizontal scaling
3. Debezium CDC connectors for all 3 ERP databases
4. Schema Registry enforces data contracts across teams
The Confluent Cloud managed service mitigates operational risk
while the team builds Kafka expertise over 12 months.
consequences:
- Team training: 3-month Kafka bootcamp for 12 engineers
- Cost: ~$8,500/month for Confluent Cloud (3 clusters)
- Migration: 6-month parallel-run with existing SFTP feeds
- Risk: Kafka expertise concentration in small team initially
review_date: "2027-04-15"
Integration Strategy
Integration is where most enterprise architectures fail. NovaTech's strategy uses a three-tier integration model: API Gateway for synchronous external access, Event Bus for asynchronous internal communication, and iPaaS for legacy adapter patterns.
API-First Design
import json
from datetime import datetime
# NovaTech API Catalog - defining the integration surface
api_catalog = {
"Order Management": {
"base_path": "/api/v1/orders",
"owner": "Commerce Team",
"sla": "99.9% uptime, p95 < 200ms",
"endpoints": [
{"method": "POST", "path": "/", "desc": "Create new order"},
{"method": "GET", "path": "/{id}", "desc": "Get order status"},
{"method": "GET", "path": "/{id}/tracking", "desc": "Real-time tracking"},
{"method": "PUT", "path": "/{id}/cancel", "desc": "Cancel order"}
],
"events_published": [
"order.created", "order.confirmed",
"order.shipped", "order.delivered"
]
},
"Inventory": {
"base_path": "/api/v1/inventory",
"owner": "Supply Chain Team",
"sla": "99.95% uptime, p95 < 150ms",
"endpoints": [
{"method": "GET", "path": "/levels", "desc": "Current stock levels"},
{"method": "GET", "path": "/availability", "desc": "ATP check"},
{"method": "POST", "path": "/reserve", "desc": "Reserve inventory"},
{"method": "POST", "path": "/release", "desc": "Release reservation"}
],
"events_published": [
"inventory.low_stock", "inventory.replenished",
"inventory.reserved", "inventory.shipped"
]
},
"Manufacturing": {
"base_path": "/api/v1/production",
"owner": "Operations Team",
"sla": "99.5% uptime, p95 < 500ms",
"endpoints": [
{"method": "POST", "path": "/work-orders", "desc": "Create work order"},
{"method": "GET", "path": "/schedule", "desc": "Production schedule"},
{"method": "GET", "path": "/capacity", "desc": "Available capacity"},
{"method": "GET", "path": "/quality/{batch}", "desc": "Quality metrics"}
],
"events_published": [
"production.started", "production.completed",
"quality.inspection_passed", "quality.defect_detected"
]
}
}
# Generate integration surface summary
print("=== NOVATECH API INTEGRATION SURFACE ===\n")
total_endpoints = 0
total_events = 0
for domain, spec in api_catalog.items():
n_endpoints = len(spec["endpoints"])
n_events = len(spec["events_published"])
total_endpoints += n_endpoints
total_events += n_events
print(f"■ {domain} ({spec['owner']})")
print(f" Base: {spec['base_path']}")
print(f" SLA: {spec['sla']}")
print(f" Endpoints: {n_endpoints} | Events: {n_events}")
for ep in spec["endpoints"]:
print(f" {ep['method']:>6} {spec['base_path']}{ep['path']}")
print()
print(f"Total Integration Surface: {total_endpoints} endpoints, {total_events} event types")
print(f"Estimated API calls/day: ~2.4M (based on 4 plants, 500 orders/day)")
Governance Model
Architecture governance ensures that distributed teams make decisions aligned with the enterprise blueprint without creating bottlenecks. NovaTech uses a federated governance model — centralized principles with decentralized execution.
Architecture Review Board (ARB)
Decision Tiers
| Tier | Scope | Authority | Review Cadence |
|---|---|---|---|
| Tier 1 | Enterprise patterns, platform choices, security standards | Architecture Review Board | Monthly + ad-hoc |
| Tier 2 | Domain service design, API contracts, data models | Domain Architects | Sprint-aligned |
| Tier 3 | Implementation details, library choices, test patterns | Development Teams | Self-governed |
Conclusion & Deliverables
This capstone has walked through designing a complete enterprise architecture blueprint for NovaTech Industries. The key deliverables produced:
- Business Capability Map: 4 strategic, 6 core, and 4 support capabilities with maturity scores
- Application Landscape: Target state with API gateway, event bus, and strangler migration pattern
- Data Architecture: Medallion architecture (Bronze/Silver/Gold) with domain-owned data products
- Technology Stack: ADR-documented decisions for Kafka, Kubernetes, Snowflake, and MuleSoft
- Integration Strategy: 12 API endpoints and 12 event types across 3 core domains
- Governance Model: 3-tier decision authority balancing speed and coherence