Как происходила работа внутри Android команды на последней работе
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Отличный вопрос. На моей последней позиции в качестве Lead Android Engineer в продуктовой команде крупного финансового приложения мы работали по гибридной методологии, сочетающей принципы Agile/Scrum и Shape Up от Basecamp. Структура была выстроена максимально эффективно для баланса между предсказуемостью релизов и инновациями.
Организационная структура и процессы
Команда состояла из 5 Android-разработчиков (включая меня), 3 iOS-разработчиков, 2 бэкенд-разработчиков, QA-инженера, продуктового менеджера (Product Owner) и тимлида (Engineering Manager). Мы входили в состав более крупной продуктовой вертикали (например, "Платежи" или "Инвестиции").
Ключевые процессы:
- Планирование (Shape Up): Каждые 6 недель (цикл) проходила "фаза формирования" (Shaping). Продуктовики, дизайнеры и техлиды (включая меня) совместно "формировали" проект: определяли проблему, "хлебные корки" решения (key steps), и главное — "аппетит" (appetite), то есть жесткий лимит в 2, 4 или 6 недель на реализацию. Это исключало бесконечное расползание требований.
- Спринты (Scrum): Внутри 6-недельного цикла мы разбивали работу на двухнедельные спринты. Ежедневно проводились 15-минутные стендапы в формате "что сделал, что планирую, какие блокеры". Раз в две недели — планнинг (оценка задач в стори-поинтах и poker planning), ретроспектива (что прошло хорошо, что улучшить) и демо для всей команды.
- Технические ритуалы: Раз в неделю у Android-подкоманды был Tech Sync для обсуждения архитектурных решений, ревью сложных PR и планирования технического долга. Раз в месяц — Android Guild Meeting на уровне всей компании для обмена опытом, выбора общих библиотек и code style.
Распределение и коммуникация задач
Задачи приходили из "сформированного" проекта и разбивались на пользовательские истории в Jira. Работали по следующему циклу:
- Дизайн и прототип: Продуктовик и дизайнер готовили макеты в Figma, с которыми мы проводили дизайн-ревью еще до начала кодирования.
- Создание задачи: В Jira создавалась задача с четкими Acceptance Criteria (AC), ссылками на Figma и требованиями к API (Swagger).
- Технический дизайн: Для нетривиальных задач (например, новая фича с офлайн-режимом) я как техлид писал короткий Technical Design Document (TDD) в Confluence, который обсуждался командой.
- Разработка: Разработчик брал задачу в спринт. Мы практиковали парное программирование на сложных участках кода и обязательно code review через GitLab Merge Requests (MR). Каждый MR должен был содержать:
* Описание изменений.
* Чек-лист (убраны ли временные логи, протестировано ли на разных версиях ОС).
* **Обязательные автоматические проверки:** успешный проход **CI/CD** (сборка, unit-тесты, статический анализ через **Detekt/Ktlint**).
// Пример: перед мержем MR мы требовали покрытие ключевой логики unit-тестами
class PaymentValidatorTest {
@Test
fun `validateCardNumber returns Success for valid number`() {
val validator = PaymentValidator()
val result = validator.validateCardNumber("4111111111111111")
assertTrue(result is ValidationResult.Success)
}
@Test
fun `validateCardNumber returns Error for empty string`() {
val validator = PaymentValidator()
val result = validator.validateCardNumber("")
assertTrue(result is ValidationResult.Error)
}
}
- Тестирование: После мержа MR задача автоматически попадала в TestFlight / Firebase App Distribution. QA проверял ее по чек-листу. Мы также внедряли автоматизированные UI-тесты (Espresso) для критических пользовательских сценариев.
- Релиз: Раз в две недели (после спринта) мы собирали релизную ветку. Выкатывание происходило фазированно (staged rollout): сначала 1% пользователей, затем 10%, 50%, 100%, с мониторингом крашей через Firebase Crashlytics и ключевых метрик в Amplitude.
Принятие решений и разрешение конфликтов
Технические решения принимались коллегиально. Для небольших решений хватало обсуждения в MR. Для средних — на Tech Sync. Для крупных (например, внедрение MVVM с Coroutines Flow или выбор библиотеки навигации) проводились архитектурные воркшопы с созданием ADR (Architecture Decision Record).
Конфликты (чаще всего "скорость vs. качество" или расхождения в оценке сложности) разрешались через данные. Мы смотрели на метрики: количество инцидентов в прод, время разработки похожих фич в прошлом. Ключевую роль играл продуктовый менеджер, который приоритизировал бизнес-ценность, и тимлид, отвечавший за долгосрочное здоровье кода.
Главные принципы: прозрачность (вся работа в Jira), ответственность (у каждой задачи свой владелец), и фокус на качестве, что обеспечивалось mandatory code review, автотестами и статическим анализом. Это позволяло выпускать стабильные обновления для миллионов пользователей.