Получите Agile
Я бы предложил следующее:
Редактирование тех же файлов
Сначала используйте Git (или аналогичную систему управления версиями). Пока вы редактируете разные части одних и тех же файлов, вы не получите конфликтов. Если вы получите конфликты, они будут четко помечены как таковые.
Попытка управлять мульти-разработчиком без Git - это все равно, что сделать пудинг без пудинга. Это возможно, но все будет довольно грязно и довольно быстро.
Как было отмечено в комментариях, Git не является панацеей, но в сочетании с автоматизированным тестированием, безусловно, очень помогает.
Перечислите все функции
Во-вторых, разбейте проект на видимые для пользователя функции. Например, «когда пользователь регистрируется, он должен получить электронное письмо» или «Пользователь может добавить элемент». Вовлеките все заинтересованные стороны здесь. Заставьте всех в комнате, и пусть все выкрикивают свои особенности.
Это должны быть видимые для пользователя функции, о стратегии реализации можно поговорить позже.
Запишите все предложения на карточках, даже тупые. Быстро рационализируйте список, чтобы удалить дубликаты, и выложите все карточки на большой стол или даже на пол.
Добавьте любые дополнительные карты, которые необходимы. Скажем, ваше приложение будет отправлять текстовые SMS-оповещения. Вы можете не знать, как это сделать, поэтому у вас есть вопрос. Напишите на карточке «Исследовать SMS порталы». Аналогично для любых других больших неизвестных. Вы должны будете распаковать их позже. Эти функции, вероятно, не попадут в ваш первый спринт.
Теперь рассортируйте свои карты по группам, перемешайте их, почувствуйте их. Это ваш проект.
Планирование покера
Попробуйте планирование покера. По-прежнему вместе со всеми, дайте всем карточкам разработчиков с надписью «1 балл», «2 балла» и т. Д. До «4 баллов». Также «больше» карты. Точка примерно эквивалентна часу.
Просмотрите список возможностей по очереди. Когда вы читаете функцию, каждый должен сыграть в карту. Если один человек играет 1, а другой играет 4, то здесь есть проблема со связью. Один человек понимает особенность, чтобы означать что-то отличное от другого человека. Поговорите и выясните, что на самом деле означало, и запишите это на карточку.
Если вы согласны с тем, что функция «больше», она слишком велика. Вы должны сломать эту функцию. Сделайте это так же, как и раньше.
Если у вас есть согласие, напишите цифры на карточках другим цветным пером.
Очки лучше, чем часы
Использование очков вместо часов лишает мачо «посмотри, как быстро я могу кодировать» то, чем часто занимаются наши разработчики. Это тонкое различие, но я обнаружил, что оно работает довольно хорошо.
Теперь составьте спринт
Спринт - это быстрый прорыв к цели. Определите продолжительность спринта, возможно, 5 или 10 дней. Умножьте количество дней на количество разработчиков на количество очков в день.
Предположим, 6 очков в день на разработчика изначально. Это достижимое число. Если у вас 5 человек, это 5 * 5 * 6 = 150 баллов. Вместе со всеми разработчиками и руководством выбирайте функции из списка, до 150 баллов. Это твой спринт.
Никогда не поддавайтесь соблазну втиснуть больше, чем поместится. Чрезмерное обещание причиняет боль всем, в том числе и вам.
Вам нужно будет принять во внимание зависимости здесь. Например, настройка среды, очевидно, должна быть включена в первый спринт. Это на самом деле относительно легко сделать, когда все присутствуют. В комнате 6 мозгов, все говорят: «Это зависит от этого» и т. Д. Затем вы можете перетасовать карты, чтобы продемонстрировать зависимости.
Если у вас есть свой спринт, к нему ничего нельзя добавить, он заблокирован на 5 дней. Ползучесть функций заставит команду напрячься, повредит моральный дух и замедлит всех. В конце концов, крип остановит проект. Как лидер команды, вы должны защищать свою команду от ползучести. Если поступает запрос новой функции, он должен быть добавлен к следующему спринту. Если следующий спринт уже полон, нужно что-то еще убрать.
Никогда не поддавайтесь искушению втиснуться в статисты. Чрезмерное обещание дает вам около 1 дня счастливого клиента, затем 4 дня командного стресса и, в конечном итоге, скорее всего, несколько несчастных клиентов, когда команда не может выполнить вовремя.
Теперь иди к нему.
Раздайте карточки, спросите, кто хочет что делать. У вас есть полное представление о том, что делается, и вы можете подсчитывать количество баллов до нуля. В начале каждого дня будьте вежливы, чтобы все знали, кто над чем работает и что сделано.
5 или 6 достойных мотивированных разработчиков, работающих вместе как единое целое для четко определенных управляемых целей, могут достичь довольно короткого количества материала за 5-дневный спринт.
Поддерживать видимость
Убедитесь, что все могут видеть статус проекта. Прикрепите все карты к стене. Слева находятся карты, над которыми еще не работали. Справа сделаны карты.
Когда разработчик работает над картой, он снимает ее со стены и кладет на стол. Это поддерживает видимость и удерживает людей от чрезмерного наступления друг на друга.
Существуют технологические альтернативы учетным карточкам, но ничто не сравнится с массивным бумажным отображением статуса проекта на стене.
Если возможно, пусть все будут находиться в одной комнате на протяжении всего проекта. Собирайте как можно больше заинтересованных сторон, в идеале каждый день.
Сгореть
Вы можете изобразить свои точки, прогрессирующие к нулю на графике выгорания. Если ваша линия наилучшего соответствия пересекает ноль, прежде чем вы достигнете своего временного лимита, вы, вероятно, на пути Если нет, возможно, вам необходимо сообщить об этом вашему клиенту, прежде чем вы подойдете слишком близко к сроку.
Если вы собираетесь потерпеть неудачу, потерпите неудачу рано.
Вы можете сделать выжигание, используя программное обеспечение, но я предпочитаю просто большой лист бумаги на стене. Нарисуй и напиши все это.
Автоматизированное тестирование
Когда несколько разработчиков работают над одним и тем же материалом одновременно, они, вероятно, будут время от времени нарушать код друг друга. Коммуникация и видимость помогают в этом, но вы, вероятно, захотите внедрить некоторые технологии, которые помогут найти проблемы.
Модульное тестирование - это процесс написания тестов для каждой отдельной части вашей кодовой базы (в идеале для каждого метода). Ваши юнит-тесты должны выполняться часто, с каждым сохранением, если это возможно. Есть много инструментов, которые могут помочь с этим, например, Karma или Rspec.
Сквозное тестирование включает в себя тестирование вашего проекта в целом, рассматривая внутренние компоненты как черный ящик. Для этих тестов используйте бизнес-требования высокого уровня, например: «Пользователь может зарегистрироваться» или «Пользователь может видеть список элементов». Protractor - хороший пример комплексного веб-тестирования.
Есть целые книги, написанные по тестированию, но наличие хотя бы нескольких приемочных тестов может помочь убедиться, что ничего не сломано, когда вы работаете над своим проектом.
Избегать технического долга и добиваться выполнения
Технический долг - это концепция, которая описывает вещи, которые необходимо будет устранить позже. Распространенным источником долга являются функции, которые были помечены как выполненные, но которые никогда не были «выполнены». Готовая функция проверена в Git, одобрена заинтересованными сторонами и прошла тестирование.
Не проверяйте свои функции, пока они не будут сделаны. Никогда не массируйте график. Опять же, в конечном итоге это ранит всех, включая вас.
Это одна из причин, почему мы изначально выставляем всего 6 баллов за разработчика в день. Готово требует дополнительной работы, но чувствует себя великолепно и дает толчок команде.