The problem
Starting from nothing but an idea, 1FIT was ambitious from the get-go, wanting to see itself as a recognisable brand within the industry as soon as possible. The plan required constant feature releases with minimal disruption, and with an exponential growing user-base, it was vital that our code and infrastructure would be able to keep up with demand.
Decisions that mattered
Containerise everything
All our applications were containerised with Docker and orchestrated with ECS, ensuring they followed the 12-Factor principles to keep it running smoothly. CI/CD pipelines were created to own build, test and release, allowing hotfixes to be live in minute, before users could even spot an issue. Deployment time fell 80% and deployment stopped being an event.
Event-driven services designed for growth
An ever growing user-base with peak periods throughout the day required horizontal scaling to meet the increased demands and higher volume of data. Code changes could be deployed without affecting the core system.
Build for independent, frequent releases
Moved away from large, infrequent releases towards smaller, incremental deployments. This reduced the potential damage surface and allowed new features and fixes to reach users quickly without requiring the whole system to be released at once.
Observe everything, hide nothing
Implementing observability tools such as Sentry and Cloudwatch alarms allowed us to monitor any unexpected behaviour, deploying patches before the user even notices there is a problem.
Reversible deployments
Mechanisms were introduced such as feature flags, staged rollouts, and fast rollback procedures. Any problematic releases could be disabled or reverted without taking the entire application offline.
The outcome
A platform that scales with its ever growing user-base and a constant stream of new features to keep everyone happy and engaged, resulting in 1Fit quickly growing into a recognisable brand within the industry, one which is able to compete with the market leaders and cash cows.
