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

Во всех пособиях сказано: 

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

У вас есть идея, вы создаете MVP минимальными усилиями, скажем, половиной разработчика, и делете релиз.

MVP готов, что дальше?

После релиза MVP вы все еще не знаете, “выстрелит” ваш сервис или нет. Поэтому не понимаете, стоит ли привлекать дополнительные силы. ”Команда” остается прежней  —  половина разработчика.

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

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

Непредвиденная ситуация и сложный выбор

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

Вы приходите к разработчику, он предлагает вам руками обнулить баланс клиента в базе на проде. Устроит ли вас такое решение? Надеюсь, нет. Вы просите разработчика сделать форму обнуления баланса. Что он вам ответит? “У меня сейчас по плану фича X для клиента. Я могу её отложить”. В этот момент в вашей системе приоритизации возникнет деление “внутренние” и “внешние” фичи. А еще становится понятно, что кому-то придется подождать: либо вам, либо клиентам.

Обсуждая логику работы функции обнуления баланса, разработчик говорит, что “может” сделать так, чтобы она работала как простое обнуление руками. По-другому сделать “нельзя”. А вам нужно не просто обнулять, вам нужно сделать историческую запись об обнулении, отображать её юзеру.

В кавычках эти ключевые слова не просто так: “можно”  —  это можно сделать просто и быстро, “нельзя”  —  это возможно сделать, но делать долго и нецелесообразно с точки зрения разработчика. В этом месте выясняется (или вспоминается), что ваш биллинг  —  это не бухгалтерия с двойной записью и логированием, а простое поле user_balance в таблице users базы данных. Разработчик считает переработку биллинга нецелесообразной: во-первых, это займет много времени, во-вторых, он точно не знает, как сделать биллинг правильно, в-третьих страшно менять базовые сущности в рабочей системе  —  ведь у вас уже 20 платящих клиентов!

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

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

Расширение команды, которое не помогло

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

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

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

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

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

Неожиданный доход

Однажды, изучая метрики, вы падаете со стула: обычно каждый день ваш сервис имеет доход 100$, но сегодня был 10 000$!

Очень быстро выясняется, что за день было зарегистрировано тысяча аккаунтов, в каждом аккаунте было множество попыток оплаты с разными реквизитами. Вы попали под скам-атаку, об вас проверяли тысячи реквизитов платежных карт. Часть попыток были успешными, в итоге фейковые аккаунты пополнили баланс на 10 000$.

Становится ясно, что безопасность продукта на нуле. Логично, ведь в процессе проектирования вы не уделяли этим вопросам никакого внимания. 

Осознание большой проблемы

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

Вы встряли, и ваш сервис находится под угрозой. У вас есть следующие пути развития:

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

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

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

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

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

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

TL;DR:

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

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

