Refactoro di Duolingo su Android con librerie MVVM e Jetpack

Duolingo è l'app per l'apprendimento delle lingue più famosa al mondo perché è riuscita a far sembrare facile e divertente qualcosa che le persone in passato hanno trovato scoraggianti. Questa esperienza linguistica ventilata richiede un flusso costante di nuove funzionalità ed esperimenti e un'app funzionante in grado di offrire tutti questi vantaggi. Per Duolingo, l'assenza di risposte da parte di un'app su un dispositivo in qualsiasi parte del mondo potrebbe indurre uno studente potenzialmente scoraggiato dagli studenti. Questo li aiuta a raggiungere l'eccellenza nelle app, in particolare sui dispositivi Android usati dal 60% degli studenti, incluso il loro CEO, che tiene traccia dell'app da uno smartphone di fascia base. Così, quando il team di sviluppo Android di Duolingo ha notato un aumento degli errori "L'app non risponde", ha perso frame e ha persino ricevuto reclami scritti a mano, ha preso provvedimenti immediatamente.

Ben presto hanno scoperto l'origine dei problemi di prestazioni dell'app: l'architettura software esistente non si stava scalando bene con la crescita del loro team. Gli aggiornamenti necessari stavano causando dolorose regressioni delle prestazioni dell'app. I loro sviluppatori dedicavano più tempo alla correzione dei bug e meno alla distribuzione di nuove funzionalità che generavano entrate. La loro architettura obsoleta del software stava iniziando a diventare una resistenza inaccettabile, per la velocità del team e, soprattutto, per l'esperienza utente. Dovevano ricostruire il codebase da zero.

Come ci sono riusciti

All'inizio la squadra era distrutta. Dovrebbe essere la loro unica priorità ora? Un gruppo riteneva che fosse più importante continuare a offrire nuove funzionalità e aumentare le entrate, mentre l'altro riteneva che concentrarsi sul riavvio di Android fosse la via da seguire. Alla fine, hanno raggiunto il consenso secondo cui il crescente impegno nel combattere le regressioni rischiava di far deragliare completamente la loro roadmap. Dovevano puntare all-in.

Il team ha optato per una soluzione sempre più diffusa. Ha deciso di riscrivere l'app utilizzando Model-View-ViewModel, un pattern software supportato da Google che consente agli sviluppatori di semplificare l'architettura di un'app creando una chiara separazione dei problemi. Con MVVM, è stato possibile separare lo sviluppo della Graphic User Interface (vista) dallo sviluppo della logica di business (il modello). Potrebbero stabilire pattern chiari e concordati, semplificando l'allineamento del loro approccio alle nuove funzionalità e l'onboarding degli sviluppatori in arrivo.

La suddivisione di ogni caratteristica in un proprio pezzo modulare ha permesso al team di recuperare rapidamente la produttività, poiché potevano assegnare a piccoli gruppi il compito di lavorare su ogni caratteristica in parallelo, aumentando la velocità e riducendo gli errori.

L'azienda ha implementato questa nuova architettura con le librerie Jetpack di Android, tra cui Dagger e Hilt, per contribuire a scrivere codice che funzioni in modo coerente su tutti i dispositivi e le versioni Android. Queste due aggiunte hanno permesso all'azienda di creare funzionalità incapsulate meglio e di utilizzare i moduli integrati di Android in modo più efficiente.

Risultati

Questi miglioramenti in termini di rendimento hanno migliorato notevolmente l'esperienza degli studenti su Android e in particolare sui dispositivi di livello base. Inoltre, ha reso l'app più reattiva con animazioni più fluide sui dispositivi di punta. La percentuale giornaliera di ANR o "L'app non risponde" è scesa del 41%. La percentuale di tempo in cui l'app è scesa al di sotto della frequenza frame target è diminuita del 28%. Soprattutto, gli utenti hanno registrato un aumento della velocità del 40% durante lo scorrimento delle schermate principali.

Mani che tengono note che leggono il 41% di errori ANR in meno, la frequenza fotogrammi migliorata del 28% e l'esperienza più veloce del 40%.


L'intero riavvio ha richiesto otto settimane e ha reso l'app molto più coinvolgente e piacevole per tutti gli studenti Duolingo. Nei sei mesi successivi, il team non ha registrato nuove regressioni significative del rendimento, che hanno permesso di concentrarsi di nuovo sulle funzionalità di spedizione che generano entrate. La decisione di concentrare gli sforzi del team sulla qualità ha dato i suoi frutti.

La dedizione di Duolingo nella sua missione l'ha resa l'app migliore al mondo per quanto riguarda l'apprendimento delle lingue. Il loro impegno per l'eccellenza delle app, ovvero la creazione di esperienze didattiche all'avanguardia senza compromettere l'accessibilità, è ciò che li ha spinti a rimanere lì.

Inizia

Se vuoi approfondire gli aspetti fondamentali di come Duolingo ha integrato le librerie di Jetpack e come Model-View-ViewModel ha migliorato la sua app, leggi il nostro case study tecnico per gli sviluppatori.