Так, ну всё, теперь можешь курить прямо здесь. Стопудово.

Масяня.

Мне очень повезло, что я был за рулем, в этот гнусный октябрьский день. Так бы пошел водку пить. А так — вполне себе ничего: едешь, куда глаза глядят, рефлексируешь, и материшься: “за что же мне, хорошему, такая жопа”?

Начиналось буднично. Моя компания вот уже 20 лет занимается разработкой программного обеспечения на заказ. Входим в десятку лучших в рейтингах, отличный список клиентов (Disney, Северсталь, Greenfield и т.д.), отлаженные процессы, делаем технически-сложные проекты (интеграции, личные кабинеты). Бла-бла-бла. И — спортивные самолеты на выходных… 

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

Вот с этим проектом и возникла загвоздка. Выделенная, небольшая команда. Из которой за неделю у меня схантили двух разработчиков. На такие деньги, которые я просто не мог себе позволить. Никак. И ладно бы только одного — эта новость меня не сильно испугала. Уходил ключевой специалист. Технический лидер. Который знал проект от и до, принимал все ключевые технические решения. 

Миллион долларов на разработку уже был потрачен. Первые пользователи потихоньку покупали платные подписки и ставили звездочки в сторах. Но это и близко не окупало затрат на команду. 

И вот он руль. Дорога. И промозглый октябрь. И две мысли в голове: “Как ж я в это вляпался? Я же все знаю за IT” и “Чего ж теперь делать?”. Надо было разобраться.

Кубики и шарики

Акция! 1 + 2 = 3

Из объявлений


Вы пробовали катить кубик? Чтобы это делать, нужно постоянно прикладывать усилия. С грани на грань, с грани на грань. Тупое, нудное занятие с невнятными перспективами. Хотя, если шлепнуть кубик по макушке, да под правильным углом — он сделает пару кульбитов сам. Но чаще — нет. С грани на грань, с грани на грань…

Другое дело — шарики. Катнул с достаточным усилием. И дальше он как-то сам. Долго. Если очень хочется, можно подопнуть для ускорения. Но в целом — гораздо веселее, чем кубик.

Заказная разработка (да и любая деятельность в сфере услуг) — это кубик. Каждый раз, с каждым клиентом нужно начинать заново. Считай, никакого масштабирования. Количество денег пропорционально переворотам кубика. Хочешь больше — не проблема. Херачь больше. Многие из нас этим и живут. Порой не плохо живут, кстати. Порой так себе. Но все мучаются. Вот как только подумаешь, что кубик тебе переворачивать до пенсии (ха-ха-ха, пенсия), тут то и подступает вселенская тоска.

Шарики забавнее. В мире программного обеспечения это сервисы и продукты, доступные по подписке. Потенциал роста бесконечный. А с какого-то момента можно заниматься только улучшениями. Мудрые IT-компании (вроде Яндекса) строят именно такие системы. Даже, неряшливый певец или писатель, или угрюмый программист может шарик себе сделать. Если сильно повезет. А вот менеджер среднего звена — нет. Ну большинство нет, это уж точно.

Промежуточные выводы. Кубики катать привычнее, но шарики — забавнее.

Выгода за тысячу ли. Два года на все

Проблема с выбором между шариками и кубиками вот в чем: оказывая услуги (или разрабатывая программы на заказ) вы практически мгновенно увидите финансовый результат своих усилий. Сделал — заработал, повторил. 

А в создании продуктов — нет. Пользователи сейчас избалованы, технологии — сложные, а чтобы сделать что-то конкурентоспособное — нужно очень серьезно вложиться. Временем, дегами. Шкурой на кону. И без гарантий на джекпот. 

Зачем весь этот гарантированный геморрой при негарантированном результате, если можно в очередной раз перекатить кубик? Это выбор, между “хорошо сейчас — плохо потом” и “плохо сейчас, хорошо потом”. Где “плохо сейчас” — очевидно, а “хорошо потом” далеко не факт.

Как-то мне попалась статистика среднего времени работы IT-специалистов в международных компаниях. Microsoft, Google, Amazon и много кто еще. Так вот. Среднее время составляло два года. Не знаю, какова дисперсия, но ориентир четкий: 

Чтобы создать самоокупаемый шарик продукт у вас есть два года на всё

Если не успеете — очень жаль. “Спалите” команду, деньги, себя, накопите технические долги. А то и вляпаетесь в технический дефолт. И чем дольше проект пребывает в состоянии “зомби”, тем дороже это в конце концов обойдется.

Черт возьми! Мои проблемы начались Just-in-time. Но у меня уже был готовый шарик. Оставалось только выбрать из двух сортов дерьма: продолжаем или сдаемся.

Что за софт мы пишем?

Мы разрабатываем сервис для планирования дел и задач – SingularityApp. В нём собрали лучшие практики – управление временем, GTD, джедайские техники Максима Дорофеева и хаос-менеджмент. Всё это с удобным интерфейсом, приложениями для основных платформ, web-версией и кучей разных фишек.

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

