Как душный интроверт и мизантроп стал лидером команды

Как душный интроверт и мизантроп стал лидером команды

1. МАЛЕНЬКИЙ КОНКУРС НА БОЛЬШОЕ МЕСТО

Бывают в жизни дни, когда ты долго готовишься к событию, и вот оно, наконец, наступает. За неделю до такого момента я очень заинтересовался ранее неизвестным мне мероприятием от студии GameBox: командной разработкой игры в течение месяца под контролем экспертов из индустрии. В своих навыках я был уверен. Да что там... Тестовое задание поддалось с первой попытки и было выполнено на одном дыхании. Результат – небольшая игра про сбор грибов – лично мне очень понравился. Сам залипал в своё творение часами. Не смотря на это, я не был уверен, что пройду конкурсный отбор. Конечно, многие говорили, что конкурс на место среди Unity-программистов маленький и достаточно показать минимальные навыки, чтобы попасть в команду, но тревога не отступала.

Человек в костюме Змея Горыныча из тестового задания
Человек в костюме Змея Горыныча из тестового задания

Когда опубликовали список команд, я не обнаружил там свою фамилию и уже смирился, что всё закончилось. Для успокоения начал планировать доработку тестового задания до полноценной игры. Пока я этим занимался, опубликовали продолжение списка команд, где в самом конце, в последней команде, оказалась моя фамилия. Радости не было предела. В тот момент я был готов запрограммировать «Ведьмак 5» за три чашки кофе. С этим нужно было что-то делать, поэтому я отправился читать впечатления других участников мероприятия в Discord-канале. К моменту, когда меня позвали в только что созданный чат «Команды 12» в Discord’е, эйфория чуть отпустила, и я смело шагнул навстречу судьбе.

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

Когда вся команда была в сборе, мы созвонились и по просьбе куратора стали рассказывать о себе и своём опыте. Тревога вернулась. Я судорожно размышлял, что же мне говорить, когда придёт мой черёд. Слушая, как рассказывают о себе товарищи по команде, я в блокнотике печатал план речи, чтобы не сбиться. В голову ничего не приходило, кроме одного – рассказать про свой опыт. Его было много, и жизненного, и профессионального, программистского. Но весь он, на первый взгляд, никак не коррелировал с разработкой игр, поэтому я решил ограничиться только коммерческим опытом, который с нашей отраслью связан довольно косвенно: чтобы не создавать у товарищей по команде неоправданных надежд.

Не успел я начать бессвязное выступление, как наставница бурно прорекламировала меня, рассказав много интересного и нового для меня самого. От этого стало совсем не по себе. Я совершенно не знал, о чём говорить. Не смотря на это, мой рассказ прозвучал гладко, без запинки. Оказалось, что с художником мы недавно участвовали в одном и том же игровом джеме, только в разных командах. А ребята посмотрели моё тестовое задание, и оно им понравилось. Начало общению было положено.

Выдох. Глоток кофе. И новое потрясение.

Для дальнейшей работы нам было необходимо выбрать исполнителей двух главных ролей в команде – Team Lead’а и Vision Holder’а. Первый из них руководит командой, а второй следит за соответствием игры выбранному концепту. Я сходу взял быка за рога и задал вопрос: кто хочет стать тем или другим? Очень надеялся, что желающих будет много, и они сами между собой всё решат. Не тут то было. Team Lead’ом хотел стать только один человек – 2D-художник, и он же метил в Vision Holder’ы, которым кроме него хотел стать только нарративный дизайнер. В этом заключалось сразу несколько проблем. Во-первых, быть Team Lead’ом и Vision Holder’ом одновременно очень тяжело. А во-вторых, у нас был только один 2D-художник в команде, и потерять его профессиональные навыки, перегрузив организаторской работой, было бы непростительно.

Постепенно разговор ушёл от скользкой темы к обсуждению того, а что же за игру мы будем разрабатывать. Выбор был небольшим: либо мы делаем что-то совсем новое с нуля и тратим много времени на начальном этапе, либо берём результат тестового задания нарративного дизайнера, либо геймдизайнера. Мы выбрали последний вариант: он позволял начать работу всей команде сразу же, без задержек. Впоследствии, я считаю, это дало нам большое преимущество. И, как я позже узнал, большинство команд поступило так же.

