Duolingo — самое популярное в мире приложение для изучения языков, поскольку ему удалось сделать то, что раньше люди считали пугающим, простым и увлекательным. Этот свежий языковой опыт требует постоянного потока новых функций и экспериментов, а также бесперебойного приложения, способного реализовать все из них. Для Duolingo не отвечающее приложение на устройстве в любой точке мира может означать потенциальное разочарование ученика. Это обязывает их добиваться совершенства в приложениях, особенно на устройствах Android, которыми пользуются шестьдесят процентов их учеников, включая их генерального директора, который отслеживает приложение с телефона начального уровня. Поэтому, когда команда разработчиков Duolingo для Android заметила увеличение количества ошибок «Приложение не отвечает», пропадали кадры и даже получила рукописные жалобы, они немедленно приняли меры.
Вскоре они обнаружили источник проблем с производительностью приложения: существующая архитектура программного обеспечения плохо масштабировалась по мере роста их команды. Необходимые обновления вызывали болезненное снижение производительности приложения. Их разработчики уделяли больше времени исправлению ошибок и меньше — выпуску новых функций, приносящих доход. Устаревшая архитектура программного обеспечения начала становиться неприемлемым препятствием — для них, для скорости работы их команды и, прежде всего, для опыта их пользователей. Им нужно было перестроить свою кодовую базу с нуля.
Как они это сделали
Поначалу команда была разорвана. Должно ли это быть их единственным приоритетом сейчас? Одна группа считала, что важнее продолжать выпуск новых функций и увеличение доходов, в то время как другая считала, что сосредоточить все свое внимание на перезагрузке Android — это путь вперед. В конце концов они пришли к единому мнению, что растущие усилия по борьбе с регрессом рискуют полностью сорвать их дорожную карту. Им пришлось пойти ва-банк.
Команда остановилась на набирающем популярность решении. Они решили переписать свое приложение, используя Model-View-ViewModel , программный шаблон, поддерживаемый Google, который позволяет разработчикам оптимизировать архитектуру приложения, создавая четкое разделение задач. С помощью MVVM они могли отделить разработку графического пользовательского интерфейса (представления) от разработки бизнес-логики (модели). Они могли бы установить четкие и согласованные шаблоны, что облегчило бы как согласование их подхода к новым функциям, так и привлечение новых разработчиков.
Разбиение каждой функции на отдельные модульные части позволило команде быстро восстановить продуктивность, поскольку они могли назначать небольшие группы для параллельной работы над каждой функцией, увеличивая скорость и уменьшая количество ошибок.
Они реализовали эту новую архитектуру с помощью библиотек из Android Jetpack , включая Dagger и Hilt , чтобы помочь им писать код, который одинаково работает на всех версиях Android и устройствах. Эти два дополнения позволили им создать более инкапсулированные функции и более эффективно использовать встроенные модули Android .
Результаты
Этот прирост производительности значительно улучшил опыт учащихся на Android и, в частности, на устройствах начального уровня. Они также привели к созданию более отзывчивого приложения с более плавной анимацией на флагманских устройствах. Ежедневный показатель «Приложение не отвечает» или ANR снизился на 41%. Процент времени, когда приложение оказывалось ниже целевой частоты кадров, уменьшился на 28%. Самое главное, что их пользователи почувствовали увеличение скорости на 40% при прокрутке ключевых экранов.
При чтении заметок в руках на 41 % меньше ошибок ANR, на 28 % улучшена частота кадров и на 40 % быстрее работа.
Вся перезагрузка заняла восемь недель и сделала приложение значительно более привлекательным и приятным для всех, кто изучает Duolingo. За прошедшие с тех пор шесть месяцев команда не зафиксировала никаких новых существенных ухудшений производительности, что позволило им снова сосредоточиться на выпуске функций, приносящих доход. Решение сосредоточить усилия команды на качестве принесло свои плоды.
Преданность Duolingo своей миссии сделала его лучшим приложением в мире в области изучения языков. Их стремление к совершенству приложений — создание передового образовательного опыта без ущерба для доступности — вот что удержало их там.
Начать
Если вам хочется углубиться в подробности того, как Duolingo интегрировал библиотеки Jetpack и как Model-View-ViewModel улучшили свое приложение, прочтите наш технический пример для разработчиков.