Context
CWI is a Brazilian software house. I worked on a retail client's platform team — decomposing a Java monolith into Spring Boot services as part of a broader modernization.
What I built
- 4 domain services (inventory, orders, notifications, reporting) as Spring Boot REST APIs
- Containerized with Docker, deployed on ECS with ALB routing
- SQS for async communication between services
- RDS PostgreSQL per service (shared-nothing data model)
Challenges
The monolith had implicit coupling everywhere. Moving data across service boundaries cleanly was the hard part — not the deployment. We used a strangler fig pattern: new services took over one domain at a time while the monolith still ran.
What I learned
Domain boundaries are everything. Services that share a database aren't really microservices — they're a distributed monolith. Getting the data ownership right before splitting the code saved us from rebuilding half of it later.