Started with a turn-based game tutorial, then self-built Docker, WebSockets, and ECS Fargate integration—drawing from various sources and a Pason Tech Lead.
Initially diagrammed the GameServer flow, then restructured the system with a SearchServer as a matchmaking layer to connect players and redirect them to available GameServers.
This project exposed the limits of Error messages —debugging race conditions, ECS permissions, and Docker issues required much more hands-on problem solving with breakpoints, latency timers, CloudWatch, and manual testing.
The system architecture required rethinking early approaches. I first used a tick-rate scheduler for matchmaking but switched to an event-driven thread model after facing race conditions and high CPU usage.
The highlight was deploying a dynamic warm pooling system that cut matchmaking latency by 98% (20s → 0.4s). Its modular design decouples SearchServer from GameServer, enabling game logic changes without affecting matchmaking—showcasing scalable, maintainable architecture.