Portfolio
Microservices Migration
EdTech / E-Learning
3x
Performance improvement
60%
Reduced memory usage
0
Downtime during migration
Overview
CloudAcademy needed to migrate their content authorization service from Kotlin to Go as part of a broader standardization effort. I led this migration while ensuring zero downtime and creating new microservices following DDD patterns.
Business Context
CloudAcademy is a leading e-learning platform for cloud technology training. Their content authorization service, originally written in Kotlin, had become a bottleneck. The service was responsible for determining which content each user could access based on their subscription, role, and organization. With millions of daily authorization checks, performance was critical. The team had standardized on Go for new services and wanted consistency.
Challenge
Legacy Kotlin service had performance bottlenecks and was difficult to maintain. Team needed to standardize on Go for better consistency across microservices.
- Kotlin service with complex business logic and high traffic
- Need for zero-downtime migration
- Team unfamiliar with Go best practices
Solution
We executed a careful migration using strangler fig pattern, gradually routing traffic to the new Go service while maintaining full backward compatibility.
- Migrated content authorization microservice from Kotlin to Go
- Created new Go microservices following DDD patterns
- Built Python dev-ex tool to orchestrate local containers
Approach & Methodology
We used the strangler fig pattern to gradually migrate traffic from Kotlin to Go. First, we built thorough integration tests against the existing Kotlin service to establish a behavioral contract. Then we implemented the Go version, running both services in parallel and comparing outputs for 2 weeks. Traffic was shifted gradually: 1% → 5% → 25% → 50% → 100%, with automated rollback triggers if error rates increased.
Implementation Details
Strangler Fig Migration
Implemented gradual traffic shifting using feature flags and A/B testing to validate the new Go service before full cutover. Maintained dual-write capability during transition.
Developer Experience Tooling
Built a Python CLI tool to orchestrate local development environments, making it easy for developers to run the entire microservices stack locally with Docker Compose.
Key Decisions
- Chose strangler fig over big-bang rewrite to minimize risk and enable continuous delivery throughout migration
- Built comparison tooling to verify identical behavior between old and new services before any traffic shift
- Invested in a Python dev-ex CLI tool to simplify local development across 20+ microservices
Tech Stack
Related Services
The following services were utilized in this project to deliver successful outcomes.
Lessons Learned
- Having comprehensive integration tests before migration is non-negotiable - they caught 3 edge cases our unit tests missed
- Go's simplicity and explicit error handling made the new codebase significantly easier to maintain than the Kotlin version
- Developer experience tooling has outsized ROI - the CLI tool we built is now used by the entire engineering team
Project Information
Timeline
3 months for migration, 2 months follow-up
Team
2 developers (I led the migration)
Results
3x
Performance improvement
60%
Reduced memory usage
0
Downtime during migration
Have a Similar Challenge?
Let's discuss how I can help your project succeed with proven architecture and AI solutions.