Как организовать проект, чтобы не было мучительно больно
Bishkek
Александр Ставонин
О докладчике
Выпускник Политеха 2003 года
Более 20 лет опыта в IT
Распределенные системы, безопасность, управление процессами и проектами
C++, Go, Python, Elixir, Unix
Kaspersky Lab, Samsung, Autodesk и Motional
1. Понятие проекта и его составляющие, включая системы развертывания, код компонентов и техническую документацию
2. Применимость подходов в зависимости от размера проекта и контекста разработки
3. Факторы, влияющие на сроки, включая поддержку текущей функциональности, технический долг и регрессии
4. Важность автоматизации и правильного пайплайна для ускорения добавления новой функциональности и устранения дефектов
5. Роль технической документации и ее влияние на организацию проекта
Ключевые моменты
Составные компоненты конечного продукта:
Зависимости
Проект это…
Сервис
Сервис
Сервис
Библиотека
Библиотека
Библиотека
Зависимости
Зависимости
Си
Система
Система сборки
Документация
Документация
Документация
Система развертывания
Применимость
Из чего складываются сроки?
Под поддержкой проекта понимаются рутинные активности направленные на обеспечение бесперебойного функционирования всех активных версий продукта
Поддержка проекта
Под определение технического долга попадают все технические упрощения, на которые пришлось пойти, чтобы выполнить поставку в срок.
© Atlassian Wiki
Основные причины появления технического долга:
Технический долг
Регрессия - это ситуация, когда изначально работавшая функциональность перестает работать.
Регрессии
Новый функционал в неделю = (Продуктивность команды - (② + ③ + ④))
* Сложность нового функционала
* Неделя
Новая функциональность
Что можно улучшить?
Повышение качества проекта - это наиболее простой и масштабируемый способ ускорения разработки.
Ускорение разработки
Многоуровневое автоматическое тестирование
Линтер - статический анализатор кода. Доступны для практически всех языков программирования, даже для Bash.
Санитайзер - динамический анализатор кода во время исполнения. Доступны для основных реализаций C, C++ и Rust.
Фаззер - тестирование с рандомизированными данными.
Линтеры и Санитайзеры
Пайплайн - ключевой элемент любого проекта, способный оказать непосредственное влияние на количество регрессий и общее качество кодовой базы.
Пайплайн и регрессии
Хорошая проектная документация включает в себя не только README.md в корне проекта, но и описание ключевых проектных решений
Requests for Comments (RFC) и Architecture Decision Records (ADR)
Проектная документация
Чем проще работать с проектом, тем ниже требования к доступным ресурсам и выше скорость внесения изменений.
Простота работы с проектом
А сколько это стоит?
Что бы нам еще улучшить?�
Организацию репозитория!
Полирепозиторий
Монорепозиторий
trunk-based разработка
А что если руководство/PM/TPM/etc. против?
В общем случае, руководство преследует те же цели что и разработчики
С цифрами объяснить, из чего складываются сроки
Показать, во сколько обойдутся изменения
Показать, на сколько и когда улучшится скорость внесения изменений
Наглядно показать, что создает проблемы прямо сейчас
Q&A
LinkedIn ⬇