Gamedev Experience: Как (не) надо общаться с программистами
Хай!
В прошлый раз я обещала рассказать, как правильно общаться с программистами на примере того, как делать не надо. Спойлер: главный злодей этой статьи – я. Ну и ещё один крендель, о нём позже.
Геймдизайнер и программист – это пара, которой никто не оформлял брачный договор, но жить им вместе приходится долго. И, как в любых длительных отношениях, тут есть два способа всё развалить: думать, что партнёр читает твои мысли, или думать, что ты главный, потому что у тебя в руках компилятор.
Расскажу две истории. В первой я работаю с адекватным программистом, и он меня спасает от самой себя. Во второй – я работаю с программистом-токсиком, и спасать там было уже некого и нечего. Из обеих историй я вынесла правила, считайте Кодекс, которые в конце соберу в один список. Без морализаторства не обойтись.
История первая: программист, который меня спас
Сейчас я делаю свой пет-проект (ТЫК) – визуальную новеллу с элементами ККИ. В команде нас двое: я (геймдиз, сценарист, художник) и программист. И вот недавно я придумала непростую систему ресурсов для главной героини:
- три видимых параметра для продвижения по сюжету;
- четыре скрытых параметра под стиль игры;
- глобальный экономический слой, где деньги покупают и лояльность, и здоровье;
- утренний драфт карт по предметам-якорям;
- умный прирост стресса;
- прокачку сном;
- перелив ресурсов с налогом.
Спросите себя честно: вам было бы интересно до посинения полировать макро- и микроэкономику? Скорее всего, нет.
А я – нетакуся, человек с AuHDH (это когда аутизм + СДВГ). И я присасываюсь к самой важной, по моему мнению, основополагающей задаче, как клещ. Аутизм диктует: мы должны всё предусмотреть. СДВГ бегает глазами и хватает всё подряд.
В это время мой программист сидел и смотрел на канбан глазами Хатико, ожидая, когда же я дропну ему задачу "Сделать экран боя" или хоть что-то осязаемое.
Спустя время я спросила его: "Ну что там, экран боя готов? Давай тестить карты!"
А он: "Я сделал всё, что ты просила, но это гарантированно крашнется. Так что давай ты сначала построишь голые стены, а потом мы будем клеить обои."
Программист подловил меня ровно на том, что меня саму бесило, когда я работала бесправным геймдизайнером в другой инди-команде. Когда требуют читать мысли и обижаются, если ты этого не делаешь.
В этот раз мы отделались малой кровью. Конфликт в микродозе полезен, когда оба знают свою дело. Следующая история лишь подтверждает вывод первой.
История вторая: программист, которому можно всё
Вот ради этой истории вы здесь!
До текущего проекта я работала в инди-стартапе – назовём его "Вознесение" (типа убийца Hearthstone, ну-ну). Классика жанра: денег нет, амбиций на три AAA-студии. Требования, как к целому отделу геймдизайнеров Blizzard.
Структура команды была, скажем, интересная (правильное слово само всплывёт в голове). Фаундер – автор идеи, в целом, адекватный человек, это был его проект, его детище. Программист – друг фаундера. Продюсер – тоже их приятель, чья роль была не совсем прозрачной. Подозреваю, изначально он сам должен был взять на себя весь геймдизан, но быстро понял, что не вывезет, и позвал меня. + художники.
Следите за руками. На первом созвоне нам торжественно объявили: у нас круглый стол, каждый может влиять на разработку, предлагать идеи. Что, поверили?
Этим волшебным правом пользовался ровно один человек – программист. У фаундера не было особого видения, художницы получали "сделай красиво", а потом прибегал программист и говорил "мне не нравится, переделывайте". А вот кого программист персонально невзлюбил, так это меня, геймдизайнера.
Расскажу два громких случая (с классическим срачем в чате).
Случай первый: формула, которая положит сервер
Я взяла классическую механику (но добавила своей тактической глубины): посмертно юнит наносит урон всем на поле по формуле, которая учитывает его максимальное здоровье, силу обидчика и то, сколько он успел оттерпеть за свою никчёмную жизнь. Логика: чем дольше юнит терпел и чем сильнее был его обидчик, тем больнее месть. Простая идея, понятная игроку на уровне ощущения (наверное).
Программист распинался: формула слишком сложная для движка, она положит сервер, её надо реализовывать через сторонние библиотеки. Цитата: "Я бы, как математик, аппроксимировал её через ряды Фурье". С ним даже фаундер поспорил, сказал, что это бред. Фаундеру, впрочем, формула тоже не понравилась, но по другой причине: её сложно объяснить игроку. И вот это уже был разговор, который имело смысл вести. А не "аппроксимация на ровном месте".
Случай второй: проклятая таблица юнитов
На одном из финальных созвонов мне выкатили претензию: агрессивная колода слишком похожа на ванильную, новых механик мало. Я говорю: вот новые механики. Программист: я вижу две, мало. Я: три. Он: всё равно мало, ни о чём.
Я спрашиваю: чего вы от меня хотите? А они хором: посмотри таблицу нашего доблестного программиста, мы хотим вот этого. Накануне фаундер действительно скидывал мне эту таблицу и просил дать фидбек. Я ему честно сказала: очки в ремонте, читать с экрана физически не могу. Он всё равно настоял на созвоне с обсуждением этой таблицы. На созвоне прошу: расскажите в двух словах, что там. Они: ну там это... пук-среньк.
После созвона у меня в блокноте были одни вопросы, причём буквально (???). Обычно я выписываю тезисы, чтобы не забыть, а тут зацепиться не за что, кроме "им не понравилась колода и всё тут".
Когда я села разбирать ту таблицу, там обнаружились: спагетти-логика, которая заставляла бы движок делать снапшот чуть ли не каждую секунду и гонять на сервер и обратно; + мои же ванильные механики, но переименованные; и, справедливости ради, пара годных идей, которые я потом адаптировала под нормальную архитектуру.
Лицо лица представили?
И вот тут я оценила прекрасное. Программист, который меня неделями муштровал на тему логики, чистоты восприятия и архитектурной строгости, сам выкатил спагетти и хардкод. Вопрос риторический: а он сам как это собирался кодировать?
Из этого проекта я ушла, к счастью ~
Если описать паттерн одним предложением: программист явно хотел, чтобы я свалила, но не хотел брать на себя ответственность за конфликт. Поэтому делал так, чтобы ушла я сама, чтобы потом: "Женщина опять развалила... команду!"
Это была интеллектуальная ревность, замаскированная под архитектурную принципиальность. А я попутно оказалась участницей мужского соревнования, в которое меня записали, не спросив. И да, я аутист (забыли уже?). С коммуникацией у меня объективно слабо. Я часто отстранялась от обсуждений, потому что они казались мне переливанием из пустого в порожнее ради самоутверждения. Чаще так и было. Иногда – нет, и тогда отстранение работало против меня.
Так что часть вины на мне. Но извиняться мне не за что.
Правила, которые могут однажды спасти проект
Они для всех, не только для геймдиза, не только для программиста. Но вы сами решайте, что вам отзывается в душе.
1. Никто не читает мысли. Никто.
Если ты держишь в голове идею, она существует только у тебя в голове. Пока ты её не вытащил наружу – её нет. Самая частая ошибка человека с идеей: считать, что остальные "и так понимают". Не понимают. И не обязаны.
2. Сначала стены, потом обои.
MVP – это не унижение твоей идеи, это её фундамент. Без фундамента башня никогда не построится.
3. Круглый стол – давайте не надо.
Если на первом созвоне команде говорят: "У нас круглый стол, каждый может предлагать идеи", лучше сразу валить. На самом деле тут: “Мы хотим вмешиваться в вашу работу, потому что нам впадлу делать свою”.
4. Архитектурная строгость – начни с себя.
Банально, но работает всегда. Если уж взялся критиковать, то на своём примере покажи, как надо. А так, это просто до*бка.
5. "Кринж" – это не аргумент.
"Колода слабая", "новых механик мало", "это кринж", "ни о чём" – это не фидбек. Это эмоции в форме оценки. Без конкретики любая такая оценка значит "мне лично не нравится, и я не хочу объяснять почему".
6. Конкуренция убивает командность.
Если ты женщина в технической команде — будь готова к тому, что тебя втянут в соревнование без твоего согласия. Особенно если ты случайно упомянула, что у тебя есть какой-то "мужской" бэкграунд (служба, спорт, олимпиады, что угодно). С этого момента ты участница турнира "у кого длиннее". Можно играть по их правилам, а можно ливнуть. Второе часто полезнее, потому что ты им ничего не докажешь, пока не сломаешь нос. И то не факт.
7. Отстранение – выстрел в ногу.
Для меня перепалки ради самоутверждения – это шум. Мозг его даже не берёт в расчёт. Но иногда под этой "пустой перепалкой" прячется решение, которое реально на тебя повлияет. Это сложный навык распознавания, различать, где шум, а где сигнал. У меня он до сих пор так себе. Но признать наличие проблемы – половина решения.
***
Это была моя история "любви". Точнее, две. И семь выводов, за которые я заплатила сменой проекта, парой бессонных ночей и одним сорванным дедлайном (нет, не этим, слово за статью я сдержала). Зато получила опыт✨
В следующий раз, думаю, стоит поговорить о том, кому подходит геймдизайн, и почему среди нас столько самозванцев (да-да, я про тебя говорю!). Если в следующий вторник в 18:00 по МСК меня здесь не будет, за вами законное право напихать мне за воротник.
Отдельно: в этой статье два конкретных программиста (один хороший, второй ну такой), которые не могут постоять за себя. Предлагаю вам.
Хорошего я позвала подписаться и высказаться. Сделает, если захочет. Токсичного я сюда тащить не собираюсь, спасибо. Но если ты это читаешь, велком в комменты.
Расскажите и вы в комментариях про свои абьюзивные отношения с программистами. А если вы сами программист, то какого газлайтинга нахлебались от геймдизайнеров. А если вы в команде выполняли другую роль, но пукан начал подавать признаки сейсмической активности – тоже к нам!
Всё это поможет сформировать общий Кодекс порядка (на самом деле, мы просто перемоем косточки и отпустим друг другу грехи).