Все началось со случайного разговора. Как-то, на одной конференции мы разговорились с генеральным директором 1С-Битрикс, Сергеем Рыжиковым. Он обронил фразу: “Не бойся лезть на рынки с большой конкуренцией. Лучше откусить 10% от большого пирога, чем 99 от маленького”. Примерно так.

Потом я читал Тимоти Ферриса. Эта устаревшая и довольно вредная книга, как работать по 4 часа в месяц (или типа того). На самом деле — никак. Из нее меня зацепила одна мысль: “Никаких услуг! Только продукт. Который будет довольно дешевым, скажем $20”.

Что это может быть? Из того, в чем я более-менее разбираюсь это или управление временем (к тому времени я попробовал все планировщики), или что-то про авиацию, или про управление digital-проектами.

По управлению проектами мы сняли курс, который долгое время хорошо продавался,  позже – я выпустил книгу (та вообще стала бестселлером). Ну а управление своими задачами — всегда мне нравилось и приносило пользу. Поэтому вот!

Стоп-лосс

Не жопа, в которой мы живем, требует, чтобы мы генерировали надежду, а нашей надежде нужно, чтобы вокруг была жопа.

М. Мэнсон

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

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

Ровно так я и поступил: посчитал и прикинул, сколько времени, сил и денег я готов потратить еще, не видя отдачи. Прописал это. Поставил точку отсечения и заранее принял возможные потери. 

Настроение сразу улучшилось. Водку пить расхотелось. Захотелось сыграть в эту игру, и выиграть. А если нет — возможные потери меня заранее устраивали. Теперь нужно было донести до оставшейся команды новую реальность, и понять кто готов идти со мной.

Промежуточные выводы: выставление стоп-лосса при принятии решений дает силу безразличия.

Системный анализ

Никто не знает, как правильно. Но и хрен с этим.

Народная мудрость.

Следующие выходные я провел в офисе, в тишине, составляя факт-карту. Обычно, для решения проблем, я использую подход теории ограничений Голдратта (деревья текущей реальности) или тойотовский A3-анализ. Но в данном случае решил попробовать Курпатовский подход — он менее строгий.

Я выписал все проблемы, которые знал в продукте, рынке и команде (включая выбывание ключевого сотрудника). Выписал векторы возможных решений. Прописал, к каким конкретно решениям я готов. Получилось большое полотно, с кучей стикеров. Стало еще спокойнее и захотелось предпринять какие-то конкретные действия прямо сейчас. 

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

Тут же встретился с руководителем проекта. Показал схему. Обсудили, как донести новости до команды и вообще какой план действий. Нашли пару слабых мест. Устранили. В общем, подготовились к черному понедельнику как могли. Спалось плохо.

Промежуточные выводы. Используйте формальные техники, вроде ТОС или факт-карт, чтобы посмотреть на ситуацию со стороны.

Разговор с командой. Они не такие нежные. Ха-ха-ха, какая беда!

Все будет хорошо… Даже если — не будет.

Шимун Врочек.

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

Мы собирались втроем — я, руководитель проекта + приглашали кого-то из оставшейся команды. Рассказывали ситуацию. Подробно зачитывали, какие проблемы есть и какие шаги можно предпринять. 

И я охренел.

Оказывается, проблемы, которые изводят руководителя, командой воспринимаются гораздо спокойнее. Это ты ночами не спишь, думаешь “А что делать?”, “А как они воспримут?” Там же все гораздо спокойнее. Никто никуда убегать с корабля вслед не собирался. Сто процентов людей были готовы продолжать работу и решать возникшие трудности.

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

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

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

Что я стараюсь не замечать?

Отставание, растущее понемногу изо дня в день, труднее распознать, труднее предотвратить, труднее выправить.

Фредерик Брукс.

“Всё, блин, делается слишком медленно!” — именно такое чувство не покидало меня по ходу проекта. Я вообще-то программист по образованию и хорошо понимаю сложности, с которыми сталкиваются разработчики больших проектов. Но в этом проекте мне не хотелось вникать во все нюансы разработки. Я, типа, “инвестор”. И раз уж есть руководитель проекта, есть технический лидер – пусть они и занимаются этим. Каждый должен же свое дело делать, правильно?

Это была большая ошибка. Или банальная лень врубаться в детали. А оно так и происходит. Сначала ты ленишься врубаться в новое. А потом — перестаешь врубаться. Тут то всему и крышка.

По мере роста и развития проекта его архитектура обрастала, скажем так, странными решениями. Костылями и велосипедами. 

Признаки плохого кода появлялись давно:

  1. Сами ребята жаловались, что тот или иной компонент системы написан плохо. И надо всё переписывать. Самое плохое, что те же жалобы повторялись и после переписывания. А сами переделки занимали вечность. Две вечности.

  2. Добавление в проект высококлассного сеньора кончилось тем, что сеньор сбежал из проекта через полгода с комментарием “Всё слишком сложно”.

  3. Части проекта были написаны в разных стилях.

  4. Скорость разработки не увеличивалась. Только замедлялась.

  5. Много нытья. Слишком много.

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

