Управление людьми

Люди - ваш основной капитал, и вам нужно уделять большое внимание работе с ними.

Важными аспектами вашей деятельности должны стать:

  • регулярные беседы один на один с вашими сотрудниками. Получение обратной связи и ваше непосредственное воздействие на них;
  • премирование сотрудников. Лучше всего подходит регулярное отмечание релизов.

Появлению новых сотрудников в вашей компании предшествует открытие вакансий и проведение собеседований. Этим также занимаетесь вы как руководитель.

Когда сотрудник приходит в свой первый рабочий день, вы знакомите его с коллективом, проводите минимальный инструктаж, входите вместе с ним в систему и открываете в браузере Landing Page для нового программиста, которую вы заранее готовите. Эта стартовая страница позволяет программисту быстро и автономно включиться в производственный процесс.

Landing Page должна включать в себя ссылки на следующие страницы:

  • настройка рабочего места, включающая в себя перечень и адреса ПО, которое программисту нужно будет установить самостоятельно (Visual Studio, расширения для Visual Studio, ReSharper, Git, Wix, SQL Server Management Studio, Postmap, Fiddler, компоненты Windows), а также перечень необходимых настроек системы, которые надо произвести (например, добавить адрес локального nuget-сервера);
  • рабочая инструкцию программиста;
  • требования к разработке (архитектуре и исходному коду);
  • список проектов и ответственных за них (оттуда можно перейти к более подробным описаниям архитектуры проектов);
  • описание правил работы с багтрекером (как увидеть список задач, использовать фильтры, менять статусы, как отмечать отработанное время и т.д.).

Следует сказать программисту, чтобы он не стеснялся высказывать замечания, если его что-то не устраивает. Нужно написать программисту письмо, в котором указать, какими проектами он будет заниматься, чтобы он уделил им особое внимание.

После этого программист приступает к продолжительному чтению. В это время необходимо дать ему права на доступ к вашим системам (JIRA, Stash, TeamCity) и добавить его в команду программистов в JIRA.

Далее необходимо назначить на программиста задачи, чтобы он с первого дня начал работать по принятым в компании правилам.

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

После этого на него назначаются несколько реальных задач, поначалу не очень сложных.

Далее программист уже начинает работать в обычном режиме.

Рабочая инструкция программиста

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

Задачи программисту ставятся только через систему багтрекинга и не в коем случае не устно. Список лиц, которые могут ставить задачи программисту, ограничен (менеджер проекта, руководитель разработки, программисты и тестировщики). Программист не может ставить задачи самому себе, но может разбивать их на подзадачи.

Программист должен уметь оценивать трудоёмкость выполнения задачи. В качестве оценок используется дискретный набор значений, образующих последовательность Фибоначчи. Это ускоряет процесс оценки трудоёмкости, так как в любом случае такая оценка будет всегда приблизительной.

Задачи с трудоёмкостью более одного дня необходимо разбивать на подзадачи продолжительностью не более дня. Иначе возникает риск, что программист продолжительное время может заниматься какой-то задачей, а прогресс по ней непонятен.

Основной цикл работы программиста:

  1. Программист выбирает из назначенных на него задач текущей итерации задачу, имеющую наибольший ранг. Если программист не работает в рамках итерации, он выбирает назначенную на него задачу с наибольшим приоритетом.
  2. Далее программист получает или обновляет исходные коды с сервера для существующего проекта, либо же создаёт исходный код для нового проекта. Задача переход в статус “В работе”. Если программист работает с использованием Code Review, он создаёт отдельную ветвь для работы над задачей.

    Периодически следует обновлять исходники актуальной версией с сервера.
  3. Программист вырабатывает план выполнения задачи, при необходимости разбивая её на подзадачи.
  4. Программист пишет код, выполняя задачу.
  5. Программист выполняет коммит, фиксируя изменения. Коммит привязывается к задаче.
  6. Программист отправляет коммит на сервер, где код собирается, прогоняются автоматические тесты.
  7. Если всё прошло нормально, то задача переводится в состояние “Решена”. Также программист отмечает время, затраченное на решение задачи. При использовании Code Review программист создаёт Pull Request на включение изменений из его ветви в основную ветвь разработки.

Ревью кода - особый режим деятельности программиста, при котором он не выполняет задачи, а изучает чужие изменения в коде. На Code Review программисту выделяется какое-то время, например час в день.

Работа строится следующим образом:

  1. Программист находит открытые Pull Request’ы в проекте, в которых он назначен ревьюером, и выбирает любой из них.
  2. Программист оценивает качество реализации: оформление кода (соответствие принятым в компании требованиям) и эффективность алгоритма (без глубокого погружения). При необходимости программист оставляет комментарии и может вести переписку с автором изменений.
  3. Если ревьюера что-то не устраивает, он создаёт задачи на доработку.
  4. Когда все замечания устранение, ревьюер переводит Pull Request в статус “Approved”.

Ещё один вид деятельности программиста - консультации и участие в совещаниях. Программист консультирует своих коллег по исходному коду проекта, а также выступает в роли технического эксперта при обсуждении тех или иных перспективных разработок. От программиста может потребоваться описать алгоритм работы системы или API некоторого модуля в системе документирования.

Учёт рабочего времени

Важной частью контроля за работой программистов является система учёта рабочего времени. Программист записывает время, отведённое на решение каждой задачи. Суммарное затраченное время должно составить 80% от его общего рабочего времени (остальное время списывается на переключения между задачами). При отметке об отработанном времени необходимо оставлять комментарий о том, что же было сделано по задаче.

Благодаря подсчёту затраченного времени у вас будет возможность оценить загруженность программистов и временнЫе затраты на каждый проект.

Обучение

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

Далее