Дизайн-система в Додо: почему модуль компонентов – это еще не система

28 стилей одной кнопки на старте – и как мы дошли до дизайн-системы, которая живет без нас: с паспортами компонентов, распределенной разработкой и генерацией кода нейронкой.

28 стилей одной кнопки на старте – и как мы дошли до дизайн-системы, которая живет без нас: с паспортами компонентов, распределенной разработкой и генерацией кода нейронкой.

Если ваше мобильное приложение общается с бэкендом, значит, скорее всего, живёт по контракту в виде OpenAPI-схемы. Смотреть на неё удобнее всего в Swagger, а все изменения в API можно отслеживать вручную.
Если проект начнёт расти, а ручная проверка станет дорогой и будет ломаться, на помощь придёт автогенерация из OpenAPI. Но в многомодульном Android-приложении точно всплывут нюансы: где хранить код, как не тянуть лишнее, как вписать сгенерённый код в архитектуру?
Привет! Меня зовут Дима Максимов, я Android-разработчик в Дринкит. Этой статьёй я открываю цикл, в котором мы разберёмся, как настроить генерацию из Swagger в Kotlin-код и как обуздать автогенерацию в условиях многомодульного проекта.

В Додо и Дринкит работают несколько тысяч киосков самообслуживания на iOS, Android и Windows. Чтобы не писать нативный софт и интеграции под каждую систему, мы используем SPA-приложение на React и встраиваем его в хост-приложение на целевой платформе. А в основе интерфейсов всех киосков — фронтенд-приложение, запущенное в WebView внутри нативного приложения
Так мы даём пользователям максимально бесшовный опыт использования киосков. Но есть и обратная сторона медали: если киоск тормозит, пользователи ощущают это мгновенно, а мы не можем так быстро разобраться, где именно возникла проблема с перформансом. Поэтому мы решили измерять производительность напрямую в React-приложении.
С этой задачей столкнулся я — Андрей Боев, техлид команды XXX, отвечающей за опыт пользователей киосков. В этой статье я расскажу, как мы добавили сбор метрики FPS и начали использовать её для системного мониторинга производительности интерфейса, а также почему путь к очевидной метрике оказался не таким уж очевидным. Погнали!

Вы когда-нибудь задумывались о том, как работают тестовые фрймворки в .NET? Ну вот когда вы пишите функцию, кликаете в IDE на треугольник, а потом — бац! — и получаете пару зелёных галочек. Вот как это происходит? Магия? Ну... отчасти да.
Привет! Меня зовут Дима Афонченко, я — техлид в Dodo Engineering. Сегодня расскажу, как устроена работа тестовых фреймворков в .NET и причём тут, собственно, магия. Будет интересно, поехали!

Недавно я перешёл в новую команду и столкнулся с классической задачей — рефакторингом сложной продуктовой фичи. Путь от диагностики проблемы до «продажи» решения был тернист... и нереально интересен. Всеми знаниями, что из него вынес, делюсь в этой статье.
Текст будет полезен не только разработчикам продуктовых команд. Участникам core-команд расскажу про общие принципы рефакторинга, а менеджерам помогу понять, чем отличается зрелое предложение о рефакторинге от обычного «хочу всё переписать».

Safari — новый Internet Explorer для фронтенд-разработчиков! Поведение вёрстки в нём отличается от спецификаций, а иногда бывает и непредсказуемым.
Но если Microsoft свой браузер похоронила, то Apple регулярно обновляет Safari, создавая новые проблемы для фронтендеров. Релиз Safari 26.0 не стал исключением, а усложнил ситуацию новый дизайн Liquid Glass, изменивший интерфейс браузера.
Я — Дима Фукс, Head of Frontend в Додо. Сегодня расскажу о старых и новых проблемах Safari на iOS на примере простой задачки: реализации фуллскрин-модалки с текстовым полем — то есть чата поддержки или окна комментария, встроенного в сайт.