Промежуточные выводы: задавай себе хотя бы раз в неделю вопрос: “Что я стараюсь не замечать?”. Вникай в детали. Учись.

Маск распечатал Твиттер. Свинцовые пули. Лезем под капот.

Не существует серебряной пули, которая могла бы решить эту проблему. 

Нет, нам придется использовать множество свинцовых пуль

Хоровиц Бен/Бил Турпин

Итак, я с головой залез внутрь проекта. По прошествию времени я не могу выделить какое-то одно действие, которое бы можно было отметить как “серебряную пулю”. Действий пришлось делать много. Придумать, сделатпроверить результат. Повторить.

Перво-наперво мы починили HADI-циклы (с.м. картику).. Каждую неделю по понедельникам, утром, работали по маркетинговому плану. Придумывали новые гипотезы. И проверяли итоги — аналитику, метрики, телеметрию. В общем, восстановили классический цикл Деминга в маркетинге.

Часть гипотез шла в разработку. Часть — в работу по продвижению или подготовку контента.

Вскоре мы поняли, что на текущей стадии развития проекта SCRUM работает слишком медленно. Он хорошо себя показал при разработке первых версий приложения. Но на этапе продвижения нам нужно было меняться гораздо быстрее. Часть работ мы перевели на КАНБАН. Тестирование и выпуск новых версий перевели в режим эстетиста: как только появилась готовая функция, тестировщики тут же проверяют ее и как можно быстрее по цепочке отправляют в релиз.

Далее — была переработана в наглядные формы телеметрия и аналитика в приложении. Стали понятны узкие места: где у нас явные недоработки и где мы теряем пользователей. Были сформированы десятки гипотез, как исправить ситуацию. Часть из них можно было быстро протестировать, не привлекая (или почти не привлекая) разработчиков.

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

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

Мы потратили много времени на Code Review (чтение и изучение текущего кода). Было забавно прочитать, что Илон Маск, после покупки Твиттера, оставшись без львиной доли команды, начал именно с этого. Причем, распечатав твиттер и привлекая к Review команду из Tesla. Видимо, тех людей, которым он мог доверять.

Промежуточные выводы: иногда надо просто сесть и во всём разобраться. А иногда надо просто херачить. Не боясь замараться или перетрудиться

Херачим. И мир становится лучше

Пахнет смертью и дерьмом. Мне кажется очень скоро на нас нападут. 

Р. Желязны

Схема ада. Принципиальная.
Схема ада. Принципиальная.

Было очевидно, что код desktop-приложения нуждается в рефакторинге. Но что именно и как менять — нужно было определиться. Мы составили схемы взаимодействия компонентов системы. На это потребовалось две недели. Стали очевидны переусложненные компоненты. Вернее, связи между ними.

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

Отдельно шла работа по стандартизации кода. Мы выписывали в отдельный файл “странные” решения, найденные внутри системы. Дескать, вот тут странный кусок кода, и он бесит на 10 из 10. Обсуждали это всей командой. Постепенно стал понятен главный поставщик плохого кода — с ним мы распрощались; а раньше его жалели. Довольно быстро появилась нулевая терпимость к говнокоду. Что-то типа культа качества.

Сейчас рефакторинг и “улучшайзинг” занимает примерно треть времени от всех работ. Остальное — разработка новых функций и развитие старых. И хотя на текущий момент мы еще не довели код системы до идеального состояния, как это делать и в каком порядке — понятно. С каждым релизом становится лучше. Остается только херачить.

Кризис — самое время заглянуть под капот и пересобрать систему руками. Возможно от этого она станет лучше и быстрее. И вы — тоже.

Бизнес в заложниках у IT. Сожрать картоху и свалить. Памятник Самому Себе. Не пиши!

Разработка — это когда вы получаете не то, что вам нужно, в два раза дороже, в три раза дольше и с ошибками

Определение

Что нужно учитывать при работе с программистами: они любят начинать новые, грандиозные проекты. Пробовать новые технологии. Умно рассуждать об архитектуре. А потом сдуваются и сваливают на работу “поинтереснее”. Сожрав при этом кучу ресурсов.

Это надо просто принять как “дано”. Их тоже понять можно: им постоянно надо навыки актуализировать, иначе через 5 лет никуда не возьмут, а после 40 — тем более. Но бизнесу от этого не легче.

В сущности, запуск проекта нужен только вам, бизнесу. Многим программистам достаточно просто пилить код, строя в нем Памятник Самому Себе. Так, чтобы другие программисты “офигели от того, какой он умный”. 

При этом среднячкам (middle) нужен “суровый папка”. Такой, чтобы бил по рукам за кривые решения, хвалил за хорошие, и учил, учил, учил делать хорошо. 

Некоторые разработчики просят наставника в открытую. Некоторые просто имеют влажную мечту. Если коллектив программистов маленький, а сурового “папки” нету — памятники самому себе растут гораздо быстрее. 

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


