Feature-donation driven development

в 11:47, , рубрики: crowdfunding, краудфандинг, разработка, финансирование проекта, метки: , ,

Здравствуй Хабр!

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

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

Итак, какие же мысли легли в основу:

  1. Делать качественное и востребованное ПО – это здорово!
  2. Ещё лучше, когда оно бесплатно для пользователя.
  3. Но разработчику нужны деньги чтобы выжить.
  4. Продавать за фиксированную цену готовый продукт – не хорошо (см. пункт 2)
  5. Надеяться на добровольные пожертвования – сомнительная перспектива.

Решением этих проблем является несколько изменённая модель crowd funding, встречайте…

Feature-donation driven development

Изначально придумал для этой модели название donation driven development, но потом переписал на нынешнее (как она называется здесь), чтобы не возникало путаницы с существующими терминами. Можно ещё хитрее (и более точно): community-donations-shaped development. Если сформулировать кратко, то: сообществом пользователей продукта оплачивается только его развитие, а не каждая отдельная копия, при этом развитие происходит в том направлении, которое выбирается сообществом и подкрепляется пожертвованиями.
Далее более развёрнуто.
Основные положения модели:

  • Последняя стабильная версия продукта доступна всем, всегда и бесплатно.
  • Баги стабильной версии фиксятся в срочном порядке и так же бесплатно.
  • Разработка ведётся методом имплементации фич.
  • Фичи могут добавляться как командой разработчиков, так и сообществом пользователей.
  • Перед началом имплементации фича должна быть оценена* разработчиками.
  • Оплата принимается от сообщества пользователей в пользу конкретной, уже оцененной фичи.
  • Разработчики обязуются имплементить профинансированные фичи.

*под оценкой понимается определение сложности задачи и необходимых для её выполнения ресурсов (финансирование, время, специалисты)
Фичей может быть практически что угодно, начиная от добавления определённого языка интерфейса и заканчивая рефакторингом кода для улучшения производительности.
Эту модель можно применять как для standalone приложений так и для веб-сервисов, для маленьких или довольно больших проектов (по размеру команды разработчиков или по богатству функционала). Возможно, с некоторыми доработками она применима и к opensource проектам.
Среди плюсов стоит перечислить следующее:

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

Естественно имеются и свои минусы:

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

Детали жизненного цикла фичи

DDD: feature lifecycle
Все фичи находятся в общем пуле. Добавить фичу в пул может любой желающий, при этом она будет иметь статус подлежащей обсуждению.

Обсуждение

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

Финансирование

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

Разработка

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

Публичное тестирование

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

Интеграция в стабильную версию

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

Проблемы и возможные решения

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

Проблема: Пользователи не жертвуют на развитие проекта.
Решение: Тут может быть несколько причин. Самая невероятная — имеющаяся версия продукта идеальна и не требует доработки. В этом случае остаётся надеяться на благодарность пользователей разработчикам такого великолепного софта. Более реальная причина — слишком высокие запросы разработчиков. Согласитесь, никто не будет платить 1000$ за изменение фона какой-нибудь кнопки, даже если это повысит юзабилити на 146%. Ставьте реальные цели и запрашивайте адекватные суммы (например, можно рассчитывать размер пожертвования основываясь на количестве необходимого времени и стоимости часа Вашей работы). Кроме того возможен вариант, когда целевая аудитория продукта просто неплатёжеспособна. Тогда надо либо перестраиваться на другую аудиторию, либо начинать заниматься благотворительностью.

Проблема: Всем пользователям не угодишь. Что нравится одним – совершенно не устраивает других.
Решение: В случае standalone приложений можно иметь несколько веток стабильной версии. Так же можно разрешать/запрещать фичи в конфигурации, если это позволяет архитектура приложения. И вообще подобные вопросы лучше разрешать ещё на этапе обсуждения фичи.

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

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

Заключение

Хочется верить что данная модель будет работать в реальном мире. По крайней мере в случае с zbedic видно, что необходимые суммы были собраны для некоторых фич. Если вам известны другие примеры – делитесь ссылками.
Быть может кого-то данная статься подтолкнёт к размышлениям или даже вдохновит на создание целой платформы для DDD. Что касается использования в моём проекте, то до реализации руки дойдут ещё не скоро, но я обязательно вернусь к этой идее.

P.S.: Прошу сильно не пинать за оформление и возможные ошибки, так как это моя первая статься на хабре и вообще первая публикуемая где-либо статья. Конструктивная критика приветствуется.

Спасибо за внимание.

Автор: emreu


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js