Конечно, в тестовом задании нарративного дизайнера были интересные и перспективные решения, но они не подходили к выбранной концепции, и от них, к сожалению, пришлось отказаться. Таким образом, ключевым кандидатом в Team Lead’ы становился геймдизайнер, потому как по его готовой документации мы должны были разрабатывать игру. Ему проще ставить задачи и проверять результат на соответствие. Не тут-то было! Геймдизайнер заверил нас, что он, конечно, не отказывается, но будет очень рад, если вдруг кто-то другой хочет руководить командой.

В итоге художнику предложили выбрать только одну роль, и нарративный дизайнер уступила ему место Vision Holder’а. А Team Lead’ом внезапно назначили меня, программиста. Как это произошло? Я что-то пропустил этот момент. Успел только сказать, что я, конечно же, не отказываюсь, но… Но тот же трюк, который сработал у геймдизайнера, у меня, почему-то не прокатил.

Очень беспокоило, что программист – это последнее звено в цепочке разработки, крайний исполнитель, а лид формирует процесс разработки от самых истоков. Это две принципиальные противоположности. «Не заболеть бы раздвоением личности», – с тревогой думал я. А ещё не знал, с чего начать.

2. ИСКУССТВО УКЛОНЕНИЯ ОТ ОТВЕТСТВЕННОСТИ

Заниматься кодом или организацией рабочего процесса? За код я не сильно беспокоился. Опыт выполнения программистских задач в авральном режиме у меня был. Вообще я считаю, что программист это не столько профессия, сколько призвание. Когда приходишь к мысли, что запрограммировать можно всё что угодно, и из лексикона пропадают фразы «это сделать нельзя», тогда программирование становится просто поиском оптимального решения для любых возникающих задач. А ещё нас, программистов, в команде было двое.

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

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

Вскоре состоялся очередной плановый созвон по единой схеме разработки игры, и мы занялись утверждением сеттинга. Доска с референсами была завалена картинками и комментариями. Куратор предложила проставить оценки трудозатрат по каждой идее и после этого выбрать наиболее перспективные и простые.

Всё это напоминало передачу «Угадай мелодию». Каждый выставлял оценки со своей профессиональной колокольни, но каким-то чудом мы смогли найти единое решение и определить вектор развития проекта – средневековый Китай. Работа снова закипела, но в уже более чётком направлении.

Первые шаги игры Mist Dale Forges
Первые шаги игры Mist Dale Forges

Теперь предстояло систематизировать полученную информацию. Для списка задач была выбрана канбан-доска. Это удобный инструмент для небольших краткосрочных проектов, но каждым инструментом нужно уметь пользоваться. Я пользовался канбан-доской только со стороны исполнителя, а создавать задачи – это особое искусство. Прочитав инструкции по созданию задач, я немного приуныл. Если честно, то даже не прочитал до конца все собранные для нас куратором материалы по оформлению задач. На созвоне записали несколько из них в таблицу. Всё выглядело сырым и непонятным. Преследовало чувство незавершённости, как будто мы упустили в работе нечто важное.

Не получив удовлетворения от заполнения таск-трекера, я решил вернуться к привычному для себя делу: написанию кода. Шли дни. В чатах велись бурные обсуждения фич. Приняли довольно сложный в отношении производительности туман в виде ambient occlusion (окружающего затемнения), запекаемый для динамических объектов в 3D-редакторе, а для статических – в движке. Это потребовало написания новых специальных шейдеров и копания в исходниках движка в попытках вытащить оттуда карты света. Стандартные решения не подходили, всё это было увлекательно и привычно. За таким процессом на душе было спокойно и легко, ведь задачи Team Lead’а совсем позабылись.

Тем временем план разработки привёл нас к работе через репозиторий. Опыта работы с ним не было почти ни у кого из команды. Пришлось прочитать для команды лекцию по Git'у. Я решил основательно подготовиться: создал презентацию, с помощью которой разъяснил плюсы работы через репозиторий, рассказал основы взаимодействия с ним. У меня не было опыта публичных выступлений даже в узком дружеском кругу вроде нашего, но всё прошло на удивление гладко.

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

