Case Study: Scansionare per la qualità: come Yuka alimenta scelte sane su scala globale con Symfony (Symfony Blog)
Yuka è un leader globale nella trasparenza sanitaria e ambientale. Disponibile su iOS e Android, la sua applicazione mobile aiuta oltre 68 milioni di consumatori in tutto il mondo a decifrare istantaneamente le etichette degli alimenti e dei cosmetici. Con un team tecnico snello di appena cinque persone, tra cui due co-fondatori, Yuka gestisce un enorme database di oltre 5 milioni di prodotti, sostenendo un carico di traffico intenso di più di 70 scansioni di prodotti ogni singolo secondo. Per scalare questa realtà Tech for Good senza gonfiare i costi di ingegnerizzazione, Yuka si affida a Symfony come fondamento del proprio back-end.
La dieta ad alta crescita: 70 scansioni al secondo su un back-end snello
Operando a livello globale in 13 paesi, l'app mobile di Yuka funge da client diretto per il consumatore, che comunica in modo nativo con un'API Symfony personalizzata. L'applicazione restituisce un semplice rating codificato a colori (dal verde al rosso) insieme a valutazioni nutrizionali approfondite, istantaneamente al momento della scansione del codice a barre.
Quando la tua applicazione gestisce 70 cicli di richiesta al secondo, qualsiasi latenza nell'hydration dei dati o nell'esecuzione del controller si ripercuote sulla frustrazione dell'utente. L'HTTP kernel altamente ottimizzato di Symfony e i suoi flessibili livelli di astrazione per la cache sono diventati risorse cruciali. Durante la recente modernizzazione, il team ha rifattorizzato gli endpoint principali dell'API per mettere in cache payload complessi del database. Integrando i meccanismi di caching nativi in modo trasparente all'interno della business logic, Yuka è riuscita a ridurre al minimo le costose e ripetute query al proprio indice di ricerca Algolia. Questo ha stabilizzato direttamente le prestazioni del back-end su milioni di prodotti unici, riducendo significativamente i costi di infrastruttura esterna.
"Per un team delle nostre dimensioni, restare indietro su dipendenze obsolete è un rischio che non potevamo permetterci. Il passaggio a Symfony 7 ha dimostrato che non serve un enorme reparto di ingegneria per gestire un'app su scala globale: serve semplicemente la giusta architettura di framework." — François Martin, co-fondatore e CTO di Yuka
L'upgrade pulito: saltare da Symfony 4 a Symfony 7
Mentre l'applicazione cresceva rapidamente, l'architettura core è rimasta legata a Symfony 4, EasyAdmin 1 e PHP 7.4. Pur essendo altamente stabile, questo stack legacy ha creato un debito tecnico crescente: il team ha perso le ottimizzazioni di performance del PHP 8+ moderno, le patch di sicurezza si avvicinavano all'end-of-life e reclutare nuovi talenti su un codebase datato diventava sempre più complesso.
Per superare questo collo di bottiglia, Yuka ha collaborato con gli esperti del framework di SensioLabs per orchestrare un aggiornamento sistematico delle major version. L'applicazione è stata migrata in modo incrementale attraverso Symfony 5 e 6, approdando infine in modo pulito su Symfony 7. Il livello di astrazione del database è stato contemporaneamente portato da Doctrine ORM 2 alla versione 3, e l'ambiente di runtime è passato a PHP 8.3.
[Symfony 4 / PHP 7.4] ──> [Symfony 5 & 6] ──> [Symfony 7 / PHP 8.3]
Per gestire gli ampi cambiamenti strutturali e le personalizzazioni del back-office richieste nel passaggio da EasyAdmin 1 a EasyAdmin 4, il team di ingegneria ha automatizzato la conformità del codice introducendo un moderno toolkit per sviluppatori:
- Rector & PHP CS Fixer: refactoring automatico dell'abstract syntax tree (AST) per riscrivere le chiamate ai metodi deprecati e applicare gli standard di stile.
- PHPStan: analisi statica rigorosa introdotta per individuare mismatch nei type-hint e regressioni nascoste prima del runtime.
- Continuous Integration: pipeline di test CI automatizzata e robusta per salvaguardare i contratti degli endpoint API durante gli aggiornamenti del linguaggio.
Poiché Symfony mantiene standard rigorosi di backward compatibility lungo i suoi cicli di rilascio, questo percorso di modernizzazione garantisce a Yuka di poter passare facilmente a Symfony 7.4, la release Long-Term Support (LTS), assicurando supporto operativo e patch di sicurezza fino alla fine del 2028.
Restituire alla community: carburante Open Source per l'ecosistema
Per Yuka, costruire su Symfony non è una strada a senso unico. Il processo di aggiornamento si è basato in larga misura su una relazione altamente collaborativa con la community open source. Risolvere i vincoli di versione per applicazioni mobile ad alto throughput richiede spesso di estendere i package dell'ecosistema. Lungo tutto il processo di upgrade, Yuka e gli esperti di SensioLabs hanno contribuito direttamente con feature, patch di compatibilità e bug fix a diversi package di terze parti vitali, tra cui:
- EasyAdminBundle (amministrazione back-office)
- NzoUrlEncryptorBundle (cifratura sicura dei parametri)
- kreait/firebase-bundle (infrastruttura per le notifiche push mobile)
- Algolia/search-bundle (ricerca ad alte prestazioni nell'indice dei prodotti)
Scegliendo una base architetturale open source, Yuka non si è limitata a risolvere il proprio debito tecnico: il team di ingegneria ha attivamente arricchito l'ecosistema PHP globale, dimostrando che le aziende Tech for Good possono guidare direttamente gli strumenti open source su cui si basano.
Una visione condivisa per un mondo digitale e fisico migliore
In definitiva, la collaborazione tra Yuka e Symfony affonda le radici in un profondo allineamento di valori. Yuka è fondamentalmente un'azienda Tech for Good, che consente a milioni di cittadini di fare scelte informate e più sane per il proprio corpo e per il pianeta attraverso la trasparenza. Symfony opera con una filosofia parallela nello spazio digitale, promuovendo software open source, trasparenza, collaborazione collettiva e democratizzazione della tecnologia ad alte prestazioni.
Quando un'app di consumer advocacy di primo piano scala globalmente su un framework aperto, dimostra che costruire un mondo fisicamente più sano è del tutto possibile coltivando un mondo digitalmente sostenibile e collaborativo. Lavorando insieme per migliorare sia la qualità del codebase sia i package dell'ecosistema, Symfony e Yuka dimostrano che la tecnologia raggiunge il suo potenziale più alto quando serve il bene comune.
Grazie a François Martin, co-fondatore e CTO di Yuka, e al team di ingegneria di SensioLabs.
Stack tecnico
- Symfony
- Doctrine ORM, EasyAdmin
- Algolia, Firebase, NzoUrlEncryptorBundle
- PHPStan, Rector, PHP CS Fixer, CI automatizzata
- App native iOS & Android
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.