Есть еще более мерзкое явление: JSDD (Job Safety Driven Development). Работать так, чтобы не уволили. Усложнить всю систему настолько, чтобы только один единственный Незаменимый был в силах во всем разобраться. Например, есть две кладовщицы. У одной на складе полный порядок. У второй — так всё запутано, что только она знает, где что лежит. Какую уволят первой?

Заумь и переусложнение — то, с чем приходится постоянно бороться. Писать простой для понимания код и делать ясную архитектуру на порядок сложнее. 

Рецепты от этого давно известны — нужно держать всю разработку в строгом порядке и регулярно проводить инспекции всего. Применять SCRUM, регулярно проводить Code Review. Создавать продукт как можно быстрее и регулярно выпускать новые версии. Собирать обратную связь от пользователей, отслеживать метрики, вроде Time To Market (время от момента идеи, до поставки решения на рынок). Делать документацию, покрывать систему тестами. Однако всё это чертовски дорого и не ускоряет разработку в краткосрочной перспективе. А бизнесу, часто, нужно здесь и сейчас. 

Итак, плохие новости. 

Разработка стоит дорого. И будет только дорожать.

Как быть? По большому счету сейчас скрытая конкуренция идет именно на уровне технологии и автоматизации. Кто быстрее и лучше сможет автоматизировать максимум рутины — тот и молодец.

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

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

Промежуточные выводы: в разработке софта, если можно что-то не разрабатывать, а купить или арендовать готовое — лучше не разрабатывать, а купить или арендовать готовое. Пусть и не такое удобное и гибкое, как в мечтах.

Своя или заказная разработка?

Маленькая, но своя!

(общество борьбы с маммопластикой)

Этот вопрос я подробно разбирал в “Настольной книге project-менеджера”, издательства Бомбора. Здесь ограничимся краткими выводами.

Итак, если у вас разовый проект, рваная, нестабильная нагрузка, или нужно выпустить продукт (или MVP), но нет времени, сил, компетенций и желания возиться и “пасти котов” — однозначно, заказная разработка — правильное решение.

Если у вас идет стабильное развитие разработанного решения, если у вас планы на год-два вперед, причем, нужно часов 200-400 в месяц — скорее всего, в агентстве под вас будет выделенная команда. Внутри нее могут быть некоторые ротации (про средний срок работы сотрудников в IT мы говорили выше). Но это не ваша проблема.

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

Уверенность в завтрашнем дне. Где ее брать в кризис?


Developers, developers, developers, developers,

Developers, developers, developers, developers

Developers, developers, developers, developers

Стивен Энтони Ба́лмер — миллиардер, генеральный директор Корпорации Майкрософт с января 2000 года по февраль 2014 года

Мне пришлось очень глубоко нырнуть в проект. Так глубоко, как на старте я не планировал. Пришлось вспомнить, как писать код. Разобраться во всех деталях системы. Изучить на практике современные технологии разработки. Спроектировать целевую архитектуру. Регулярно отслеживать изменения. Показывть, как правильно, и как не правильно. В общем добавить ясности. Почти по Сунь-Цзы:

Ясность целей, пути, правил, поощрений и наказаний, примеров для подражания.

Погружение в код и работу руками я воспринял сначала как деградацию. Мол, не справился как управленец, пошел за подчиненных работу делать. Отстой, фу-фу-фу! Это расстраивало, но было настолько интересно, что я решил: “Да ну нафиг!”. Работа над продуктом стала практически хобби. Появилось желание тратить все свободное время (его правда было не много) на разгребание самых сложных авгиевых конюшен в коде.

Работа руками дала два очень неожиданных эффекта:

  1. Да хоть все увольняйтесь! Появилась уверенность, что даже если ситуация повторится, я к этому абсолютно готов. Я смогу ввести в курс дела новых людей. И обеспечить качество их работы. В крайнем случае — всегда смогу разобраться в любом аспекте сам. Причем — быстро.

  2. Запасной аэродром. Что бы не случилось, у меня есть актуальные знания, опыт и практика в актуальной профессии и технологиях (исхожу из того, что вряд ли IT станет не актуален). Эти знания, конечно, вряд ли потребуются. Но в случае чего — они  есть. И мозги стали шустрее работать. Двойная выгода. А то заржавеешь тут на управленческой работе.

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

Промежуточные выводы: время от времени делать что-то своими руками. Запасной аэродром дает уверенность. Полная персонало-независимость возможна, если все нужные навыки и компетенции есть лично у вас. Прокачивайте их.

Рутина и развитие. Уходи и возвращайся

Встречи, переговоры с подчиненными, клиентами, контроль поручений. Вся эта ежедневная канитель, что поддерживает и позволяет зарабатывать организации здесь и сейчас. Безусловно, рутина гораздо важнее, чем наполеоновские планы по захвату мира и работа над проектами про необозримо-далекое будущее. Упустите рутину — вылетите с рынка. Будет вам не до будущего.

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

