TDD – мощная методология, а приемочные тесты – ценное средство выражения и проверки соблюдения требований. Но они являются лишь частью общей стратегии тестирования. Для достижения цели «Контроль качества не должен находить дефекты» группа разработки должна работать в тесном взаимодействии со службой контроля качества для создания иерархии модульных, компонентных, интеграционных, системных и исследовательских тестов. Тесты следует выполнять как можно чаще, чтобы обеспечить максимальную обратную связь и гарантировать постоянную «чистоту» системы.
9Планирование
Восемь часов – на удивление короткий промежуток времени. Это всего лишь 480 минут, или 28 800 секунд. Вы как профессионал должны использовать эти драгоценные секунды как можно более эффективно. Какую стратегию вы изберете, чтобы избежать напрасных затрат своего времени? Как организовать эффективное управление временем?
В 1986 году я жил в Литл-Сэндхерсте (Великобритания). Я руководил отделом разработки Teradyne, в котором работало 15 человек. Мои дни были сплошным хаосом из телефонных звонков, импровизированных встреч, обсуждения проблем обслуживания «на местах» и непредвиденных событий, прерывавших мою работу. Чтобы моя работа выполнялась, мне пришлось установить жесткую дисциплину управления временем.
• Я просыпался в 5 утра и ехал на велосипеде в свой офис к 6 часам. Это давало мне 2,5 спокойных часа до того, как начинался ежедневный хаос.
• Приехав на место, я писал на доске распорядок дня. Я делил время на 15-минутные интервалы и записывал, чем буду заниматься в каждый из интервалов.
• Первые 3 часа моего расписания были полностью распланированы. Начиная с 9 утра я оставлял один свободный 15-минутный интервал на каждый час; это позволяло мне легко перенести большинство прерываний в один из открытых интервалов и продолжить работу.
• Время после обеда оставалось нераспланированным, потому что я знал: к этому моменту сумятица достигает апогея, и в оставшуюся часть дня мне придется разгребать навалившиеся дела. В те редкие дневные периоды, когда хаос не вмешивался в мою работу, я просто трудился над самой важной задачей, пока не происходило что-то непредвиденное.
Моя схема не всегда работала успешно. Просыпаться в 5 утра не всегда получалось, иногда непредвиденные обстоятельства нарушали мою тщательно продуманную стратегию и поглощали весь день. И все же большей частью мне удавалось держаться на поверхности.
Встречи
Встречи обходятся примерно в $200 в час на каждого участника. Здесь учитываются зарплаты, премии, затраты на использование помещения и т. д. Когда вы в следующий раз будете проводить рабочую встречу, посчитайте затраты на нее. Результат вас сильно удивит.
Две истины о встречах:
1) встречи необходимы;
2) встречи часто оказываются бесплодной тратой времени.
Часто эти две истины относятся к одной и той же встрече. Одним участникам встреча кажется бесценной, другим – лишней или бесполезной.
Профессионалы знают, что встречи обходятся дорого. Они также знают, что их собственное время драгоценно; им нужно писать код и выдерживать график. По этой причине они активно сопротивляются посещению встреч, которые не приносят немедленной и значительной пользы.
Отказ от участия
Вы не обязаны посещать каждую встречу, на которую вас приглашают. Более того, посещать слишком много встреч непрофессионально. Время нужно расходовать разумно. Будьте очень осмотрительны с выбором встреч, которые нужно посетить или от которых нужно вежливо отказаться. Человек, приглашающий вас на встречу, не отвечает за управление вашим временем – за него отвечаете только вы. Таким образом, получив приглашение, не принимайте его, если только ваше участие не объясняется немедленной и значительной необходимостью для текущей работы.
Иногда встреча посвящена теме, которая представляет для вас интерес, но не является строго необходимой. Решайте сами, сможете ли вы выделить для нее время. Будьте осторожны – такие встречи способны поглотить все ваше рабочее время.
Иногда вы знаете, что ваше участие может принести пользу, но встреча не является непосредственно значимой для того, чем вы сейчас занимаетесь. Решайте, компенсируются ли потери для вашего проекта пользой для других проектов. Возможно, это прозвучит цинично, но вы в первую очередь отвечаете за свои проекты. Тем не менее взаимопомощь групп часто приносит пользу, так что вы можете обсудить возможность своего участия со своей группой и начальством.
Иногда с просьбой о вашем присутствии на встрече к вам обращается какое-нибудь авторитетное лицо – например, технический специалист очень высокого уровня или руководитель другого проекта. Вам придется решать, перевешивает ли этот авторитет ваш рабочий график. Как и в предыдущем случае, в принятии решения может помочь группа или начальство.
Одна из самых важных обязанностей вашего руководителя – удерживать вас от участия в лишних встречах. Хороший руководитель более чем охотно защитит ваш отказ от участия, потому что ваше время представляет для него такую же ценность, как и для вас.
Уход со встречи
Встречи не всегда идут так, как планировалось изначально. Иногда вы сознаете, что отказались бы от участия в текущей встрече, если бы знали больше. На встрече могут подниматься новые темы или в обсуждении на первый план выходит чья-то излюбленная тема. За годы я выработал простое правило: если на встрече стало скучно – уходите.
Еще раз напомню, что вы обязаны эффективно управлять своим временем. Если вы застряли на встрече, которая лишь понапрасну расходует ваше время, найдите способ вежливо покинуть эту встречу.
Разумеется, не нужно в гневе выбегать из помещения с восклицанием: «Какая скука!» Не нужно проявлять неуважение. Просто спросите в подходящий момент, насколько необходимо ваше присутствие. Объясните, что вы не можете выделить больше времени, и спросите, нельзя ли ускорить обсуждение или изменить повестку дня. Важно понять, что оставаться на встрече, расходующей ваше время, в ход которой вы не можете внести сколько-нибудь значительного вклада, было бы непрофессионально. Вы обязаны разумно тратить время и деньги своего работодателя, поэтому в выборе подходящего момента для обсуждения вашего ухода нет ничего зазорного.
Повестка дня и цель
Почему мы смиряемся с затратами на проведение встреч? Потому что иногда бывает нужно собрать всех участников в одной комнате для достижения конкретной цели. Чтобы время участников расходовалось эффективно, встреча должна иметь четкую повестку дня с указанием цели и времени обсуждения по каждой теме.
Если вас просят прийти на встречу, убедитесь в том, что вы знаете, какие темы будут обсуждаться, сколько времени на них выделено и какая цель должна быть достигнута. Если вам не удается получить четкие ответы на эти вопросы, вежливо откажитесь от участия.
Если, придя на встречу, вы обнаруживаете, что повестка дня сорвана или изменена, предложите отложить новую тему и вернуться к исходной повестке. Если этого не произойдет, вежливо покиньте встречу при первой возможности.
Пятиминутка
«Пятиминутки» являются частью канона гибких методологий. Название происходит от того факта, что участники обычно стоят во время проведения встречи. Все участники поочередно отвечают на три вопроса:
1. Что я сделал вчера?
2. Что я буду делать сегодня?
3. Какие сложности мне предстоит решить?
Вот и все. Ответ на каждый вопрос должен занимать не более 20 секунд, так что на каждого участника уйдет не более минуты. Даже в группе из 10 человек встреча будет закончена за 10 минут.
Встречи планирования итераций
Самая сложная разновидность встреч в каноне гибких методологий. При плохом исполнении они занимают слишком много времени. Для хорошего проведения таких встреч необходимы соответствующие навыки, которые стоит освоить.
На встречах планирования итераций из списка реализации должны выбираться те элементы, которые должны быть выполнены в ходе следующей итерации. Оценки и прогнозы коммерческой ценности выполняются заранее. При действительно хорошей организации работ приемочные/компонентные тесты должны быть уже написаны или хотя бы определены в черновом варианте.
Встреча должна проходить достаточно быстро: краткое обсуждение по каждому элементу списка реализации, после чего элемент либо выбирается, либо отклоняется. Ни на один элемент не должно уходить более 5 или 10 минут. Если потребуется более подробное обсуждение, запланируйте его на другое время с частью группы.
У меня есть простое эмпирическое правило: встреча не должна занимать более 5 % общего времени итерации. Таким образом, для недельной итерации (40 часов) встреча должна завершаться в пределах двух часов.
Ретроспективные встречи по итерациям и демонстрации
Эти встречи проводятся в конце каждой итерации. Участники группы обсуждают, что прошло хорошо, а что плохо. Ключевые участники видят демонстрацию новых возможностей. При неправильной организации эти встречи могут занимать очень много времени; планируйте их за 45 минут до завершения последнего дня итерации. Выделяйте не более 20 минут на ретроспективу и 25 минут на демонстрацию. Не забудьте, что прошли всего одна-две недели, так что материала для обсуждения не так уж много.
Споры и разногласия
Кент Бек однажды сказал мне очень важную вещь: «Любой спор, который не удается завершить за 5 минут, не может быть решен обсуждением». Если спор занимает слишком много времени, значит, не существует четких доказательств в пользу одной из сторон. В таких ситуациях спор обычно имеет религиозную подоплеку, а не базируется на фактах.
Технические разногласия порой заходят за край. У каждой стороны имеются всевозможные обоснования своей позиции, которые редко подкрепляются данными. Без данных любой спор, который не приходит к согласию за несколько минут (от 5 до 30), попросту не способен прийти к согласию. Единственное, что можно сделать в такой ситуации, – это раздобыть данные.
Некоторые люди пытаются выиграть в споре за счет демонстрации характера. Они кричат, пытаются давить или изображают снисходительность. Это не важно; сила воли не может разрешить спор на продолжительное время. Данные – могут.
Другие занимают пассивно-агрессивную позицию. Они соглашаются просто для того, чтобы закончить спор, а затем саботируют результат, отказываясь участвовать в решении. Они говорят себе: «Вы так хотели, вот теперь сами и разбирайтесь». Вероятно, это худший из вариантов непрофессионального поведения. Никогда, никогда не поступайте подобным образом. Если вы соглашаетесь, то вы обязаны участвовать.
Как получить данные, необходимые для урегулирования разногласий? Иногда можно провести эксперимент, устроить имитацию или моделирование. А иногда лучше всего попросту бросить монетку, чтобы выбрать один из двух путей.
Если все получилось, значит, этот путь был работоспособным. Если возникли проблемы – вернитесь и опробуйте другой путь. Заранее согласуйте время и набор критериев, по которым будет приниматься решение об отказе от выбранного пути.
Остерегайтесь встреч, которые проводятся только для подавления разногласий и привлечения поддержки одной из сторон. Также избегайте встреч, на которых присутствует только одна из спорящих сторон.
Если спор необходимо урегулировать, попросите каждую сторону изложить свои аргументы группе не более чем за 5 минут, после чего проведите голосование. Вся встреча займет не более 15 минут.