Сделать меньше, успеть больше: оптимизация Java-разработки
Укладываться в дедлайны, работая без “срочняков”, давать качественный продукт, получая удовольствие от работы – под силу ли такое Java-девелоперу?
Тимлид Java-разработки Евгения Губарева знает, как эффективно выстроить работу отдела. Сегодня мы уговорили её поделиться секретами продуктивной работы своей команды. Женя скромная – просит воспринимать их не как руководство к действию, а в формате дружеских рекомендаций “Мы делаем так и у нас всё хорошо”.
Внимание! Чтение лонгрида строго противопоказано людям, непричастным к миру Java. :)
Что делает разработчика счастливым?
По мнению Жени, именно с этого вопроса нужно начинать строить свой идеальный рабочий день. Её команда ориентируется на:
- решение сложных задач
- изучение новых технологий
- хороший код
- удобные инструменты
- выполнение задач в срок
- “нашел баг, починил и все заработало”.
1. Развертывание проекта локально
На этом этапе бороться со сложностями помогут:
- заглушки для сторонних сервисов
- изолированные базы данных
- каталог настроек для различного окружения
- запуск одной командой
- возможность запуска без IDE
Что получаем? Удобную песочницу и скрипты автоматизации для развертывания приложений. А еще теперь любой сможет развернуть приложение локально или на новом стенде.
2. Работа над задачей
Начнём с того, что помогает сэкономить время при работе с системой контроля версий:
- политика ветвления
- развитие кода в master ветке
- актуализация активных веток
- короткий жизненный цикл ветки (не более одного релиза)
- исполняемый код, конфигурации, настройки хостов и окружения, данные - в VCS
Организационные фишки, которые облегчат работу с кодом и ускорят процесс:
- стандарт написания кода (code convention)
- IDE + расширения
- статический анализ кода
- организация кода по модулям
Так, а что у нас с базами данных?
- все изменения базы - через скрипты, миграции
- скрипты обновления лежат в VCS
- обновление БД является частью развертывания
- ролевое управление доступом к БД
- аудит изменений
- покрывать каждый сценарий — как позитивный, так и негативный — автотестами
- тесты:
— сами готовят себе данные
— могут быть запущены параллельно
— «прибирают» за собой
— могут быть запущены локально
Ингредиенты check-stand’а
- Скрипт развертывания
- Автоматическое тестирование
- Анализ кода
- Пороги качества:
— все тесты успешно проходят
— время прохождения тестов не превышает заданного порога
— в логах нет ошибок
— quality gate.
Рецепт check-stand’а:
- запуск не требует ручного вмешательства
- фейлить билд, как только нарушен порог качества
- фейлить билд как можно быстрее
- своевременный и понятный фидбек о состоянии сборки
- быстрая сборка (~10 мин)
- причины падения сборок исправлять как можно быстрее
- настроено логирование и мониторинг
Что получили? Минимизировали ручной труд, и качество кода теперь под контролем. Число ошибок снизилось, а стресса стало гораздо меньше. Уверенность в проекте подросла!
3. Ревью: сокращаем времязатраты
Чтобы быстрее докатить в продакшн и доставить фичу заказчику:
- делим задачи на мелкие правки (Branch by Abstraction)
- обсуждаем крупные изменения с ревьюверами до начала реализации
- включаем статический анализ и форматирование кода
- code convention
- нотифицируем участников о состоянии задачи
- поддерживаем стабильно работающие check-stand’ы
- интегрируем процесс с трекером задач.
Готово! Всем идеального рабочего дня! ;)