Рутина или развитие — что же выбрать?

Интересная аналогия — передовой отряд и обоз. Обоз — это то, что имеет ресурсы. Но двигается медленно. И если армия его надолго оставит, уйдет далеко вперед — на обоз могут напасть, а кто-то разбредётся. Высок риск потерять обоз, слишком удаляясь от него.

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

Рабочая стратегия — уходить от обоза, ненадолго. Изучать территорию. И возвращаться. Направляя обоз по изученному уже маршруту.

Примерно так же нужно поступать с Рутиной и Развитием. Выделяйте время в своём графике, когда вы занимаетесь только развитием. Затем возвращайтесь к команде. И продвигайте ее до того уровня, куда успели забраться сами.

Промежуточные выводы: выделяйте время на развитие. И затем возвращайтесь к рутине. Рутина — первостепеннее.

Про деньги и чем все это кончилось

Общий тон настроений в коллективе должен быть мажорный.

А.С. Макаренко

Чем же в конце концов кончился этот кризис в мерзком, дождливом октябре 2021?

Дело было так.

После введения метрик и телеметрии, проведения cust-dev-интервью, стали очевидны несколько точек, где мы неправильно работаем с пользователями. Потребовалось не так много усилий, чтобы исправить это. И уже в декабре мы впервые вышли на прибыль. Пусть и небольшую. Пусть команда (а это основные расходы в IT) была несколько меньше. Но это было уже хорошо.

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

А дальше?

Итак. В декабре мы получили первую прибыль. То же повторилось в январе. И в феврале 2022 было очень похоже, что мы все делаем правильно. Ровно до 24го.

За один день мы потеряли 25% аудитории. Довольно существенным сегментом у нас была Украина. Затем нам запретили рекламироваться на западные рынки. Выводить деньги со сторов стало значительно сложнее. А российские пользователи не смогли оплачивать подписку через AppStore и Google Play. 

А дальше??

Сложности с платежами — с одной стороны это было плохо. С другой стороны — у конкурентов (в основом, западных) для российского сегмента была такая же ситуация. Но им было пофиг на российский рынок. А нам нет. Естественно, мы предусмотрели альтернативные варианты оплаты, миграции данных от конкурирующий платформ. Добавились в российские сторы, реестры и т.д. В общем, сделали всё, что нужно, не щёлкая клювом. Рассматривались все варианты, пожалуй, кроме миграции команды. 

А дальше???

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

А дальше???!

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

UPD 2024. Мы выкинули Redux из проекта и заменили его на MobX/MST. Этот квест занял пол года. Кода стало в разы меньше и теперь он почти что мне нравится. Но, пожалуй, это тема отдельной статьи.

Итоги и выводы. Что делать то?

