Case study 03 / Technology
Enterprise Cloud Modernization
An incremental path from a monolithic, data-center-hosted platform to containerized services on a governed multi-account cloud landing zone.
Illustrative reference architecture, not a client engagement. Outcomes described here are design goals, not measured results.
Reference flow
05 stages
01Challenge
Why this problem is hard.
01
Coupled releases
Every change ships with every other change. A defect in one module blocks the whole release train.
02
Shared database
Modules communicate through a single schema, so extracting anything risks breaking something else.
03
Hand-built environments
Servers are configured by hand, environments drift and recovery depends on individual knowledge.
04
Unattributed cost
Infrastructure cost is not attributed to products or teams, which makes trade-offs hard to discuss.
02Business context
Assumptions and constraints.
Constraints the design must respect
- 01No feature freeze
- Modernization runs alongside product work. Every step must be releasable on its own.
- 02Zero-downtime cutovers
- Traffic moves gradually, with a tested rollback at every step.
- 03Governance from day one
- Accounts, networks, identity and guardrails are defined in code before workloads arrive.
- 04Explicit data ownership
- During transition the monolith and new services share data. Each table has exactly one writer at a time.
03Architecture
Reference architecture.
Map domains, call paths, data ownership and change frequency to find seams. Areas with high change and low coupling are extracted first.
- Domain mapping
- Dependency analysis
- Change-frequency heatmap
- Seam identification
Concept architecture
01 / 06
Monolith assessment
Map domains, call paths, data ownership and change frequency to find seams. Areas with high change and low coupling are extracted first.
- Domain mapping
- Dependency analysis
- Change-frequency heatmap
- Seam identification
Key patterns
- Strangler fig facade
- Change data capture
- Transactional outbox
- Landing zone as code
04Technology
Representative technology.
01
04 items
Platform
- Managed Kubernetes
- Terraform
- GitOps controller
- Container registry with scanning
02
04 items
Integration
- API gateway
- Change data capture
- Event streaming
- Transactional outbox
03
04 items
Delivery
- CI/CD pipelines
- Feature flags
- Contract testing
- Progressive delivery
04
04 items
Operations
- OpenTelemetry
- SLO-based alerting
- Centralized logging
- Cost allocation
05Engineering approach
Principles behind the design.
- 01
Incremental, reversible steps
Every move, from a route to a table, has a rollback. Irreversible steps are scheduled deliberately and rehearsed.
- 02
Platform before services
Teams extract services onto a paved road instead of inventing deployment and operations for each one.
- 03
Data ownership drives sequencing
A service is extracted only when its data can be owned by it. Shared tables, not code, are the real constraint.
- 04
Measure before and after
Latency, error rates and cost are compared per route at each cutover, using the same telemetry.
06Implementation
A phased delivery path.
Delivery path
04 phases
- 01Assess & plan
- 02Foundation
- 03Extract & migrate
- 04Rehost the remainder
- Phase 0101
Assess & plan
Domain and data mapping, a target architecture and a sequenced backlog of extractions.
Deliverables
- Domain map
- Target architecture
- Extraction backlog
- Risk register
- Phase 0202
Foundation
Landing zone, CI/CD, observability and the strangler facade in front of the monolith, with no behavior change.
Deliverables
- Landing zone in code
- Pipelines and templates
- Facade in production
- Baseline SLOs
- Phase 0303
Extract & migrate
Move domains one at a time: new service, CDC sync, gradual traffic shift, then retire the legacy path.
Deliverables
- Extracted services
- CDC pipelines
- Cutover runbooks
- Retired legacy code
- Phase 0404
Rehost the remainder
Containerize what remains of the monolith on the platform, then decide case by case whether further extraction is worth it.
Deliverables
- Containerized monolith
- Data center exit plan
- Ownership model
- Cost reporting
07Intended outcomes
Design goals, not results.
Design goal 01Intended
Independent releases
Teams ship their services on their own schedule rather than waiting for a shared release train.
Design goal 02Intended
Reproducible environments
Infrastructure defined in code can be rebuilt, reviewed and audited like any other change.
Design goal 03Intended
Smaller blast radius
Gradual traffic shifting and rehearsed rollbacks limit the impact of any single step.
Design goal 04Intended
Visible cost and ownership
Every workload is attributable to a team and product, so cost trade-offs can be discussed explicitly.
No figures are attached to these goals. Actual results depend on the environment, data and delivery, and would be measured against baselines agreed at the start of a real engagement.
08Lessons & risks
Engineering lessons and risks to manage.
Risk 01
The database is the hard part
Code extraction is rarely the bottleneck. Untangling shared tables and reporting queries usually is.
Risk 02
Dual running costs money
Operating the data center and the cloud in parallel is expensive. Plan the exit sequence early.
Risk 03
Distribution adds failure modes
Network calls fail in ways in-process calls do not. Timeouts, retries and idempotency must be designed, not discovered.
Risk 04
Not everything should be a service
Some modules are better left in a well-run modular monolith. Extraction should follow business value.
Start an engineering conversation
Facing a similar engineering problem?
Bring us the problem and the constraints around it. We'll help architect the system.