Что для вас хакатон? Тимбилдинг для разработчиков? Тусич с коллегами? Что-то айтишное? А что если хакатон — это вообще не про айтишку, а про... бизнес!?
Меня зовут Ануш Изян, я — внутриком в Dodo Engineering, а сегодня расскажу вам, как мы организовали хакатон для всей компании, позвав на него и IT, и бизнес, что из этого получилось и какие инсайты мы словили. Погнали!

Perfetto показывает те проблемы с производительностью приложения, которые другой профайлер просто не заметит. И не важно, занят ли процессор системными задачами, когда поток готов работать, или GC блокирует UI на 50 миллисекунд — Perfetto всё подсветит.
Ещё не знаете об этом крутейшем инструменте? Тогда эта статья для вас. Привет! Меня зовут Андрей Гришанов. Расскажу вам, что такое Perfetto и как использовать его максимально эффективно.

Автоматизация HR-процессов — многоступенчатый процесс. Сначала нужно решить проблему малой группы, HR-команды, освободив ей руки, а потом — всех сотрудников компании. В общем, продуктовый подход тут не роляет.
Узнали мы это, когда разрабатывали свою HR Platform. Как мы это делали и какие проблемы решали в процессе — я расскажу в своих статьях. Начнём с путешествия в 2018 год, когда мы даже не могли точно сказать, сколько человек работает в управляющей компании Додо. Вперёд в прошлое!

Бизнес Додо активно масштабируется. Уже сейчас Dodo IS круглосуточно работает в двух облаках, более чем в 25 странах и практически во всех часовых поясах. В таких условиях важно знать, что вся система действительно работает хорошо, а не просто «не горит» прямо сейчас.
Чтобы это знание обрести, мы привезли в нашу инженерную савану SLO'на — неповоротливое, но умное существо. Он наводит порядок в хаосе метрик и алёртов, и отличает реальную проблему от мнимой. А ещё он требует внимания, точных чисел и ясных целей. Поначалу мы его боялись, но позже поняли: если его приручить, он защитит нас от ночных звонков и научит бизнес говорить на языке надёжности.
Сегодня мы расскажем, как приручили своего SLO'на и прошли путь от первых экспериментов с нагрузочным тестированием до построения культуры надёжности.

Мы живём во времена AI-бума. ИИ упрощает ресёрч информации, визуализирует первые идеи дизайнеров, которые попадают в референсы, и пишет код. Некоторые даже говорят: «скоро разработчики станут не нужны», а «ИИ-агенты будут идеально писать код по промпту «хочу красиво» и т.д.
До этого «скоро» ещё далеко, но это не повод не использовать ИИ-агентов в автоматизации различной рутины. Например, в написании платёжных интеграций для POS-терминалов в разных странах. Передать ИИ-агентам такую задачку — не очень просто, но у нас получилось! Сегодня расскажем, как мы это сделали.

Весной 2025 года Google представила Live Updates, аналог Live Activity в iOS. Мы быстро запушили продактов — «нам такое надо!» — и потащили фичу в Android-приложение Додо Пиццы.
Но всё оказалось не так просто — мы столкнулись с неполной документацией, расхождениями представлений дизайнеров Google и разработчиков этого SDK, и не только. В общем, запасайтесь попкорном. Сегодня расскажем обо всех нюансах в реализации и тестировании Live Updates.

Додо — компания-киборг. Мы разрабатываем софт, железо и всё вот это айтишное, но наш бизнес — оффлайновый, мы развиваем сеть пиццерий Додо и кофеен Дринкит. Наши фичи и продукты постоянно встречаются с реальностью: операционкой, локализацией, погодой и не только.
Поэтому мы создали команду менеджеров внедрений. Они упаковывают и передают в руки бизнеса IT-продукты, причём все — от сканеров маркировки до новаторской умной выдачи. Звучит футуристично, но в реальности часто выглядит как стендап.
Ещё в Додо принято признавать факапы, учиться на них и делиться ими. Привет! Я — Маша, лидер команды внедренцев. Сегодня я собрала для вас пять забавных кейсов внедрений. Мы из них вынесли опыт, а вы узнаете что-то новое и посмеётесь.