Довольно сложно давать конкретные советы, не зная компании, её культуры, проекта и его архитектуры. Однако, если вы плотно работаете с IT, или решили строить in-house команду, — эти идеи и принципы вам помогут:

  1. Время от времени задавайте себе вопрос: “Что я стараюсь не замечать?”. Не пропускайте слабые сигналы.

  2. Вы будете чувствовать себя гораздо спокойнее в любом кризисе, если будете способны не только руководить. Но и делать что-то ценное своими руками. Особенно в вечно-востребованных сферах (строительство, медицина, IT :)). Не обязательно делать работу за подчиненных. Но важно быть способным. Оставьте себе такой запасной аэродром.

  3. Стройте команды. Не один программист, а минимум — два. На любом участке. Иначе есть риск остаться с неподдерживаемым кодом. Дублируйте критически-важные знания.

  4. Время от времени проводите ревью проекта кем-то со стороны. Если хватает сил и компетенций (оптимально) — проводите ревью самостоятельно. Илон Маск — не брезговал ?

  5. Стандартизируйте качество. Используйте чек лист и автоматизированные проверки, чтобы убедиться, что стандарты не нарушены. Регулярно обсуждайте повышение качества. В долгосрочной перспективе есть прямая зависимость между качеством продукта и трудоемкостью. Качественный продукт поддерживать и изменять дешевле и проще.

  6. Создавая команды поставьте сильного Руководителя Проекта. Лучше с агентским опытом. Ещё лучше — с сочетанием технического бэкграунда и хорошими переговорными навыками. Все крутится вокруг этих двух компетенций. Знания в маркетинге будут плюсом.

  7. Выбирая между двумя Руководителями Проектов, берите самого позитивного и энергичного. Никакие процессы не заменят энергию и драйв. Унылый Руководитель Проекта гарантированно сделает унылой всю команду и унылый продукт.

  8. Поддержите его властью. Руководитель Проекта не должен быть мальчиком для битья, а должен иметь право формировать команду. Кроме того, у него должен быть доступ к ресурсу, открывающему любые двери внутри компании. Иначе проект забуксует во внутренней бюрократии. Итак, Руководитель Проекта должен иметь доступ к полю власти и поддержку со стороны высшего руководства.

  9. Первую версию продукта или большую автономную разработку лучше отдать агентству. Так будет быстрее. Когда проект начнет вызревать (достигнет какой-то стабильной точки) — можно начать формировать свою команду.

  10. Используйте классический SCRUM или Канбан для организации разработки. Не изобретайте колесо. Проводите стендапы. Демонстрации. Планинги. Обсуждайте задачи. Команда должна чувствовать свою причастность к важному.

  11. Используйте тикет-системы. Снижайте до минимума СРОЧНО-ВАЖНЫЕ задачи в мозг.

  12. Проводите ретроспективы. Следите за удовлетворенностью команды. Прислушивайтесь и решайте проблемы. 

  13. Подбадривайте. Хвалите больше и чаще. Общий тон настроений в коллективе должен быть мажорный.

  14. Фокусируйтесь. Минимизируйте переключения команды. Дерготня, суета, спешка приводят к ошибкам и выгораниям.

  15. Заведите и отслеживайте несколько простых метрик, говорящих об успехе команды. Визуализируйте эти метрики. Это могут быть оценки задачи в Story Point, которые вы отгрузили за очередной спринт (план-факт) и количество дефектов. Трех таких метрик (план, факт, дефекты) уже достаточно.

  16. Решайте проблемы команды. Медленное железо, слабые сервера, неудобные стулья или необходимость отгулов — за этим всем нужно следить.

  17. Проводите раз в полгода стратегические сессии с участием всей команды и заинтересованных в проекте лиц. Формируйте планы. Прозрачные и понятные для команды. Должна быть ясность целей и ясность пути.

  18. Ищите вызовы и интересные задачи. Давайте время на изучение новых технологий. Работа не должна превращаться в рутину.

  19. На зрелых проектах документируйте и стандартизируйте разработку. Покрывайте проекты автотестами. Это может быть дорого на старте. Но поможет избежать регрессий и повторения ошибок при развитии проекта.

  20. Имейте в виду, что согласно статистике, рано или поздно у вас из команды будут отваливаться люди. И приходить новые. Это неизбежно, что бы вы ни делали. У вас, по сути, есть два года, чтобы раскрыть потенциал человека. Если всё сделаете грамотно — то больше, но редко. Постройте процесс онбординга (погружения новых людей в команду). Избавляйтесь от токсичных людей, которые тормозят команду.

  21. Постройте карьерный трек по каждому члену команды. Проводите аттестации. Внедрите карты компетенций. Давайте время на учебу. Внедрите OKR.

  22. Сами много читайте и развивайтесь. Пока есть развитие — не будет застоя. Обязательно почитайте старые книги Макаренко (например, «Педагогическая поэма»).

  23. Снижайте персонало-зависимость. Стремитесь к совместному владению кодом. Не должно быть укромных уголков.

  24. Делайте хороший продукт для хороших целей. Не тратьте время на разработку ерунды, от которой всех воротит.

  25. Всё будет хорошо. Даже если — не будет!

