
Yuka : Une montée de version saine et équilibrée sur Symfony
Yuka, start-up en hyper croissance de la Tech for Good, est passée de Symfony 4 à 7 avec l'aide de SensioLabs pour améliorer les fonctionnalités de son application et réduire sa dette technique. Découvrez la success story de Yuka sur Symfony.

Yuka, en quelques mots
Yuka est une application mobile, disponible sur iOS et Android, qui permet aux consommateurs de décrypter les étiquettes des produits alimentaires et cosmétiques afin de faire les meilleurs choix pour leur santé et pour l'environnement. En un seul scan, le consommateur a accès à une évaluation rapide et facile via un code couleur allant du vert au rouge. Une fiche d'information détaillée permet également de comprendre la notation du produit et les critères (valeurs nutritives, additifs, etc.) pris en compte. C’est une application collaborative : l’utilisateur est invité à nourrir la base avec des produits inconnus.
Yuka collecte les informations de plus de 5 millions de produits. C’est une application gratuite disponible en France et dans 12 pays différents, principalement situés en Europe et en Amérique du Nord. L’application compte plus de 68 millions d’utilisateurs dans le monde et plus de 70 produits sont scannés chaque seconde par Yuka. Entreprise phare de la Tech for Good et start-up en hyper croissance, Yuka aide les consommateurs à faire de meilleurs choix pour leur santé et pour la planète.
Les challenges
Malgré l’ampleur de sa mission, Yuka ne compte qu’une équipe limitée pour gérer au quotidien et améliorer un si vaste projet avec autant de produits et de langues disponibles. L’équipe technique compte 5 membres, y compris 2 des cofondateurs. Et elle assume l’entière responsabilité du fonctionnement technique de l’application
Depuis sa création, Yuka utilise Symfony pour gérer sa base de données et le back-end avec une interface d’administration EasyAdmin et une API custom. L’application mobile visible des utilisateurs, disponible sur iOS et Android, se connecte directement à l’application Symfony.
Yuka était restée sur la version 4 de Symfony et sur EasyAdmin 1, sans avoir évolué depuis. Or, ces versions n’étaient plus à jour. L’application de Yuka ne bénéficiait donc plus des nouvelles fonctionnalités développées par Symfony et les nouveaux bugs détectés n’étaient plus corrigés dans cette version. L’utilisation d’EasyAdmin 1 par Yuka représentait un véritable défi pour la montée de version. En effet, il fallait faire évoluer EasyAdmin en coordination avec Symfony. La dette technique s’accumulait et les risques liés à la sécurité augmentaient.
Pour suivre les bonnes pratiques de Symfony, l’idée d’une montée de version s’est rapidement imposée.
L’équipe technique de Yuka n’était pas assez nombreuse pour mener de front une montée de version sur le long terme et continuer à améliorer l’application au jour le jour. Yuka a donc eu besoin du soutien d’experts de Symfony pour travailler sur le montée de version. L’équipe technique de Yuka poursuivait le développement de l’application mobile en parallèle.
L'histoire
Yuka a entrepris une refonte significative de ses pratiques de développement en s’appuyant sur la puissance et la flexibilité des nouvelles versions de Symfony. Initialement basée sur Symfony 4 avec EasyAdmin 1, Yuka a progressivement mis à niveau son application vers les versions 5, 6, puis 7, tout en passant EasyAdmin à la version 4. Cette montée de version, c'est aussi le passage de PHP 7.4 à 8.3, ainsi qu'une mise à jour de Doctrine de 2 à 3. Grâce à son expertise éprouvée, SensioLabs a orchestré et réalisé ces montées de version, garantissant leur déroulement dans le bon ordre et en conformité avec les bonnes pratiques.
Le passage à des versions plus récentes de Symfony et EasyAdmin a nécessité une refactorisation approfondie du code, notamment en raison de l'évolution des standards et de la nécessité d'adapter la personnalisation d’EasyAdmin. En parallèle de la montée de version, plusieurs actions ont été menées :
Mise en place d’une chaîne d’intégration continue (CI) qui n'existait pas auparavant.
Uniformisation des pratiques avec PHPStan, Rector et PHP CS Fixer.
Renforcement de la couverture de tests.
Des revues de code régulières et des tests de non-régression ont été mis en place pour garantir que le code de l’application reste performant et de bonne qualité sur le long terme.
La montée de version a enfin été l’occasion de contribuer à l’open source, dans une logique très stimulante de partage avec la communauté. Les contributions open source ont porté sur des bundles tiers, tels que NzoUrlEncryptorBundle, kreait/firebase-bundle et algolia/search-bundle, ainsi que sur EasyAdminBundle. Grâce à ces améliorations, la dette technique a été réduite et des fonctionnalités essentielles à la montée de version ont été ajoutées.
Les résultats
Yuka bénéficie de l’innovation de Symfony 7 pour plusieurs années.
Grâce à la montée de version, pas besoin de réécrire tout le code pour se mettre à jour. Yuka a donné un coup de jeune à sa base de code pour l’adapter aux nouveautés de Symfony et de PHP. Et avec la logique de backward compatibility de Symfony, l’application devrait bientôt passer sur Symfony 7.4, la version Long-Term Support, maintenue jusqu’à fin 2028.
La dette technique est réduite.
Grâce à la montée de version et aux refactorisations du code, Yuka a considérablement réduit sa dette technique. Pour François Martin, cofondateur et CTO de Yuka, il était primordial de “ne pas rester coincés sur une version vieillissante”. Avec Symfony 7, la maintenance du back-end est simplifiée, les patchs de sécurité sont à jour et il est plus facile de recruter des développeurs sur les versions récentes du framework.
La performance de Yuka est optimisée.
En parallèle de la montée de version, la refactorisation du code a permis de mettre en cache de nombreuses requêtes. Le nombre de requêtes Algolia nécessaires pour effectuer des recherches sur des millions de produits a ainsi pu être diminué.