Duolingo היא אפליקציית לימוד השפות הפופולרית ביותר בעולם, כי היא הצליחה להפוך משהו שאנשים חשבו בעבר שהוא מפחיד למשהו קל ומהנה. כדי לספק חוויה שוטפת בשפה, צריך להוסיף כל הזמן תכונות חדשות ולערוך ניסויים – וגם להפעיל אפליקציה חלקה שיכולה לספק את כל אלה. עבור Duolingo, אפליקציה שלא מגיבה במכשיר כלשהו בעולם יכולה להיות סימן ללומד שעלול להתייאש. הם מחויבים למצוינות באפליקציות, במיוחד במכשירי Android שבהם משתמשים שישים אחוז מהלומדים שלהם, כולל המנכ"ל, שעוקב אחרי האפליקציה מטלפון ברמת כניסה. לכן, כשצוות הפיתוח של Duolingo ל-Android הבחין בעלייה בשגיאות מסוג 'האפליקציה לא מגיבה', בפריים שהושמטו – ואפילו קיבל תלונות בכתב יד – הוא פעל באופן מיידי.
הם גילו במהרה את המקור לבעיות בביצועי האפליקציה: ארכיטקטורת התוכנה הקיימת לא התרחבה בצורה טובה עם הגידול בצוות. עדכונים נדרשים גרמו לירידה משמעותית בביצועים של האפליקציה. המפתחים הקדישו יותר זמן לתיקון באגים ופחות זמן להשקת תכונות חדשות שמייצרות הכנסות. הארכיטקטורה המיושנת של התוכנה שלהם התחילה להפריע להם, למהירות העבודה של הצוות שלהם, ובעיקר לחוויית המשתמש. הם נאלצו לבנות מחדש את בסיס הקוד שלהם מאפס.
איך הם עשו את זה
בהתחלה, היו חילוקי דעות בצוות. האם זה צריך להיות הדבר הכי חשוב להם עכשיו? קבוצה אחת הרגישה שחשוב יותר להמשיך להשיק תכונות חדשות ולהגדיל את ההכנסות, בעוד שהקבוצה השנייה האמינה שהדרך הנכונה היא להקדיש את כל תשומת הלב להפעלה מחדש של Android. בסופו של דבר, הם הגיעו להסכמה שהמאמץ הגובר במאבק ברגרסיות עלול לסכן את תוכנית הפיתוח שלהם לחלוטין. הם היו צריכים להשקיע את כל המאמצים.
הצוות בחר בפתרון שהפופולריות שלו גדלה. הם החליטו לכתוב מחדש את האפליקציה שלהם באמצעות Model-View-ViewModel, תבנית תוכנה שנתמכת על ידי Google ומאפשרת למפתחים לייעל את הארכיטקטורה של האפליקציה על ידי יצירת הפרדה ברורה בין הדאגות. בעזרת MVVM, הם יכלו להפריד בין פיתוח ממשק המשתמש הגרפי (התצוגה) לבין פיתוח הלוגיקה העסקית (המודל). הם יכולים ליצור דפוסים ברורים ומוסכמים, וכך להקל על התאמת הגישה שלהם לתכונות חדשות ועל צירוף מפתחים חדשים.
הפיצול של כל תכונה לחלק מודולרי משלה אפשר לצוות לחזור במהירות לפרודוקטיביות, כי הוא יכול היה להקצות קבוצות קטנות לעבודה על כל תכונה במקביל, וכך להגדיל את המהירות ולצמצם את השגיאות.
הם הטמיעו את הארכיטקטורה החדשה הזו באמצעות ספריות מ-Jetpack של Android, כולל Dagger ו-Hilt, כדי לעזור להם לכתוב קוד שפועל באופן עקבי בגרסאות ובמכשירים שונים של Android. שתי התוספות האלה אפשרו להם ליצור תכונות טובות יותר ולהשתמש ביעילות רבה יותר במודולים המובנים של Android.
תוצאות
השיפורים האלה בביצועים שיפרו משמעותית את חוויית הלמידה ב-Android, ובמיוחד במכשירים ברמת הכניסה. השינויים האלה גם הובילו לאפליקציה עם תגובה מהירה יותר ואנימציות חלקות יותר במכשירים מובילים. שיעור מקרי ה-ANR היומי ירד ב-41%. אחוז הזמן שבו האפליקציה הייתה מתחת ליעד קצב הפריימים שלה ירד ב-28%. הכי חשוב, המשתמשים נהנו משיפור של 40% במהירות הגלילה במסכים מרכזיים.
ידיים מחזיקות פתקים עם הכיתוב: 41% פחות רעשי רקע, 28% שיפור בקצב הפריימים ו-40% חוויה מהירה יותר.
ההפעלה מחדש נמשכה שמונה שבועות, והפכה את האפליקציה למעניינת ומהנה יותר לכל הלומדים ב-Duolingo. במהלך ששת החודשים האחרונים, הצוות לא תיעד רגרסיות משמעותיות חדשות בביצועים, ולכן הוא יכול להתמקד שוב בהשקת תכונות שמניבות הכנסות. ההחלטה למקד את מאמצי הצוות באיכות השתלמה.
המסירות של Duolingo למשימה שלה הפכה אותה לאפליקציה המובילה בעולם בתחום לימוד השפות. המחויבות שלהם למצוינות באפליקציות – יצירת חוויות חינוכיות מתקדמות בלי לפגוע בנגישות – היא מה שגרם להם להישאר שם.
שנתחיל?
אם אתם רוצים להבין איך Duolingo שילבה את הספריות של Jetpack, ואיך Model-View-ViewModel שיפרה את האפליקציה שלה, אתם יכולים לקרוא את המחקר הטכני שלנו למפתחים.