Спустя несколько дней репозиторий в главной ветке встал в неприятную позу. Гейм-дизайнер в пылу рабочего процесса решил, что закоммитил лишнего, и совершил базовое, но непростительное действие: отменил свой коммит. Таким образом в последней версии проекта потерялись довольно важные изменения.

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

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

Дальше всё шло своим чередом. В рабочих чатах было тихо: все занимались своими делами самостоятельно. Но ощущение, что что-то не так, не покидало меня. Слишком тихо, слишком спокойно. Не может всё быть так хорошо. При этом отвлекать ребят глупыми вопросами очень не хотелось. Задачи выполнялись и постепенно возникали вопросы. Ребята у нас в команде не скромные. Если появлялся вопрос – он тут же задавался. Мне стало казаться, что своим руководством я могу всё испортить, поэтому снова погрузился с головой в написание кода.

Как раз в тот момент перед нами встала серьёзная задачка: запрограммировать сценарий туториала. Не долго думая, я накидал код первых шагов сценария на несколько сотен строк с довольно неудобным и негибким способом настройки. Переварил эту информацию и понял, что полный туториал превратит такой код в тысячи строк, а его доработки будут вызывать тяжёлые психические травмы.

Вскоре ко мне обратился геймдизайнер Андрей и предложил помощь в написании кода туториала. Меня это сразу испугало. Пришлось бы долго объяснять, как работает архитектура кода в игре. Ни с кем не советуясь, я принял решение сделать сценарий с помощью визуального программирования. Решение казалось рациональным, но вспоминались мемы от разработчиков на Unreal Engine про Blueprints from hell. Технология Unity Bolt позволяла сделать этот сценарий из коробки, но впечатления от её использования были смешанные. Тогда мне подумалось: а почему бы не сделать свою реализацию дерева поведений, но украсть чуть-чуть готового функционала? Так я отрезал немного от Unity Bolt, в частности – интерфейс отображения графа с нодами, а код его работы внутри игры набросал по туториалу из YouTube.

<p>Blueprints from hell, этот скриншот и больше примеров найдены здесь: <a href="https://api.dtf.ru/v2.8/redirect?to=http%3A%2F%2Ftumblr.com%2F&postId=2500179" rel="nofollow noreferrer noopener" target="_blank">UE4 Blueprints From Hell (tumblr.com)</a></p>

Blueprints from hell, этот скриншот и больше примеров найдены здесь: UE4 Blueprints From Hell (tumblr.com)

3. ХАОС В РАБОЧИХ ПРОЦЕССАХ – НЕ ЗАЛОГ ПОБЕДЫ

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

Но у нас был козырь в рукаве! Куратор своим опытным взглядом заметила возникшую проблему и, дождавшись планового созвона, провела ретроспективу, наглядно показав наши проблемы и сильные стороны. Помимо заряда мотивации и появления прозрачности в рабочем процессе, мы поняли: пора серьёзно систематизировать отслеживание задач.

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

Оказалось, это было не все. Куратор несколько раз напомнила нам про диаграмму Ганта. Да, её я пытался составить и в первую попытку постановки задач, но ничего внятного не получилось. На этот раз я постарался сгруппировать задачи в крупные взаимосвязанные блоки, которые легко уместились в лаконичной и наглядной схеме. После проделанной работы ребята перестали нервничать о том, всё ли мы успеваем, и знали, какой приоритет у какой задачи.

В дополнение на том созвоне мы обнаружили проблему, которую я не мог осознать, в художественной части. Связана она была с пайплайном разработки арта. Для художников пайплайн – это надёжное средство, избавляющее от технических трудностей, он в прямом смысле слова даёт ответы на большинство вопросов при создании арта. Для появления пайплайна мы «выдумали» новую роль в команде: арт-лида. Им стал один из наших 3D-художников. Он плотно занялся разработкой 3D-пайплайна и формированием списка задач по арту. С моих плеч свалилась огромная часть работы.

Разобравшись со списком задач и пайплайном, мы поняли, что укладываемся в график, и у нас всё хорошо, а я снова смог вернуться к своему привычному занятию: написанию кода.

Как душный интроверт и мизантроп стал лидером команды

4. ДРАКОН ДЕДЛАЙНУ НЕ ПОМЕХА

