Когда много лет работаешь в мобильной разработке, постепенно накапливается довольно много историй, которые обычно остаются внутри команды. И, уверен, еще много историй забывается, поскольку вовремя не были записаны. Почему экран, который «просто немного тормозит», в итоге приводит к большому разбору производительности. Почему очевидное архитектурное решение оказывается не самым удачным. Как одна небольшая деталь в работе с concurrency превращается в трудноуловимый баг. Или почему иногда лучший способ ускорить приложение — вообще не оптимизировать UI. Я занимаюсь мобильной разработкой около 12 лет, последние 7 — преимущественно iOS. За это время были разные проекты: от небольших приложений до крупных систем с миллионами пользователей, работа с legacy, оптимизация производительности, архитектура, Swift Concurrency, UIKit, SwiftUI. Последнее время добавился и Flutter. Решил попробовать писать здесь о том, с чем сталкиваюсь в работе и что периодически разбираю глубже. Без пересказа документации. Говорить о конкретных инженерных задачах: что было не так, как искали причину, какие варианты рассматривали, что в итоге сработало и какие компромиссы пришлось принять. Посмотрим, что из этого получится.