— В таком случае, — произнес Аллан, — я сначала сделаю генератор ходов, который сможет разыгрывать шесть шестиугольников подряд, чтобы составить кольцо. Противника, пытающегося помешать генератору, не будет. Генератор начнет ходить со случайной клетки и пытаться построить кольцо за шесть ходов. Потом я доработаю его так, чтобы он мог строить кольца, даже если противник будет пытаться блокировать их. После этого я переключусь на защитную стратегию и попробую сделать генератор, который научится блокировать действия игрока, пытающегося построить кольцо. Думаю, для этой истории этого хватит.
— Тогда я пишу такую карточку задачи: «Создать генератор ходов, который может построить кольцо в отсутствие блокировок». Именно это ты собираешься делать в первую очередь, — сказала Саша.
— Пожалуй, на это у меня уйдет львиная доля дня. Поставь, пожалуйста, на карточке шесть часов, — попросил Аллан.
— Аллан, без обид, ты всегда чересчур оптимистичен перед началом разработки нового генератора ходов, — заметила Роуз, художник.
— Да, есть такое. Давайте лучше удвоим оценку, — согласился Аллан.
Саша зачеркнула «шесть» на карточке и поставила 12.
Карлос руководил обсуждением оценок остальных задач, идентифицированных Алланом. «Есть ли еще неидентифицированные задачи для этой истории?» — спросил он.
— Не забывайте, что нужно еще время на тестирование! — сказал Прасад. — Если Аллан будет давать мне код после выполнения каждой из идентифицированных им задач, то я смогу определять и автоматизировать тесты одновременно с ним. О выявленных ошибках он будет узнавать, пока информация о коде еще не выветрилась у него из головы. Я написал задачи на карточках, пока Аллан рассказывал, как он будет работать, но они еще не оценены. Может быть, сделаем это вместе?
Когда члены команды закончили обсуждение истории «Как игрок я могу играть против слабого движка, распознающего только кольца», они представили карточки задач с оценками (табл. 23.7).
— В этой итерации порядка 84 часов. Работа распределена между Алланом, Сашей и Прасадом, — сказал Карлос. — Исходя из того, что я видел здесь в течение двух дней, думаю, нам следует рассчитывать на шесть часов продуктивной работы в день на человека. Оставшаяся часть дня уходит на переписку, переговоры с другими проектными командами, ежедневные совещания и т. п. плюс полдня каждые две недели, затрачиваемые на планирование.
— Шесть, на мой взгляд, нормально.
— На мой тоже. Может быть, даже ближе к пяти, но я постараюсь, чтобы в этом проекте было шесть. Думаю, это реально, если отказаться от некоторых мелочей, которые каждый день съедают время, — сказала Саша.
— Теперь, когда вы разбили первую историю на задачи, — сказал Карлос, — вам нужно задаться вопросом, готовы ли вы взять обязательство реализовать эту историю.
— Историю или задачи? — спросил Фрэнк. — В отношении чего мы должны взять обязательство?
— Хороший вопрос, Фрэнк, — заметил Карлос. — Вы берете обязательство в отношении истории. Задачи идентифицировались как способ определить, какой объем работы предстоит сделать, и помочь взять обязательство. Поскольку обязательство берется в отношении истории, а не задач, важно, чтобы вы думали о нем как об обязательстве всей команды. Я не хочу, чтобы в конце итерации Саша сказала, что она сделала свою часть работы, связанной с классами управления состоянием, а Аллан нет. Это не приводит ни к чему хорошему. Вы можете думать о задачах, но обязательства принимаете в отношении историй.
— Любопытно, — сказал Фрэнк. — Мне нравится различие.
— Я могу взять обязательство в отношении этой истории, — заявил Прасад. — У меня задачи тестирования объемом 36 часов. При шести часах в день в течение 10 дней я располагаю 60 часами.
— А у нас с Алланом объем задач 48 часов. Это не будет проблемой, — сказала Саша.
— Отлично. Мы спланировали первую историю и взяли обязательство реализовать ее, — сказал Фрэнк. — На очереди вторая по важности история.
— Фрэнк, прежде чем сделать это, давайте посмотрим на доступность членов команды в течение следующих двух недель, — предложил Карлос. — Мы решили исходить из шести часов в день на человека, но может оказаться, что у кого-то на период итерации приходится выходной или отпуск.
— Я беру два выходных дня. Я отправила пару картин на выставку в Сан-Франциско и хочу посмотреть, как там идут дела, — сказала Роуз.
— Пожалуй, и я возьму выходной. В пятницу или в понедельник, — вставил слово Аллан.
— А ко мне на следующей неделе приезжают родители. Слишком длительное общение с ними сведет меня с ума, поэтому я буду работать сверхурочно! — пошутила Делани.
Пока шел разговор, Карлос делал на доске маркером пометки (табл. 23.8). «Это поможет нам определиться, какой объем обязательств мы можем взять, когда будем рассматривать следующие истории», — пояснил он.
— Спасибо, Карлос, — сказал Фрэнк. — Что теперь на очереди?
— Мне очень хочется получить возможность игры человека с человеком, — сказала Делани.