Symfony 5.4 to 8 production migration
Full migration of a gym management platform (MasMusculo/MMfit, Osunasport S.L.) across four major Symfony versions, on an almost legacy codebase, without interrupting the live service.
Context
MasMusculo/MMfit is Osunasport's gym management platform, used daily in production by real gyms. It was built on Symfony 5.4, a version that was approaching end of support, on top of a codebase with years of accumulated shortcuts.
Scope
Four major Symfony versions in a row (5.4 → 6 → 7 → 8), each with its own deprecations, removed components and new conventions, tackled as a single developer while the platform kept serving customers.
Approach
- Upgrading one major version at a time instead of jumping straight to 8, so each step stayed small enough to verify.
- Fixing deprecations surfaced by Symfony's own deprecation log before bumping the next major version, instead of discovering them in production.
- Relying on regression tests and manual smoke tests on the critical gym-management flows before each deploy, since the legacy codebase had patchy automated coverage to begin with.
Result
The platform now runs on Symfony 8 with zero downtime during the whole process and no feature regressions reported by gyms using it daily.