Привет! Меня зовут Алексей Пьянков, я главный программист «Спортмастера».
Скажу сразу, «шеф» не означает «самый главный из всех программистов», нет, это просто имя, такой очаровательный перевод «Сеньор+».
В компании Спортмастер работаю с 2012 года, и за это время команда разработчиков сделала множество интересных с технической стороны решений.
Но сегодня мне хотелось бы поговорить о нашей работе, сделав акцент скорее на том, как мы рассуждали в тех или иных неоднозначных ситуациях.
Эта статья не будет содержать конкретных технических решений (или вообще чего-либо технического), которые вам следует взять и применить в своем проекте.
Скорее, это рефлексия о проделанной работе.
Были такие особенные моменты, которые повлияли на нас как на команду – они нас объединили, укрепили и проверили на прочность.
Сегодня я попробую рассказать об этих моментах, об атмосфере командной работы, о наших повесах и ряде психологических ловушек, в которые мы иногда сами себя загоняем.
И я начну с 2012 года.
В 2012 год я пришел с главной на тот момент целью — работой над нашим флагманским сайтом.
На тот момент это был «монстр Франкенштейна»: часть команды работала с нашей старой системой, которая не очень хорошо справлялась с нагрузками (Битрикс), а другая часть команды (в том числе и я) пыталась внедрить новую систему.
, который был выбран по критерию «Раз это самая дорогая электронная коммерция в мире, давайте возьмем ее».
Именно «пытались реализовать» — потому что система отчаянно сопротивлялась, и на каждый момент, который им удавалось разобраться, в ответ всегда появлялся «сюрприз».
Мы много работали, но двигались черепашьими темпами.
Лично для меня последней каплей стало знакомство с кодом одного метода в этом «самом дорогом интернет-магазине в мире», когда несколько часов сосредоточенной работы над непонятным багом привели к тому, что причина была найдена где-то в пользовательский тег, который работает при создании HTML в JSP. Целью этого пользовательского тега является отображение суммы некоторых значений.
Это неплохо, для этого и созданы кастом-теги.
Но удивление таилось в том, что при этом некоторые данные в базе изменяются, с этим завязано поведение на следующих страницах, и если нажать F5, вызов повторяется, это нарушает согласованность данных .
Причем нарушил так, что появился только через несколько шагов, на 3-й странице последовательности.
Нет, я не против иметь в команде такого «мастера-ниндзя» и держать внимание коллег в тонусе с помощью его кода.
Но просто так, в самой дорогой системе! Это было в пятницу.
И мы с коллегой провели субботу и воскресенье в офисе, чтобы разобраться, какие задачи бизнес ставит перед системой прямо сейчас и какие задачи он может поставить через год. Соответственно, как бы мы их решали, если бы нас не загнали в рамки использования этой самой дорогой и самой бесящей системы.
Сказано - сделано.
Мы сделали пилот, в котором заложили основу для разработки нового сайта «Спортмастер».
Многие из этих идей прижились и сейчас на сайте активно циркулирует их продолжение.
?Этапы и сроки пилотного проекта
2 дня.Сделали микропрототип — на выходных перенесли нашу базу данных в ElasticSearch, занимаясь фасетным поиском.
Вуаля! В той же купленной системе эта настройка «съела» 2 недели.
И вот – буквально за пару часов! И это также работает быстрее.
И это на порядок быстрее.
2 недели.
Мы вырезаем прототип и добавляем функционал для адекватных персонализированных результатов.
Например, у пользователя есть несколько скидок и акций, актуальных именно для него – тогда в результатах поиска по товарам нужно отображать именно ту цену, которую можно получить, воспользовавшись всеми доступными вкусностями наиболее выгодным способом.
С акциями не все так просто.
Например, купил лыжи, сейчас действует скидка 40% на кепку, но при этом отменяется приветственная скидка 10% на весь заказ.
Да-да, это реальный случай :) И чтобы настроить такую акцию в системе закупок, были оплачены 3 консультации с поставщиком, в результате чего мы получили множество примеров того, как делать разные другие акции.
Очень дипломатично и, учитывая стоимость консультаций, очень хорошо экономически.
Мы показали бизнесу подробную демонстрацию.
Пообещали быстро собрать пилот и сразу взялись за дело.
2 месяца.
Делаем пилотный проект в виде живого сайта с поиском по каталогу.
Поиск по фасетам, результаты поиска по персональным скидкам, пилот выглядит почти как сайт Спортмастера, и товары мы загружаем одни и те же.
Милый! Добавляем «Красноречие:100» от руководителя нашего отдела, и презентация для бизнеса проходит на ура! Нам предоставлен карт-бланш на разработку платформы электронной коммерции самостоятельно.
А это значит, ребята, держите команду, ребята, держите бюджет. Прохладный! 2 года.
Запуск сайта в производство.
Да, надолго.
Все, что мы знали тогда, мы опробовали только в масштабе прототипа.
Два человека легко образуют слаженную команду.
А задачи, которые мы «щелкали», были по большому счету небольшими дополнениями к «Hello World» в новых технологиях.
Мы легко генерировали новые гипотезы, быстро их проверяли, не успевали привязываться и поэтому без сожаления «убивали» их.
Когда нас было 10 человек, мы по инерции экстраполировали свою скорость работы на всех остальных.
И обещали такие сроки выполнения задачи, которые равны идее красоты, помноженной на наш энтузиазм.
Обычная ситуация? :) Тогда вы уже знаете, что будет дальше?
Ловушка №1. "Ээкстраполятор-крутой"
Понятно, что новые технологии очень круто смотрятся в презентациях и хорошо работают в приложении Hello World. Но реальность обычно немного дальше от этого.Итак, вот оно.
Берем библиотеку и пишем кучу кода приложения.
Мы считаем юнит-тесты обузой (мы тут крутые и работаем на сверхзвуковых уровнях, код современный и так далее).
Мы постоянно на ходу меняем и улучшаем API — какие там тесты, серьёзно.
И всё это под лозунгом «сильно оптимизировали процесс разработки» (да, сейчас даже страшно это описывать).
И тут все совершенно очевидно.
Мы выпускаем новую сборку на uat. Ребята из бизнеса с радостью собираются все это дело тестировать и нажимать кнопочки.
Иногда довольно креативно нажимают - что-то отваливается.
Я хотел бы пойти сюда и узнать, что они для этого сделали.
Но по ту сторону монитора не упорный тестировщик, который выкатит вам все характеристики среды с учетом погоды в регионе, а заказчик из бизнеса.
Для него это просто «не работает».
А это значит, что он несчастен.
Спроси его и он расскажет страшный недоволен!
Тогда, чтобы воспроизвести ошибку, вам придется пойти и перебрать все.
Конечно, мы не оставили без внимания ни одну жалобу и все зафиксировали.
Они отказались от запланированных задач, но «потушили пожар».
Итак, мы вырыли себе следующую яму.
Ловушка №2. «Стахановец»
Вы получили не очень приятный баг.Вы начинаете понимать.
Не получается - злость - снова пытаешься разобраться - очередной облом - уточняешь все, что можно - опять не то - думаешь, что ты уже старый и у всех дети и ипотека - пробуешь еще раз - опять не то.
Несколько кружек кофе, и все повторяется.
12-14 часов работы подряд – это почти норма.
И вот, когда уже все на пределе – бац, вдохновение!
Возможно, со стороны оценка эффективности такого дня видна хорошо и правильно.
Но изнутри все может быть по-другому.
В моем случае впечатление от такой работы заключалось в следующем: «Я молодец, я крут, я все правильно сделал».
Не всегда сознательно, но бессознательно – всегда! И ты на это подсаживаешься, без шуток.
Оказывается, внутренние показатели успешности движения смещаются от результата к количеству приложенных усилий и уровню того, каких подвигов вы совершили, насколько сильно вы пострадали, пытаясь решить задачу.
Это, пожалуй, самая страшная ловушка.
Тогда будет легче и веселее :)
Ловушка №3. «Сила Привет, мир»
Наш стек технологий того периода: ElasticSearch, Hazelcast, Pentaho, freemarker (и проверенные Java, Spring, Tomcat, nginx).Freemarker не предоставил очень информативных сообщений об ошибках.
А вот ElasticSearch, Hazelcast, Pentaho приходилось патчить несколько раз — мы блестяще находили случаи, когда они работали не так, как указано в документации.
Легкий старт и быстрая выгода от использования новых технологий — это хорошо, но они приводят к эйфории и снижению бдительности.
Поскольку новая технология содержит ошибки, она определенно содержит ошибки.
А если вы еще о них не написали, радуйтесь, вы тот, кто станет первопроходцем, который в любом случае подберет что-то кривое и пойдет в гугл или на ТАК.
Конечно, в проверенных продуктах можно найти «кривое», но в новых гораздо проще.
Несмотря на все трудности, мы приступили к производству.
Да, с лагами.
Да, не очень стабильно.
Но в целом никаких катастроф.
Подводя итог, еще раз укажу на ловушки, искажающие здоровое восприятие рабочего процесса.
- "Ээкстраполятор-крутой" .
Впечатленные текущими успехами, мы идем и с радостью экстраполируем скорость разработки на предстоящие проекты.
- «Стахановец» .
Мы много работаем, довольны собой, но не замечаем, что проблемы, которые мы решаем, являются следствием наших личных ошибок/недостатков/пренебрежений.
Дела, которые нельзя делать.
- «Сила Привет, мир» .
Мы спешим внедрить в производство все самое новое и интересное.
Почему все получилось?
Я, конечно, перечислил не все ошибки, которые у нас возникали за это время, но самые распространённые, скорее всего для проекта любой специфики.Такая запись ошибок помогает избежать их в будущем.
Немного о том, как нам удалось создать внутри компании такой мини-стартап и убедить бизнес перейти от уже купленной системы к чему-то своему.
Условие № 0 .
Здоровый климат в компании.
Это не только «горящие глаза» сотрудников и коммуникативные навыки в стрессовых условиях получения печенья, нет. Речь идет обо всех взаимодействиях.
Условие №1 .
Верьте в то, что вы делаете.
Серьезно, я не думаю, что у нас были бы какие-то шансы, если бы мы взяли на себя пилота, не разобрав купленную систему «до болтика» — то есть отступив и подсознательно зная, что эта система круче и нас побьет. Что мы сделали: 1) разобрались с системой закупок, с ее помощью решили основные запросы бизнеса 2) составили список задач, которые не только существуют сейчас, но и будут существовать в обозримом будущем 3) выбрали решение, которое подходит лучше.
И тогда наша оценка решения была оценкой экспертов.
Дали бы нам что-нибудь, если бы мы просто пришли и сказали: «Ребята, все херня, мы не хотим этим заниматься и решили сделать свое с нуля»? Едва ли.
Причем ответ будет получен в таком виде, чтобы его хорошо запомнить :) Условие №2 .
Первый шаг делаем с малого.
Давайте сгенерируем первую гипотезу и проверим ее.
Вы также можете потратить на это свое личное время.
Если вы не хотите тратить свое время, то вообще не стоит браться за такое дело.
А если вы не хотите проверять маленькую гипотезу, а хотите сразу сделать это круто и блестяще, держитесь подальше от таких людей! Нам повезло, и самая первая гипотеза сработала.
Но это не всегда происходит. Например, в одном из следующих проектов, когда мы продвигали админку в рамках аналогичного пилота, у нас сработал только 18-й вариант. И первые 17 подходов к снаряду оказались напрасными.
Кстати, в истории с созданием админки повороты сюжета были на уровне бразильских сериалов, ведь в команде были ребята, уже ставшие к тому времени ветеранами, настоящими «тёртыми булочками».
Условие №3 .
Мы делаем MVP и ищем боли в лице, принимающем решения.
Конечно, у него на лице может появиться выражение ужаса только от того, что вы в тридцатый раз приносите ему какую-то идею.
Но все равно.
И мы обязательно покажем, как именно мы решаем его проблемы с помощью нашего продукта.
Условие № 4 .
На коленке быстро делаем пилот, который выглядит примерно как конечный результат. Соблазнительно сделать все по-настоящему круто, но можно застрять в перфекционизме, что может привести к тому, что вместо пилота вы захотите показать пилотную версию уже идеального продукта.
Но их не существует. Так что просто сделайте один из палочек.
Условие №5 .
Продукт. Проект растет, получает финансирование, приходят специалисты с солидным опытом.
А если вы классический стартапер, то это тот самый момент, когда вам нужно со свистом уйти.
Потому что легкие полеты на самый верх и ощущение общей доброты происходящего быстро улетучиваются.
Запуск в производство означает столкновение с реальными рабочими нагрузками, интеграцию с десятками систем, а при создании нового функционала вы одновременно дорабатываете старые версии в рамках сопровождения.
Все это задачи гораздо более серьезные, чем придумать идею и решить, пусть и всего лишь одну проблему клиента.
Это вызовы, и рост навыков происходит именно на этом этапе.
Спасибо за прочтение.
С Новым Кодексом! Теги: #программирование #Управление проектами #разработка электронной коммерции #психология программирования
-
Чижевский Александр Леонидович.
19 Oct, 24 -
Остерегайтесь Шпионского По
19 Oct, 24 -
«Платит Звонящий»: Первые Итоги Мгтс
19 Oct, 24