← Назад к вопросам

Как происходила работа внутри Android команды на последней работе

1.3 Junior🔥 141 комментариев
#Опыт и софт-скиллы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отличный вопрос. На моей последней позиции в качестве 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. Работали по следующему циклу:

  1. Дизайн и прототип: Продуктовик и дизайнер готовили макеты в Figma, с которыми мы проводили дизайн-ревью еще до начала кодирования.
  2. Создание задачи: В Jira создавалась задача с четкими Acceptance Criteria (AC), ссылками на Figma и требованиями к API (Swagger).
  3. Технический дизайн: Для нетривиальных задач (например, новая фича с офлайн-режимом) я как техлид писал короткий Technical Design Document (TDD) в Confluence, который обсуждался командой.
  4. Разработка: Разработчик брал задачу в спринт. Мы практиковали парное программирование на сложных участках кода и обязательно 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)
    }
}
  1. Тестирование: После мержа MR задача автоматически попадала в TestFlight / Firebase App Distribution. QA проверял ее по чек-листу. Мы также внедряли автоматизированные UI-тесты (Espresso) для критических пользовательских сценариев.
  2. Релиз: Раз в две недели (после спринта) мы собирали релизную ветку. Выкатывание происходило фазированно (staged rollout): сначала 1% пользователей, затем 10%, 50%, 100%, с мониторингом крашей через Firebase Crashlytics и ключевых метрик в Amplitude.

Принятие решений и разрешение конфликтов

Технические решения принимались коллегиально. Для небольших решений хватало обсуждения в MR. Для средних — на Tech Sync. Для крупных (например, внедрение MVVM с Coroutines Flow или выбор библиотеки навигации) проводились архитектурные воркшопы с созданием ADR (Architecture Decision Record).

Конфликты (чаще всего "скорость vs. качество" или расхождения в оценке сложности) разрешались через данные. Мы смотрели на метрики: количество инцидентов в прод, время разработки похожих фич в прошлом. Ключевую роль играл продуктовый менеджер, который приоритизировал бизнес-ценность, и тимлид, отвечавший за долгосрочное здоровье кода.

Главные принципы: прозрачность (вся работа в Jira), ответственность (у каждой задачи свой владелец), и фокус на качестве, что обеспечивалось mandatory code review, автотестами и статическим анализом. Это позволяло выпускать стабильные обновления для миллионов пользователей.

Как происходила работа внутри Android команды на последней работе | PrepBro