ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 25.10.2023
Просмотров: 366
Скачиваний: 11
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Глава 3. Методы взаимодействия с клиентами
Не поймите превратно . В начале 1990-х мы с моим партнером Джи- мом Ньюкирком благополучно управляли командой, все члены которой находились на удаленке . Почти все работали только из дома . Некоторые жили в других часовых поясах . Мы лично встре- чались от силы пару раз в год . С другой стороны, мы все говорили на одном языке, у нас был один менталитет, а разница во времени не превышала двух часов . У нас получалось работать . И мы рабо- тали . Весьма хорошо . Но мы бы работали лучше, если бы находись в одной комнате .
ЗАКЛЮЧЕНИЕ
На встрече в Сноуберде в 2000 году Кент Бек выразил мысль, что одна из наших задач — построить мост над пропастью, существую- щей между клиентами и разработчиками . Методы взаимодействия с клиентами играют важную роль при выполнении этой задачи .
Если применять этот метод, то у разработчиков и клиентов будет простой и однозначный способ общения . Такое общение порождает доверие .
4
МЕТОДЫ
ВЗАИМОДЕЙСТВИЯ
ВНУТРИ КОМАНДЫ
Глава 4. Методы взаимодействия внутри команды
152
Средняя полоса модели жизненного цикла Рона Джеффриса со- стоит из методов взаимодействия внутри команды . Эти методы регулируют отношения членов команды и их отношение к созда- ваемому продукту . Методы, которые мы обсудим, — это метафора,
40-часовая рабочая неделя, коллективное владение и непрерывная
интеграция .
А потом кратко обсудим стендап-митинги .
Метафора
В годы накануне и после подписания Манифеста Agile метафора была методом расплывчатым, нам было стыдно, что не могли дать ему нормального описания . Мы знали, что это важно, поэтому мог- ли привести удачные примеры . Но четко выразить то, что имели в виду, у нас не получалось . В некоторых наших беседах, на курсах и лекциях мы просто вскакивали и, выпучив глаза, восклицали:
«Да вы сами все поймете, когда увидите!»
Для плодотворного общения команде требуется ясный и упоря- доченный словарный запас из понятий и концепций . Кент Бек предложил понятие «метафора», так как это связывало его проекты с чем-то, о чем у всех команд было общее представление .
Первым примером Бека была метафора, которая использовалась в проекте расчета заработной платы «Крайслер»
1
. Он сравнил оформление зарплатных чеков с конвейером . Чеки движутся от одной точки к другой, где к ним присоединяют разные «запча- сти» .
1
https://en.wikipedia.org/wiki/Chrysler_Comprehensive_Compensation_System.
153
Методы взаимодействия внутри команды
Пустой чек перемещается на точку, где на нем ставят идентифика- ционный номер сотрудника . Потом он попадает на точку, где начис- ляется зарплата до вычета налогов . Затем он добирается до точки, где вычитаются налоги, затем до точки, где вычитаются расходы на медицинское страхование, затем до точки, где идут отчисления в пенсионный фонд . . . Ну вы поняли .
Программисты и клиенты могут довольно просто применить такую метафору к подготовке зарплатного чека . Она дала им словарный запас, чтобы говорить о программах .
Но метафоры часто заводят не туда .
Например, в конце 1980-х я работал над проектом, в котором из- мерялось качество передачи данных в сетях T1 . Мы загрузили дан- ные счетчиков ошибок с конечных точек каждой линии связи . Эти данные были объединены в слои по полчаса . Мы рассматривали эти слои как ломтики чего-то сырого, из чего можно приготовить еду . Когда мы нарезаем хлеб ломтями, где мы жарим ломтики?
В тостере! И тут мы метафорически стали описывать хлеб .
У нас были ломтики, батоны, сухари и так далее .
У программистов такой словарный запас работал неплохо . Мы отлично понимали друг друга, когда разговаривали о сырых и при- готовленных ломтиках, батонах и так далее . С другой стороны, менеджеры и клиенты, которые слышали наши разговоры, крутили пальцем у виска и выходили из комнаты . Им казалось, что мы не- сем чушь .
А есть пример еще хуже . В начале 1970-х я работал над системой разделения времени . Она перемещала приложения в память, кото- рая была ограничена, и выгружала их из нее . За время, за которое
Глава 4. Методы взаимодействия внутри команды
154
приложение находилось в памяти, она загружала в буфер текст и отправляла его на медленный телетайп . Когда буфер заполнялся, приложение уходило в спящий режим и выгружалось из памяти на диск, в то время как буфер постепенно очищался . Мы называли такие буферы мусоровозами, которые ездили между мусорными баками и свалкой .
Мы думали, что это гениально . Мы не могли сдержать смешков, ког- да разговаривали о метафорическом мусоре . По сути, мы говорили, что наши клиенты — торговцы мусором . Такая метафора была удоб- на для общения между нами, но она выражала неуважение к тем, кто нам платил . Они никогда не узнали об этой метафоре .
Эти примеры показывают как преимущества, так и недостатки метафоры . Метафора формирует словарь, который позволяет нам успешно общаться внутри команды . С другой стороны, некоторые метафоры глупо звучат и являются оскорбительными по отноше- нию к клиенту .
Предметно-ориентированное
проектирование
В своей прогрессивной книге Domain-Driven Design
1
Эрик Эванс решил нашу проблему с метафорами, и наконец мы избавились от чувства стыда . В этой книге он ввел понятие повсеместного языка — как раз так стоило назвать метод, который получил на- звание «метафора» . Команде была нужна именно модель пред- метной области, которую описывают теми словами, с которыми согласны все .
1
Evans E . Domain-Driven Design: Tackling Complexity in the Heart of Software .
Boston, Massachusetts: Addison-Wesley, 2003 .
155
Методы взаимодействия внутри команды
Под «всеми» я имею в виду всех: программистов, QA-специа лис- тов, менеджеров, клиентов, пользователей и так далее .
В 1970-х Том Демарко назвал такие модели «словарями данных»
1
Они были простыми представлениями данных, которыми мани- пулирует приложение, и процессов, которые манипулировали этими данными . Эванс значительно развил этот простой замысел в дисциплину моделирования предметной области . И Демарко, и Эванс использовали эти модели как транспортные средства для общения с партнерами .
Как простой пример: я недавно написал видеоигру Space War .
Элементы данных носили названия «корабль», «клингон», «рому- ланин», «выстрел», «удар», «взрыв», «база», «транспорт» и про- чее . Я внимательно относился к тому, чтобы изолировать эти понятия в их собственных модулях и использовать эти названия исключительно в приложении . Это был мой «повсеместный язык» .
Такой язык используется во всех частях проекта . На нем говорят клиенты . Разработчики говорят на нем . И QA-специалисты . Спе- циалисты по DevOps тоже на нем говорят . Даже клиенты берут на вооружение те части, которые будут им полезны . Повсеместный язык применяется в бизнес-моделях, требованиях, архитектуре и приемочном тестировании . Он прочной нитью последовательно объединяет составляющие проекта на каждом этапе его жизнен- ного цикла
2 1
DeMarco T . Structured Analysis and System Specification . Upper Saddle River,
New Jersey: Yourdon Press, 1979 .
2
«Это энергия, создаваемая всеми живыми существами . Она снаружи и вну- три нас . Она связывает всю Галактику» . Лукас Дж . Звездные войны . Эпизод
IV: Новая надежда . 1979 . Кинокомпания «Лукасфилм» .
Глава 4. Методы взаимодействия внутри команды
156
40-ЧАСОВАЯ РАБОЧАЯ НЕДЕЛЯ
Не быстрый побеждает в беге . . .
Екклесиаст 9: 11
Претерпевший же до конца спасется .
От Матфея 24: 13
На седьмой день Бог решил взять отдых . А позже Бог велел в этот день отдыхать всем . Видимо, даже Богу нужен метод «40-часовая рабочая неделя», или равномерная работа .
В начале 1970-х, когда я был восемнадцатилетним, меня и моих школьных приятелей взяли работать джуниор-программистами для работы над крайне важным проектом . Менеджеры установи- ли сроки . Сроки были жесткими . Требовалось выкладываться по
полной . Мы были незаменимыми винтиками в сложном механизме компании . Мы были важны!
Хорошо, когда тебе восемнадцать, не правда ли?
Мы, молодые и горячие, только окончившие школу, работали как волы . Мы работали долгими часами месяц за месяцем . В среднем мы работали по 60 часов в неделю . Были недели, когда мы работали даже по 80 часов . Десятки раз мы работали по ночам .
И мы гордились тем, что работали сверхурочно . Вот мы-то были настоящими программистами . Мы посвятили себя проекту . Нас ценили . Потому что мы были единственной силой, которая могла спасти такой важный проект . Мы . Были . Программистами .
А потом мы сгорели, причем жестко . Так жестко, что ушли всем скопом . Мы вылетели оттуда, оставив компании еле работающую
40-часовая рабочая неделя
157
систему разделения времени, при этом в компании не было толко- вых программистов, которые могли бы ее сопровождать . Вот так им!
Хорошо, когда тебе восемнадцать и ты в ярости, да?
Не беспокойтесь, компания выкарабкалась . Оказалось, что там все же были толковые программисты помимо нас . Ребята, которые спокойно себе работали 40 часов в неделю . Ребята, которых мы представляли безразличными к работе и ленивыми, над которы- ми мы во время сумасшедших ночных марафонов презрительно смеялись, пока они не видели . Эти ребята без лишней суеты взяли систему в свои руки, обеспечив вполне годное сопровождение .
Не побоюсь сказать, они были рады избавиться от кучки шумных и надоедливых сопляков .
Работа сверхурочно
Как думаете, я усвоил урок из того, что вам только что рассказал?
Нет, конечно . В течение последующих 20 лет я точно так же горел на работе ради своих работодателей . Я продолжал прельщаться байками о том, что проект чрезвычайно важен . Я, конечно, не схо- дил с ума, работая сутками, как в 18 лет . В среднем я работал уже где-то по 50 часов в неделю . Ночные посиделки стали происходить реже, но никуда не исчезли .
Когда я вырос, то понял, что самые худшие технические ошибки я совершал в ночные часы, когда из меня ключом била маниакаль- ная энергия . Я осознал, что эти ошибки были огромными помеха- ми, которые мне постоянно приходилось исправлять в часы, когда я по-настоящему был работоспособен .
Затем случилось кое-что, что заставило меня задуматься . Я и мой будущий деловой партнер Джим Ньюкирк занимались ночным
1 ... 7 8 9 10 11 12 13 14 ... 20
Глава 4. Методы взаимодействия внутри команды
158
бдением . Где-то около двух часов ночи мы пытались выяснить, как переместить единицу данных из низкоуровневой части нашей программы в другую часть, которая находилась намного выше в цепочке выполнения . Решение возвращать эти данные в стек не подходило .
Мы создали систему транспортировки внутри нашего продук- та по типу почты . Мы применяли ее для пересылки информа- ции между процессами . В наших жилах тек кофеин, мы были на пределе возможностей . Внезапно пришло осознание, что можно было сделать так, чтобы низкоуровневая часть процесса отсылала единицу данных самой себе, где высокоуровневая часть могла бы ее считать .
Даже сейчас, спустя более трех десятилетий, каждый раз, когда мы с Джимом хотим описать чье-то неудачное решение, мы говорим:
«Да уж . Они просто отослали это самим себе» .
Я не буду грузить вас скучными подробностями, почему это реше- ние было дурацким . Достаточно сказать, что на него ушло намного больше усилий, чем мы, как казалось, сберегли . И, конечно же, это решение привело к слишком глубоким и труднообратимым изме- нениям, поэтому мы потеряли много времени
1
Марафон
И в то время я понял, что проект по разработке программного обе- спечения — это марафон, а не спринт или серия спринтов . Чтобы победить, надо рассчитывать силы . Если вы выскакиваете из стар-
1
Это произошло за десятилетие до того, как я узнал о разработке через те- стирование . Знай мы с Джимом этот метод в то время, мы могли бы легко откатить это изменение .
40-часовая рабочая неделя
159
товых блоков и летите на полной скорости, у вас закончатся силы прежде, чем вы пересечете финишную черту .
Таким образом, вы должны работать в темпе, который можно под- держивать в течение длительного времени . Должна быть 40-часо- вая рабочая неделя . Если пытаться бежать в более быстром темпе, чем вы можете поддерживать, все равно придется замедляться и от- дыхать до пересечения финишной черты . Средняя скорость будет ниже, чем при умеренном темпе . Когда финишная черта близко, еще остается немного сил на то, чтобы совершить рывок . Но нет необходимости делать его раньше времени .
Менеджеры могут просить вас поторопиться . Ни в коем случае не поддавайтесь . Ваша работа — грамотно распоряжаться своими ресурсами, чтобы выстоять до конца .
Самоотдача
Работа сверхурочно — плохой способ выразить самоотверженность перед работодателем . Это лишь показывает то, что вы плохо умеете планировать, что соглашаетесь со сроками, на которые не нужно соглашаться, что даете обещания, но не в состоянии их сдержать, что вы управляемый чернорабочий, а не профессионал .
Это не означает, что работать сверхурочно неправильно или что ни- когда не нужно этого делать . Есть смягчающие обстоятельства, при которых работа сверхурочно — единственный выход . Но это должно быть исключением . И вы должны прекрасно понимать, что работа сверхурочно может в итоге привести к большим временным затратам .
Та ночная посиделка с Джимом несколько десятилетий назад была не последней . Она была предпоследней . Последний раз я сидел всю ночь, когда меня вынудили обстоятельства .