Ответ
На моей предыдущей позиции Flutter-разработчика типичный день строился по гибкому графику с акцентом на утренние и вечерние созвоны из-за распределённой команды.
Утро (9:00-10:30):
- Проверка почты, Slack и обновлений в Jira. Просмотр результатов ночных билдов на CI/CD (использовали Codemagic).
- Ежедневный стендап в Zoom: краткий отчет о вчерашнем прогрессе по задачам (например, "завершил интеграцию с GraphQL API для модуля платежей"), планы на день и обсуждение блокеров.
Основная разработка (10:30-13:00):
- Работа над задачами из спринта. Например, реализация нового экрана с использованием
Blocдля управления состоянием иFreezedдля моделей. - Написание unit-тестов для бизнес-логики с
mockitoи widget-тестов для критичных виджетов.
// Пример: в этот период мог дописывать метод в репозитории
Future<PaymentResult> processPayment(PaymentData data) async {
try {
final response = await _apiClient.post('/payments', data: data.toJson());
return PaymentResult.fromJson(response);
} on SocketException catch (_) {
throw NetworkException();
}
}
Обед + код-ревью (13:00-15:00): После обеда — обязательное время на ревью пулл-реквестов коллег в GitHub. Фокус на качестве кода, соответствии гайдлайнам, проверке тестов и потенциальных side effects.
Вечерняя сессия (15:00-18:00):
- Продолжение разработки или исправление замечаний по своему PR.
- Второй созвон с командой для синхронизации по сложным задачам или обсуждения архитектуры (например, как лучше организовать кэширование данных с
Hive). - Фиксация прогресса в Jira, обновление документации в Confluence или в коде (dartdoc).
- За 30-40 минут до конца дня — изучение статей по Flutter (например, про
Riverpod 2.0или новые возможности Flutter Engine) или эксперименты с прототипами.
Ответ 18+ 🔞
Да ты посмотри, какой у тебя распорядок дня вырисовывается — прямо как у космонавта, ей-богу. Ну что, разберём этот твой график, который ты тут как сводку погоды выложил.
Утро (9:00-10:30): Ну, начинается день, конечно, с благодати. Просыпаешься, первым делом — не кофе, а проверка почты и Slack. А там, ясное дело, уже накидали сообщений: кто-то ночью что-то сломал, кто-то задачу переописал, а в Jira уже новые тикеты, как грибы после дождя. И самое весёлое — смотреть на результаты ночных билдов. Открываешь Codemagic, а там, ёпта, всё красное, тесты посыпались. И сразу волнение ебать, терпения ноль. Мысль одна: «Чёрта в душу, в сердцу мать, кто опять в мастер что-то залил?». Потом стендап. Ну это святое. Заходишь в Zoom, а там все сонные рожи. И начинается: «Вчера сделал то, сегодня буду делать это, блокеров нет». А сам думаешь: «Да блокер у меня один — сонливость, хуй с горы».
Основная разработка (10:30-13:00): Тут, вроде, входишь в поток. Садишься за свою фичу. Допустим, пишешь новый экран. Подключаешь этот твой Bloc, настраиваешь стримы, Freezed-модели генерируешь — красота. А потом доходишь до момента, когда надо с бэком интегрироваться. Открываешь сваггер, а там документация, будто мартышлюшка на клавиатуре танцевала. Половины полей нет, типы не те. И вот тут начинается: «Какого хуя?». Сидишь, гадаешь, что же они имели в виду. А ещё эти unit-тесты писать… Замокать надо кучу зависимостей. Иногда кажется, что mockito-то ты используешь, а по факту просто вздрачиваешь себе мозг.
// Вот сидишь и пишешь такой метод, вроде всё просто.
Future<PaymentResult> processPayment(PaymentData data) async {
try {
// А потом понимаешь, что _apiClient может выкинуть ещё пяток разных исключений,
// про которые бэкендеры тебе «забыли» сказать.
final response = await _apiClient.post('/payments', data: data.toJson());
return PaymentResult.fromJson(response);
} on SocketException catch (_) {
throw NetworkException(); // А если таймаут? А если 502?
}
}
Обед + код-ревью (13:00-15:00):
После обеда, когда вроде отошёл, начинается самое интересное — код-ревью. Открываешь пулл-реквест, а там овердохуища изменений. Тысяча файлов. Сразу подозрение ебать чувствую. Начинаешь смотреть, а там чувак, бля, велосипед изобрел на ровном месте. Вместо того чтобы использовать стандартный InheritedWidget, он написал свою реализацию на коленке, которая ещё и память литую. Или названия переменных: temp, data, value. Прям пидарас шерстяной! Пишешь комментарий: «Мужик, давай переделаем, тут архитектура хромает». А в ответ: «Это же работает!». Работает-то работает, но это же пиздопроебибна, а не решение.
Вечерняя сессия (15:00-18:00):
К вечеру силы уже на исходе. Ты либо допиливаешь свою таску, либо получаешь фидбек на свой PR и сидишь, исправляешь. Потом второй созвон. Тут уже могут быть серьёзные разговоры. Например, как лучше кэширование сделать. Один говорит — Hive, другой — shared_preferences с ручным JSON, третий вообще SQLite предлагает. Споры, дискуссии… Иногда кажется, что гомосеки налетели, каждый тянет одеяло на свою архитектуру. К концу дня уже просто фиксируешь прогресс в Jira. Ставишь задачу «в тестирование» с чувством выполненного долга. И последние полчаса — священное время. Либо статью какую-то по Flutter читаешь, либо с новым пакетом балуюсь. Смотришь на примеры Riverpod 2.0 и думаешь: «Ни хуя себе, как элегантно». Пытаешься впендюрить это в старый проект в голове. А потом смотришь на часы — всё, пора валить. День прошёл. И вроде всё сделал, а ощущение, что только вмандИть во всё это успел.