Комментарии (33)


  1. Apv__013
    06.06.2024 06:17
    +15

    "Делайте всё правильно и не делайте неправильно."

    Статья окончена.


    1. zevvssibirix Автор
      06.06.2024 06:17

      Наш техдир так же говорит. А потом на code review выкатывает такие портянки, порой — закачаешься) И все с юморком, с шуточками...


  1. Vurtatoo
    06.06.2024 06:17
    +1

    А экспорт данных из todoist в ваше приложение имеется?


    1. zevvssibirix Автор
      06.06.2024 06:17

      Да


  1. Goron_Dekar
    06.06.2024 06:17
    +1

    Вот же приятно слдушать про то, что пассивный доход не работает, и что стало сложно выкатить что-то и потом доить бедных пользователей не прикладывая усилий!

    Как бы я мечтал жить в мире, где "шарики" - принтеры за безценок с картриджами как крыло, подписки на игры, онлайн кинотеатры и режим pay-to-live был бы законодательно ограничены или запрещёны. Я хочу владеть тем, за что плачу деньги и хочу платить один раз!


    1. zevvssibirix Автор
      06.06.2024 06:17
      +2

      Вот меня тоже бесят подписки. Особенно когда подписался, а там БАЦ! И "Бмедиатека" или еще какой-то "+ФПлюс".

      Хотя за нормальный инструмент я готов платить. И за бензин. И за электричество.

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


      1. Goron_Dekar
        06.06.2024 06:17

        Я готов платить за расходники. И только в том случае, когда есть конкуренция, как в случае с бензином, или регуляция, как в случае с электричеством и водой.

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

        Ну продайте программу, и тогда серваки не будут просить! Пусть каждый, кто хочет, сам свои серваки поднимает, а вы будите новый кубик катать.

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


        1. zevvssibirix Автор
          06.06.2024 06:17
          +1

          >> Пусть каждый, кто хочет, сам свои серваки поднимает

          Сплю, и вижу...

          В вообще — мир пошёл по другой дороге. Так уж получилось.


          1. Goron_Dekar
            06.06.2024 06:17

            Мир по другой дороге не пошёл. Мы видим, как работают интеграторы, как выпускают научные статьи, как строят дома, как рожают детей. Это всё переворачивание кубиков.

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


            1. zevvssibirix Автор
              06.06.2024 06:17
              +2

              Фига сё, лёгкий... Это вы мой график не знаете. Но обсуждаете. Такое...

              А ещё мы видим, как все превращается в saas, а людей превращают в яндекс-таксистов. Мир — он многогранный.


              1. Goron_Dekar
                06.06.2024 06:17
                +2

                Ваша статья про то, что "кубы катать тяжело, а шары крутить легко". И про то, как вы сами выбрали катать шары, ибо это легче.

                Да, потом написано, что оказалось не легче. Но изначально сама идея выпустить сервис была продиктована предположением, что так будет легче зарабатывать, верно?


          1. qeeveex
            06.06.2024 06:17

            У jetbrains есть self-hosted решения.


        1. K0styan
          06.06.2024 06:17
          +1

          Всегда будет ниша облачных решений. Как минимум в B2C сегменте, где "поднять свой сервер" - задача малореальная для 99% людей. И тут подписка - наиболее естественный способ работы.


          1. Goron_Dekar
            06.06.2024 06:17
            +1

            Конечно. Как и ремонт часов, автомобилей, кафе, рестараны.

            Без этого мелкий и средний сегменты не работают вообще.

            Главное, чтобы была конкуренция, чтобы миграция от одного вендора к другому была легко доступной процедурой. Как смена ресторана или заправки.


    1. medwed
      06.06.2024 06:17
      +1

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

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


      1. Goron_Dekar
        06.06.2024 06:17

        Лучше в лизинг взять инструмент на время работы. Знаете, как это делают со станками, машинами, самолётами? С фиксированной платой, долговременным и планируемым договором, защитой прав на собственность и рассрочкой.

        И с возможностью продажы на вторичке в конце!


        1. medwed
          06.06.2024 06:17

          Лизинг = ежемесячные платежи
          Подписка = ежемесячные платежи

          В чем тогда преимущество для человека с похожим на ваше мнение? Я вижу это как просто другое наименование схожего процесса.

          Единственное, для компаний предоставляющих сервис в виде лизинга вместо подписки это может быть маркетинговым ходом, для оправдания более высокой стоимости по сравнению с подпиской)


          1. Goron_Dekar
            06.06.2024 06:17
            +1

            Тем, что в случае лизинга компания-поставщик уже не может поменять условия. Вообще. Лизинг - услуга, которую оказывает банк-посредник.

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

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


            1. medwed
              06.06.2024 06:17

              В разных облачных сервисах есть разные договора, условия там прописаны, и они могут быть схожи с лизинговым договором.

              Вот интересно сколько будет стоить лизинг какого нибудь популярного облачного сервиса на ваших условиях. И сколько вы готовы переплачивать за договор, дающий описанную вами гарантию (о нерасщиплении сервиса, доп расходах и тд.)?

              Можно взять для примера сервис которым вы пользуетесь и обсудить. Может и правда переплата того стоит.


              1. Goron_Dekar
                06.06.2024 06:17
                +2

                В моей профессиональной области сервисов нет: условия NDA напрямую запрещают ими полдьзоваться. Процентов 80 используемого софта открыты, остальные прилагаются к прибору или продаются на условиях лицензии.

                Но это наука, а точнее биотех.

                Для себя же я использую технику оценки стоимости подписки такую: я считаю, сколько денег надо положить в фонд, чтобы прибыль с него перекрыла инфляцию + стоимость подписки. Таким образом я получаю реальную стоимость использования сервиса, и делаю выводы: нужен он мне, или нет. Пока что нужными оказались только 2 подписки на патреоне.

                Новые фильмы не смотрю, игры покупаю на GOG.

                Против того, чтобы в обход лицензии получать доступ к продукции, которую мне иначе продавать (а не давать в аренду) не хотят ничего не имею.


                1. medwed
                  06.06.2024 06:17

                  Ваш комментарий "...подписки на игры, онлайн кинотеатры и режим pay-to-live был бы законодательно ограничены или запрещёны" тогда неполный, он этого, важного для вас, момента не содержит.

                  Речь в нем шла о сервисах для частного использования. Ваши условия в NDA запрещают сервисы, хотя они упомянуты в комменте. Тогда я не понимаю ваш крик души в нем.


                  1. Goron_Dekar
                    06.06.2024 06:17

                    Я не очень понял вашего коментария, но он я прочитал его как :"Это же не для вас сервисы, чего вы возмущаетесь? Вам они всё равно ни к чему!" Если вы хотели это написать, то у меня вопрос: зачем мы с вами обсуждаем меня? Давайте лучше останемся в рамках сравнения двух моделей продаж с точки зрения некоего абстрактного среднего бизнеса: лизинг с собственностью VS подписка.

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


                    1. medwed
                      06.06.2024 06:17

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

                      Я нигде не упомянул вашу личность, мне хватает этичности. Только ваш комментарий.

                      Продолжим тогда.
                      Фильмы и игры - конечный, неизменяемый продукт, в отличие от сервиса. Нужно еще поискать примеры. Я понимаю к чему вы клоните, но не могу найти сервис, который я бы хотел оплатить сразу (или в лизинг) и не желать обновлений, а использовать то, что купил изначально. Технологии развиваются, и мне чтобы использовать его через 3-5 лет, нужно искать старые версии ОС или браузеров или же библиотеки.

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

                      И еще, вы можете купить в лизинг версию 1.0, но за 2.0 нужно будет заплатить новую если в договоре это указано. Условия договоров такого ПО очень разнообразные, как и условия облачных сервисов.


  1. andi123
    06.06.2024 06:17
    +2

    Выбирая между двумя Руководителями Проектов, берите самого позитивного и
    энергичного. Никакие процессы не заменят энергию и драйв. Унылый
    Руководитель Проекта гарантированно сделает унылой всю команду и унылый
    продукт.

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

    Пришлось тут лекции послушать, из 20 докладчиков только одного не хотелось ускорить. И только на последней трети я вспомнил про функцию ускорения проигрывания. Теперь все вещали на комфортной для меня скорости. Кое-кого пришлось слушать на скорости х1.8.


    1. zevvssibirix Автор
      06.06.2024 06:17

      Круто!

      Ещё, говорят, кто быстро ест — тот быстро работает. Тоже, наверное, внутренние психические процессы)


      1. NewMan_by
        06.06.2024 06:17

        Можно быстро перекусить и бежать дальше, а можно есть медленно и в удовольствие. Я вот умею есть быстро, но люблю медленно и вкусно)

        А про важность энергичности менеджера команды очень верно подмечено, согласен на все 100. Сам раньше был 10 лет программистом, а последние 8 лет менеджер и готов работать на проектах только, если мне сам продукт нравится, иначе энергии не будет.


    1. bondeg
      06.06.2024 06:17

      Главное не того, что каждые 5 минут "ну скоро там"))


  1. NewMan_by
    06.06.2024 06:17
    +2

    Пользуюсь Singularity уже года 3 как, с тех пор как увидел его у Дорофеева. Хотя первые версии было с множеством багов, я не отказался, так как до этого перепробовал много разных тудушников, но ни один не ложился на систему Макса Дорофеева + мои хотелки от тудушника.

    У вас здорово получается улучшать и радовать пользователей, меня так точно)

    Удачи вам!


    1. zevvssibirix Автор
      06.06.2024 06:17

      Спасибо! Мы стараемся)


  1. Formeman
    06.06.2024 06:17

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

    На мой субъективный взгляд, слабыми в начале всего были оба направления которые являются ключевыми: бизнес и технический. Понятно, что планировался такой стартапчик своебразный, но если вы не продумываете свой бизнес план годиков на 5-10, то у вас не бизнес проект, а стартапчик, который скорее всего окажется выкидышем. Второй, технический, можно не продумывать всё это, если ты абубенный тех специалист, то в целом тебе эти планы не нужны. Ты пилишь проекты и ищешь инвесторов. По итогу автор не был готов ни к одной из областей и посыпалось всё и сразу. Что хорошо, потому что могли разворовать и кинуть, кормя завтраками. Дальше из-за того, что всё не сработало на молитве, началась настоящая работа руководителя на мой взгляд. Слушая видео Потапенко, лично я очень холодный душ получил, особенно когда он сказал, что вы обязаны знать сколько лампочек вам нужно, потому что кроме вас ваш бизнес никому нафиг не нужен. Вы должны знать всё, от и до. И только, когда вы уже знаете всё, вы можете делегировать что-то.

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


    1. Nick0las
      06.06.2024 06:17

      Было время, я раз за разом наблюдал такое явление: Некие иностранцы с опытом ведения бизнеса приходят с идеей в кампанию, занимающуюсяя разроботкой ПО, и заказывают приложение. Команда работает, ПО готово, но выход на рентабельность не случается. Или даже до запуска дело не доходит. А все потому, что такие величины, как стоимость разработки и выхода на рынок с одной стороны и потенциальный доход с продаж очень сложно оценить. И если стоимость разработки можно приблизительно прикинуть, то как пойдут продажи вам не скажет никто. И чтобы проект взлетел, нужен либо инвестор, который будет долго (годы) поддерживайть развитие продукта или нужно начинать проект с минимумом затрат (пилить своими силами по выходным).


  1. Nick0las
    06.06.2024 06:17

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

    1. Как вы оценивали потенциальный доход от продукта если оценивали вообще?

    2. Каким образом вы определяете, какую цену на подписку поставить почему условно $10 в месяц а не $5 или $20.

    3. Как вы анализируете телеметрию?

    4. Как вы находите кандидатов на cust-dev интервью?


  1. mtivkov
    06.06.2024 06:17
    +1

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

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