Многие компании хотят быть «на одной волне с пользователями», но шутить и неформальничать не хотят — слишком уж они серьёзные, да и «вдруг чего». А может ли шутка как-то повлиять на образ бренда, если у него отличная репутация? Вряд ли. Компании, которые это поняли и используют эмоции как способ сблизиться с пользователям, уже активно захватывают не только гаджеты, но и сердечки новых юзеров.
Но как появляются пуши, которые вызывают у людей ощущение живого диалога? Как сделать кнопку, в которой пользователь найдёт не идеальный, а «свой» инструмент и расшарит скрины вашего приложения в соцсетях? Точно не по заказу. Такие тексты рождаются из эмоций и часто — когда уже нечего терять. Привет! Меня зовут Вика, сегодня расскажу о создании такой завирусившейся кнопки.

Представьте команду бэкенд-разработчиков, которые привыкли писать бэкенды на .NET и немного фронтенд на Typescript + React. Это мы, ага. А теперь представьте, что этой команде прилетает задача: написать рабочее десктоп-приложение для печати этикеток.
Сложно даже подумать о таком? А с нами всё так и случилось! Сегодня расскажу, как бэкендеры писали приложение для Windows, опираясь на привычную для себя строгую структуру кода, тесты и CI/CD, и о том, что из этого получилось.

Сколько нужно времени, чтобы команда сработалась? Мы проводим ретроспективы, 1-1, призываем внешних фасилитаторов, проговариваем планы и решения, но чего-то не хватает. Всё это попытки рационализировать — объяснить, как нам друг с другом работается. Но есть же и чувства, а их сформулировать сложнее.
Однажды мы собрались с командой оффлайн. Я хотел, чтобы мы сплотились — вовлечённо поработали, почувствовав на собственном опыте, как себя ощущают коллеги в других ролях. Так появилась игра «симулятор команды». В этой статье расскажу, как в неё играть и как она может помочь вам.

Это очередная статья на тему «как прокачаться продакту». Однако рекомендовать в ней книги, подкасты или «100% работающие» фреймворки я не буду.
Привет, меня зовут Юля! В этой статье я поделюсь навыками, которые стоит развивать всем желающим качаться в продукте.

Представьте, что вы работаете по скраму, но без скрам-мастера. Его задачи распределены между участниками команды. Представили? Отлично! Усложним задачу: представьте, что тимлида тоже нет. «Хаос» — скажете вы? Вовсе нет! Мы так работаем уже несколько лет.
Привет, я — Иван Зверев, фулстэк в Додо. Сегодня я расскажу о том, как круто может самоорганизоваться здоровая команда, если довериться ей, обозначить прозрачные правила работы и дать свободу экспериментировать с процессами. Вперёд!

В Дринкит был анимированный компонент на MotionLayout — слайдер быстрой оплаты в меню. Его и сейчас можно увидеть, когда вы добавляете продукты в корзину. Проведя по нему, вы оплатите заказ, а тапнув — перейдёте к покупкам.
Так почему «был»? У компонента накопилось немало багов, а самому слайдеру понадобился новый функционал. Реализовать его на MotionLayout было сложно, так что мы решили переписать компонент на Compose.
Привет! Меня зовут Дима Максимов, я — Android-разработчик. В этой статье я расскажу, почему на Compose проще пилить масштабируемые компоненты, разобрав процесс во всех деталях, покажу код и его реализацию в интерфейсе.

В финальной статье цикла про функциональное программирование в Android мы соберём знания, полученные в предыдущих частях. И, конечно, применим их на практике — соберём скелет приложения для медитации.
Практиковаться будем не на ViewModel, а на The Elm Architecture — это паттерн управления состоянием, заимствованный из функционального языка Elm. Заодно узнаем об этом паттерне побольше, разобрав суть его ключевых компонентов. В общем, погнали!