Люди - ваш основной капитал, и вам нужно уделять большое внимание работе с ними.
Важными аспектами вашей деятельности должны стать:
- регулярные беседы один на один с вашими сотрудниками. Получение обратной связи и ваше непосредственное воздействие на них;
- премирование сотрудников. Лучше всего подходит регулярное отмечание релизов.
Появлению новых сотрудников в вашей компании предшествует открытие вакансий и проведение собеседований. Этим также занимаетесь вы как руководитель.
Когда сотрудник приходит в свой первый рабочий день, вы знакомите его с коллективом, проводите минимальный инструктаж, входите вместе с ним в систему и открываете в браузере Landing Page для нового программиста, которую вы заранее готовите. Эта стартовая страница позволяет программисту быстро и автономно включиться в производственный процесс.
Landing Page должна включать в себя ссылки на следующие страницы:
- настройка рабочего места, включающая в себя перечень и адреса ПО, которое программисту нужно будет установить самостоятельно (Visual Studio, расширения для Visual Studio, ReSharper, Git, Wix, SQL Server Management Studio, Postmap, Fiddler, компоненты Windows), а также перечень необходимых настроек системы, которые надо произвести (например, добавить адрес локального nuget-сервера);
- рабочая инструкцию программиста;
- требования к разработке (архитектуре и исходному коду);
- список проектов и ответственных за них (оттуда можно перейти к более подробным описаниям архитектуры проектов);
- описание правил работы с багтрекером (как увидеть список задач, использовать фильтры, менять статусы, как отмечать отработанное время и т.д.).
Следует сказать программисту, чтобы он не стеснялся высказывать замечания, если его что-то не устраивает. Нужно написать программисту письмо, в котором указать, какими проектами он будет заниматься, чтобы он уделил им особое внимание.
После этого программист приступает к продолжительному чтению. В это время необходимо дать ему права на доступ к вашим системам (JIRA, Stash, TeamCity) и добавить его в команду программистов в JIRA.
Далее необходимо назначить на программиста задачи, чтобы он с первого дня начал работать по принятым в компании правилам.
- подготовить рабочее место;
- ознакомиться с документацией;
- получить исходники и собрать их локально.
После этого на него назначаются несколько реальных задач, поначалу не очень сложных.
Далее программист уже начинает работать в обычном режиме.
Рабочая инструкция программиста
Важнейшим документом, определяющим работу программиста, является его рабочая инструкция. Это описание алгоритма, по которому программист может работать при отсутствии каких-либо управляющих воздействий с внешней стороны.
Задачи программисту ставятся только через систему багтрекинга и не в коем случае не устно. Список лиц, которые могут ставить задачи программисту, ограничен (менеджер проекта, руководитель разработки, программисты и тестировщики). Программист не может ставить задачи самому себе, но может разбивать их на подзадачи.
Программист должен уметь оценивать трудоёмкость выполнения задачи. В качестве оценок используется дискретный набор значений, образующих последовательность Фибоначчи. Это ускоряет процесс оценки трудоёмкости, так как в любом случае такая оценка будет всегда приблизительной.
Задачи с трудоёмкостью более одного дня необходимо разбивать на подзадачи продолжительностью не более дня. Иначе возникает риск, что программист продолжительное время может заниматься какой-то задачей, а прогресс по ней непонятен.
Основной цикл работы программиста:
- Программист выбирает из назначенных на него задач текущей итерации задачу, имеющую наибольший ранг. Если программист не работает в рамках итерации, он выбирает назначенную на него задачу с наибольшим приоритетом.
- Далее программист получает или обновляет исходные коды с сервера для существующего проекта, либо же создаёт исходный код для нового проекта. Задача переход в статус “В работе”. Если программист работает с использованием Code Review, он создаёт отдельную ветвь для работы над задачей.
Периодически следует обновлять исходники актуальной версией с сервера. - Программист вырабатывает план выполнения задачи, при необходимости разбивая её на подзадачи.
- Программист пишет код, выполняя задачу.
- Программист выполняет коммит, фиксируя изменения. Коммит привязывается к задаче.
- Программист отправляет коммит на сервер, где код собирается, прогоняются автоматические тесты.
- Если всё прошло нормально, то задача переводится в состояние “Решена”. Также программист отмечает время, затраченное на решение задачи. При использовании Code Review программист создаёт Pull Request на включение изменений из его ветви в основную ветвь разработки.
Ревью кода - особый режим деятельности программиста, при котором он не выполняет задачи, а изучает чужие изменения в коде. На Code Review программисту выделяется какое-то время, например час в день.
Работа строится следующим образом:
- Программист находит открытые Pull Request’ы в проекте, в которых он назначен ревьюером, и выбирает любой из них.
- Программист оценивает качество реализации: оформление кода (соответствие принятым в компании требованиям) и эффективность алгоритма (без глубокого погружения). При необходимости программист оставляет комментарии и может вести переписку с автором изменений.
- Если ревьюера что-то не устраивает, он создаёт задачи на доработку.
- Когда все замечания устранение, ревьюер переводит Pull Request в статус “Approved”.
Ещё один вид деятельности программиста - консультации и участие в совещаниях. Программист консультирует своих коллег по исходному коду проекта, а также выступает в роли технического эксперта при обсуждении тех или иных перспективных разработок. От программиста может потребоваться описать алгоритм работы системы или API некоторого модуля в системе документирования.
Учёт рабочего времени
Важной частью контроля за работой программистов является система учёта рабочего времени. Программист записывает время, отведённое на решение каждой задачи. Суммарное затраченное время должно составить 80% от его общего рабочего времени (остальное время списывается на переключения между задачами). При отметке об отработанном времени необходимо оставлять комментарий о том, что же было сделано по задаче.
Благодаря подсчёту затраченного времени у вас будет возможность оценить загруженность программистов и временнЫе затраты на каждый проект.
Обучение
Полезно также организовать для программиста как обучение продукту, который он будет сопровождать, так и обучение принятым в компании методологиям и технологиям со сдачей последующего экзамена. Сдача экзамена может приравниваться к прохождению испытательного срока.
Далее