1 of 25

Как организовать проект, чтобы не было мучительно больно

Bishkek

Александр Ставонин

2 of 25

О докладчике

Выпускник Политеха 2003 года

Более 20 лет опыта в IT

Распределенные системы, безопасность, управление процессами и проектами

C++, Go, Python, Elixir, Unix

Kaspersky Lab, Samsung, Autodesk и Motional

3 of 25

  • Из чего складываются сроки?
  • Что можно улучшить?
  • Как внедрять улучшения?

4 of 25

1. Понятие проекта и его составляющие, включая системы развертывания, код компонентов и техническую документацию

2. Применимость подходов в зависимости от размера проекта и контекста разработки

3. Факторы, влияющие на сроки, включая поддержку текущей функциональности, технический долг и регрессии

4. Важность автоматизации и правильного пайплайна для ускорения добавления новой функциональности и устранения дефектов

5. Роль технической документации и ее влияние на организацию проекта

Ключевые моменты

5 of 25

Составные компоненты конечного продукта:

Зависимости

Проект это…

Сервис

Сервис

Сервис

Библиотека

Библиотека

Библиотека

Зависимости

Зависимости

Си

Система

Система сборки

Документация

Документация

Документация

Система развертывания

6 of 25

  • Важность правильной организации в зависимости от размера проекта - чем больше, тем критичнее
  • Применимо для продуктовой разработки
  • Возможно, подходит для аутсорсинга

Применимость

7 of 25

Из чего складываются сроки?

8 of 25

Под поддержкой проекта понимаются рутинные активности направленные на обеспечение бесперебойного функционирования всех активных версий продукта

  1. Исследования производительности
  2. Разбор инцидентов
  3. Исправление ошибок
  4. Добавление новой функциональности

Поддержка проекта

9 of 25

Под определение технического долга попадают все технические упрощения, на которые пришлось пойти, чтобы выполнить поставку в срок.

© Atlassian Wiki

Основные причины появления технического долга:

  • Изменения направление развития проекта
  • Добавление “неожиданной” функциональности
  • Изначальные ошибки проектирования
  • Выпуск релиза в заведомо недостаточных временных рамках

Технический долг

10 of 25

Регрессия - это ситуация, когда изначально работавшая функциональность перестает работать.

  • Рост количества регрессий с возрастом проекта
  • Классические и не работающие способы победить регрессию:
    1. ручное тестирование
    2. увеличение количества разработчиков
    3. сдвиг сроков релиза

Регрессии

11 of 25

Новый функционал в неделю = (Продуктивность команды - (② + ③ + ④))

* Сложность нового функционала

* Неделя

Новая функциональность

12 of 25

Что можно улучшить?

13 of 25

Повышение качества проекта - это наиболее простой и масштабируемый способ ускорения разработки.

  • Многоуровневое автоматическое тестирование
  • Пайплайн и количество регрессий
  • Проектная документация

Ускорение разработки

14 of 25

  • Юнит-тесты для каждого из компонентов
    • покрытие не менее 80%
  • Интеграционные тесты для тестирования уже собранных компонент и их взаимодействий
    • Python ваш лучший друг
  • Автоматические End-to-end тесты всего проекта
  • Запрет на merge при провале любого из тестов или понижении тестового покрытия
  • Разработка юнит и интеграционных тестов - это прямая обязанность разработчика функционала
  • End-to-end тесты могут разрабатываться выделенными командами
  • Преобладание ручного тестирования - это признак проблем с организацией или техническим исполнением проекта

Многоуровневое автоматическое тестирование

15 of 25

Линтер - статический анализатор кода. Доступны для практически всех языков программирования, даже для Bash.

Санитайзер - динамический анализатор кода во время исполнения. Доступны для основных реализаций C, C++ и Rust.

Фаззер - тестирование с рандомизированными данными.

  • Возможность исправить ошибки в процессе написания кода
  • Автоматизация поиска уязвимостей
  • Автоматизация поиска дедлоков, утечек памяти и ошибок сегментации
  • Польза от санитайзеров растет с количеством тестов

Линтеры и Санитайзеры

16 of 25

Пайплайн - ключевой элемент любого проекта, способный оказать непосредственное влияние на количество регрессий и общее качество кодовой базы.

  • Внятная выдача сообщений об ошибках
  • Возможность перезапуска одной из ступеней сборки, а не всего проекта целиком
  • Информация о трендах по ошибкам и наиболее проблемным шагам
  • Контроль за вливаемыми изменениями

Пайплайн и регрессии

17 of 25

Хорошая проектная документация включает в себя не только README.md в корне проекта, но и описание ключевых проектных решений

Requests for Comments (RFC) и Architecture Decision Records (ADR)

  • Упрощение вхождения в проект
  • Прослеживаемость ключевых архитектурных решений
  • Снижение bus-factor
  • Обсуждение перед реализацией

Проектная документация

18 of 25

Чем проще работать с проектом, тем ниже требования к доступным ресурсам и выше скорость внесения изменений.

  • Минимальный риск сломать систему
  • Можно быстро нарастить количество инженеров
  • Стажеры реально приносят пользу
  • Регрессии сведены к минимуму

Простота работы с проектом

19 of 25

  • Масштабная автоматизация не бесплатна и будет стоить порядка 20-30% времени разработки, но это не дорого
  • Скорость добавления нового функционала вырастает в 1.5-2 раза

А сколько это стоит?

20 of 25

Что бы нам еще улучшить?�

Организацию репозитория!

21 of 25

  • Хорошо известен всем разработчикам
  • Каждый из подпроектов имеет более-менее очерченные границы
  • Часто приводит к “аду зависимостей”
  • Рефакторинг крайне болезненный
  • Координация релиза сложный процесс

Полирепозиторий

22 of 25

  • Все компоненты имеют одну версию
  • Единое сборочное окружение у всех компонент
  • Принуждает всех разработчиков фокусировать на общей цели
  • Система либо работает, либо нет
  • Атомарные коммиты упрощают рефакторинг

Монорепозиторий

23 of 25

  • Все дочерние бранчи содержат одну фичу
  • Trunk всегда поддерживается в рабочем состоянии
  • Никто не сливает в trunk, пока не исправит все CI тесты
  • CI постоянно мониторит состояние пайплана и информирует о проблемах

trunk-based разработка

24 of 25

А что если руководство/PM/TPM/etc. против?

В общем случае, руководство преследует те же цели что и разработчики

С цифрами объяснить, из чего складываются сроки

Показать, во сколько обойдутся изменения

Показать, на сколько и когда улучшится скорость внесения изменений

Наглядно показать, что создает проблемы прямо сейчас

25 of 25

Q&A

LinkedIn