Настала очередная поздняя ночь. Оставалось ещё много задач, но приступать к ним не хотелось. Градус серьёзности нарастал неумолимо. И тут ребята начали обсуждать дракона, символизирующего Китай. И чтобы всем, кто ещё не догадался, стало ясно и понятно, какой у нас сеттинг, ребятам захотелось вкрутить в игру этого китайского дракона. «Довольно символично, – подумал я, – но у нас ограничение по сеттингу – реальная жизнь, а в реальной жизни драконов не часто встретишь. Ну а деревянный неподвижный – это не так интересно». Сразу в памяти всплыло всё, что я знаю о китайских драконах. Как оказалось, знаю я о них вот что. Только видел по телевизору карнавальных бумажных драконов на палках, которые носят люди.

Мысли о фантастическом звере не отпускали и мешали работать. Я вспомнил, что у нас есть механика очереди покупателей, в которой человечки движутся друг за другом змейкой. Очень подходящая механика для дракона, кстати. Модель бумажного существа создалась мной почти неосознанно, в процессе обдумывания задач по программированию. Получилась красная сосиска со страшной мордочкой, которая благополучно перекочевала из Blender'а в движок и насадилась головой на палку, которую я дал в руки главному герою. А кости дракона соединил стандартными компонентами в юнити (SpringJoint). Закончил свои основные задачи, потаскал драконью колбасу по полю игры, скинул шуточное видео с этим делом ребятам и отправился спать.

<p>Знакомство команды с драконом</p>

Знакомство команды с драконом

Утром обнаружил положительные реакции к сообщению с видео: результат моих развлечений получился забавным. Выбрасывать дракона было жалко. Пришлось доделывать задуманное: привязывать дракона тремя палками к разным персонажам, выстраивать их в очередь, механика которой уже была проверена временем, и отправлять дракона в качестве экспериментальной фичи в отдельную ветку репозитория.

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

5. ДЕДЛАЙН ПРИНОСИТ КОНФЛИКТЫ

До дедлайна оставалось слишком мало дней. Задачи у ребят закрывались, а оставшиеся были завязаны на коллег. Начали возникать задержки, смещающие установленные сроки. В команде возникла паника. Я наблюдал за всем этим краем глаза, увлёкшись кодом. По привычке сам ввязывался в споры, ведя себя крайне неподобающе для тимлида. Споры постепенно собирали всё большую аудиторию. Даже гейм-дизайнер, который до этого спокоен как удав, не остался в стороне. Тут стоит отметить, что даже когда до сдачи готовой игры оставались считанные дни, наш геймдизайнер спокойно ждал стабильный билд, не ругаясь на промедления, хотя геймдизайнеру на настройку баланса в игре и тестирование тоже нужно достаточно много времени. Паника? Про кого угодно в команде можно сказать, что он поддавался панике, но только не про геймдизайнера. На любую критическую ситуацию он отвечал, что всё хорошо, для беспокойства нет причины, работаем дальше. Страшный человек! Самое удивительное, что он не только не показывал тревоги, но ещё и успевал сделать всё нужное точно в срок.

Так вот. Дедлайны поджимали, нарастала паника, а вместе с тем ребята выполняли задачи и ставили новые, если чего-то не хватало. И снова наступило подозрительное затишье. Перечитывая последние сообщения, я видел кучу конфликтов, разногласий, потерю мотивации, расстройства. Создалось впечатление, что это конец. Ещё чуть-чуть – и команда развалится. Все плюнут на проект и разойдутся. Руки начали опускаться: зачем страдать ещё несколько дней, если всё равно до конца мы не дойдём? Я перечитывал сообщение за сообщением в попытках найти зацепку, что-то, что могло бы помочь распутать клубок недопониманий в команде, чтобы с гордостью принести решение всех наших проблем на ближайшем созвоне. Силы покидали меня с каждой минутой, и моральные, и физические. Очень не хотелось признавать поражение, но, в итоге, победило слабое человеческое тело – накатил сон.

Наутро голова прояснилась. Всё самое страшное, обдуманное вечером, уже не казалось таким ужасным. Я полистал задачи, отметил общий прогресс проекта и понял, что до победы оставалось не так уж много.