Чему вам придется уделить много внимания после релиза MVP и подтверждения гипотезы:

  • Структура БД

  • Архитектура проекта (речь не только о кодовой базе, но и о серверной части)

  • Вопросы безопасности

  • Оптимизации

  • Веб — аналитика

  • Тесты

  • Документация

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


  1. vmkazakoff
    06.10.2024 20:33
    +10

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

    Если mvp был нужен для проверки, то это нормально, но потом надо выкинуть его нахрен и стереть весь код. К сожалению эффективный менеджмент видит там "потенциал" и "деньги" и в итоге этот тестовый продукт становится тем самым легаси... В итоге в машине руль от самоката, тормоза от велосипеда, мотор от мопеда и 1000 недовольных пользователей. Которые перейдут к конкуренту, как только он появится. А он появится, ведь гипотеза оказалось доказанной, а решение кривыми.

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


    1. vKreker Автор
      06.10.2024 20:33
      +1

      К сожалению эффективный менеджмент видит там "потенциал" и "деньги"

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

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


      1. mvv-rus
        06.10.2024 20:33
        +1

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

        Вообще не факт, что в конкретном случае это сделать возможно хотя бы принципиально. В общем случае, утверждение, что потенциальный спрос (наличие которого проверено MVP) может окупить разработку полноценного продукта - это, при нынешнем технологическом уровне отрасли разработки ПО , ровно такая же гипотеза, как и гипотеза о спросе. И ее тоже надо проверять на практике.


    1. dotnetchik
      06.10.2024 20:33
      +2

      Если mvp был нужен для проверки, то это нормально, но потом надо выкинуть его нахрен и стереть весь код.

      Такой MVP называют прототипом, на сколько я помню (как первый элемент в верхнем ряду). Его переписывают полностью.

      MVP - это всё таки больше продукт, который можно развить (вот как в 3-м ряду).


  1. IgorAlentyev
    06.10.2024 20:33

    Мысль то здравая и правильная, зачем минусят? :(


    1. 1dntfkngcare
      06.10.2024 20:33
      +1

      Потому что выглядит как записки графомана. Человек выше объяснил тоже самое одной картинкой. К тому же тема заезжена, и даже я, который программировал разве что в девятом классе на паскале, уже читал подобные рассуждения.
      Лично я бы не минусил, а отнёсся нейтрально.


      1. stracca
        06.10.2024 20:33
        +1

        Эта картинка - МВП статьи. И если кому-то понятно общее видение и ситуация, и они относятся нейтрально, то есть люди, которым это совсем не понятно. Видимо, автор столкнулся со вторым "лагерем". Как и я. Скину статью коллегам, кстати


      1. vKreker Автор
        06.10.2024 20:33
        +6

        Ну только не надо обесценивать статью настолько, что "каждый школьник знает".

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


  1. peterzh
    06.10.2024 20:33
    +2

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

      1. оценить беклог, включая техдолг,

      2. приоритизировать

      3. понять кого берем

      4. набрать

    2. при этом надо четко понимать, что набор даже сильного разработчика вначале время разработки замедлит: он будет разбираться в том, что есть (док то нет) и дергать старичков. (правда если небольшое MVP, недолго)

    3. Все это должно быть спланировано и запихнуто в план работ/финплан и так далее.


  1. wiktorbgu
    06.10.2024 20:33
    +1

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

    И тут задействована большая цепочка от жалоб клиентов к личному менеджеру/горячей линии <=> техподдержка <=> dba'шники которые выполняют скрипты на проде и все тратят время на откладывание проблем на завтра одними и теми же костылями годами.

    А эффективные менеджеры закрывают глаза на эти проблемы.


  1. Jonny4872
    06.10.2024 20:33

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

    А можно собрать на старте MVP максимум экспертизы и включить в команду зрелого ментора, желательно имеющего опыт факапов, и проектировать сразу MVP+

    Это дороже в моменте, но дешевле на длительной дистанции. Главное - убедить в этом менеджмент, поэтому ментор должен быть там в авторитете


  1. Apoheliy
    06.10.2024 20:33
    +3

    Предлагаю немного о грустном:

    Возможно, уже пришло время упоминавшейся выше "половине разработчика" (и целой армии таких же) осознать, что идея стартапа в ИТ уже не работает? Точнее так: работает, но стартап должен потом превратиться во что-то и за счёт кого-то.

    Понять, что ИТ уже вырос из штанишек? И для мало-мальски успешного продукта нужен другой подход? Можно привести аналогии с кинематографом: можно снять вполне успешный низкобюджетник и даже отличиться на каком-нибудь фестивале. Но потом всё равно подключаются "взрослые дяди", которые "немного" вкладываются и получается кино на уровне (или, конечно же, не получается). А проталкивать идею, что "буду снимать полный метр на уровне голливуда чисто за счёт карманных денег" - ну это даже не смешно.

    В общем, по-моему, ИТ уже вырос. Это немного грустно, но так есть.


    1. peterzh
      06.10.2024 20:33
      +1

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

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


    1. vKreker Автор
      06.10.2024 20:33

      Мне нравится ход ваших мыслей. Хотя с заключением я не соглашусь. Время еще не пришло.

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

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


  1. gun_dose
    06.10.2024 20:33
    +2

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

    Пока разрабы всё это фиксят, ПМ, аналитики и прочие должны скорректировать дальнейший план, т.к. 100% поменяются приоритеты следующих фич. Что-то, возможно, даже выбросится из плана. Плюс по взаимодействию с юзерами сразу появятся задачи для дизайнеров.

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


  1. Dhwtj
    06.10.2024 20:33

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

    Часто из ценного только уточненные требования пользователей. Архитектура и код могут не оказаться полезными в этот момент, значит это демо а не MVP
    Много раз сталкивался что не проверяют, верно ли что MVP действительно Vitae

    так что на картинке с машинками 3 случай тоже не MVP
    если продукт это автомобиль (а не их производство), то MVP это тюнинг, новые колеса и т.п.
    продукт не должен меняться СЛИШКОМ ДОРОГО