Самое трудное – это урегулировать конфликты. Мнений по разным вопросам была масса, и все они оказались несовместимы. Нужно было каким-то образом угодить всем. Челлендж принят! Бросив код, я сел за систематизацию всего этого безобразия и просидел так множество часов. Устал. Снова расстроился, так ничего и не придумав. Передо мной был лишь один вариант: принять ряд решений с потолка, на основе собственных ощущений. И к моему удивлению, ребята благосклонно приняли все мои окончательные решения, будто только этого и ждали. Споры прекратились, все повеселели, а у меня снова возникло ужасное чувство незавершённости. Появился страх, что к этим проблемам мы очень скоро вернёмся, но уже в более острой форме.

Оставшиеся дни пролетели, как один. До финала оставался последний шаг. Сдать проект мы (а точнее – я) планировали за несколько часов до дедлайна, чтобы успеть протестировать и исправить критические баги, если они будут обнаружены. Было много пожеланий вкрутить в последний момент новых фич и других опасных для кода изменений. Я старался пресекать эти попытки, как мог. В итоге мы остановили разработку за три часа до сдачи, и все терпеливо ждали момента, когда уже невозможно будет что-то добавить или исправить, отвлекая и успокаивая себя тестированием финального билда игры.

В последний момент оказалось, что нам нужно было помимо готовой игры ещё и подготовить страничку на Itch.io. Её подготовка стала приятным кранчем, спасшим от тревожного ожидания. Страничку мы оформили наспех. Нарративный дизайнер оперативно написала текст, мы нарезали скриншоты и опубликовали игру. Всё. Всё закончилось.

Оставалось только готовиться к презентации проекта, которая должна была пройти через неделю. Ребята собрались, дружно распределили задачи по презентации. 3D-художница взяла на себя задачу по монтажу видеоролика, остальные помогали советами. От меня в эту неделю не требовалось никаких действий. Команда в очередной раз проявила чудеса самоорганизации, так что я даже почувствовал себя слегка ненужным и бесполезным, тем более что задач по коду в этот период тоже не было.

Карта Mist Dale Forges – почти готова
Карта Mist Dale Forges – почти готова

6. САМЫЙ ТЁМНЫЙ ЧАС – ПЕРЕД РАССВЕТОМ

На презентации нас дико хвалили, восторгались нашим творением, что, с одной стороны, уменьшило объём полезной обратной связи по игре, но с другой – дало нам невероятный пинок позитивной мотивации на будущее. Этот момент я не забуду никогда. Но это была не единственная неожиданность на презентации: один из экспертов GameBox, а также сотрудник компании, которая занимается изданием мобильных игр, сказал нам, что выбранный нами сеттинг, тот самый, китайский, на который мы делали большую ставку и который считали грандиозным решением, вероятнее всего может стать причиной низкой конверсии потенциального игрока нашей игры, так как не очень популярен. Так что мы были шокированы дважды за одну презентацию.

Завершив этот без сомнения интересный этап жизни, мы посовещались и решили взять передышку до 4-ого января. Чтобы набраться сил, и осознать произошедшее за последний месяц. Сомнений в том, что нам нужно продолжать работать над игрой, ни у кого не было.

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

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

ЭПИЛОГ

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

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

Фёдор Завидия, тимлид Team 12

Как душный интроверт и мизантроп стал лидером команды
1515
11 комментариев

Комментарий недоступен

Ответить

Мы решили, что эта тема не такая заезженная, как средневековье Европы или древняя Япония, но при этом такая же колоритная. Ну и в России (на фоне геополитической ситуации) популярность китайской культуры потихоньку растёт.

3
Ответить

Один момент: никакой информации не нашел о количестве и составе команды.

Ответить

Тогда стоит прочитать другую статью от этой команды, там рассказ от лица художника и есть состав команды
https://dtf.ru/indie/2457450-uchastie-v-praktike-ot-gamebox-kak-komanda-kotoroy-ne-dolzhno-bylo-byt-vseh-udivila

1
Ответить

Привет) 8 человек:
Геймдизайнер, нарративщица, художник, 3 3d шника, 2 разработчика)

1
Ответить

Фу душные люди, бегите от них

Ответить

С Vision Holder-а выпал немного, будто каждый год что-то новое выдумывают)

Ответить