Уроки написания утилитки на $1,000,000
Осенью 2008 года мы с приятелем потратили две-три недели свободного от основной работы времени, чтобы написать маленькую утилитку для бэкапа баз данных (MS SQL Server и потом MySQL). Сегодня она приносит нам около $230,000 в год и можно с уверенностью говорить, что суммарно мы заработаем на ней больше $1,000,000.
Под катом я расскажу, как это получилось и какие уроки мы из этого извлекли. Вполне возможно, что нам просто глупо повезло и опыт этот целиком неверен и теории не соответствует и только навредит вашему начинанию — читайте на свой страх и риск.
Начало
А началось все с неудовлетворенной потребности. На основной своей работе мы делали разные проекты на .NET + SQL. И простая задача создания бэкапа базы данных, его компрессии и перекачки на FTP сервер часто требовала нагромождения скриптов и утилиток. Посмотрели на доступные решения — оные попадали в одну из трех категорий:
- Дорогие и сложные (RedGate, LiteSpeed, Idera).
- Вроде неплохие для бэкапа файлов, но SQL бэкап там в качестве невнятного довеска (Handy Backup, IBackup).
- Дешевые или бесплатные недоделки в стиле VB6.
Рынку явно не хватало простого утилитарного продукта. Я поделился идеей с другом специализировавшимся на Windows-приложениях и предложил половину доходов. На мне был GUI и веб-сайт, на друге — собственно приложение.
Интерфейс
Стратегию определили так: делать все просто, чтобы даже начинающий пользователь смог в минимум кликов получить результат. А именно: выбрать базы, заархивировать, послать в папку или на FTP, получить email с подтверждением и поставить в ежедневное расписание. Все эти действа мы и выложили на основную форму, спрятав все остальное за кнопками Advanced и Configuration.
Урок 1 (он же главный): Найдите наикратчайший из способов удовлетворить потребность и не напрягайте пользователей деталями.
Нам через день предлагают добавить ту или иную фишку. Первый вопрос которым мы задаемся — а какому проценту наших пользователей это понадобиться. Если меньше 5% — мы этого делать не будем.
Урок 2 (вообще-то продолжение первого): ненужная большинству функциональность вредна поскольку усложняет понимание.
Вот как мы расправились с некоторыми из сложностей:
- Программа должна была работать с несколькими проектами/работами. Однако для большинства достаточно создать только один проект выбрав несколько баз для бэкапа. Мы сделали так, что программа сама открывает тот же проект, что и в прошлый раз и соединяется с тем же SQL сервером — так что большинство даже и не задумывается, что можно работать с несколькими проектами.
- SQL Connection String — до сих пор самая сложная часть для пользователя. При первом запуске мы, не спрашивая пользователя, перебираем самые распространенные Connection String, так что, открыв программу, большинство пользователей уже подключились к серверу и видят список своих баз данных.
- Посылка писем — чтобы не напрягать пользователей с настройкой SMTP мы по умолчанию посылаем письма через веб-сервис на своем сервере. Для бесплатных пользователей фишка бесплатна на неделю, а потом можно либо купить платную версию либо пользоваться своим Gmail или другим SMTP сервером.
- Расписание — большинству требуется Full Backup один раз в день. Что и можно сделать на основной форме. Для более продвинутых все настройки спрятаны за кнопкой Settings.
Деньги
Поработав немного, мы сделали первую версию программки. Далее мы поставили ее во все shareware-сайты и оставили комментарии на форумах по этой теме. Понемногу пошли клиенты. Через два месяца после выпуска нас заметила одна большая компания, продукт которой был основан на SQL и его пользователи с небольшими техническими знаниями были сами ответственны за бэкап. Для них мы подходили идеально и они послали всех своих пользователей к нам. Кроме этого они даже взяли на себя заботу по тех поддержке. Деньги потекли рекой.
Основная версия (Standard) стоит сейчас $59. Для тех компаний для которых это не деньги — у нас есть Professional с добавкой AES encryption за $69. Для экономных — Lite (максимум 5 баз данных) за $29. С год назад я прочитал какую-то статью о том, что цены на странице Prices нужно подавать от больших к малым дабы пользователю, испуганному первыми большими цифрами, цифра в середине показалась относительно скромной. Мы подумали: что бы такого выпустить дорогого чтобы пугать пользователей? Так родилась идея Lifetime-версии за $199 (сейчас $149) с бесплатными пожизненными обновлениями. И мы очень удивились когда ее стали бодро покупать!
Потом товарищ подкинул другую идею, которая принесла тысячи долларов. В добавок к продуктам мы продаем за небольшие деньги еще и Extended Support (тем, кто его купил — особое внимание при поддержке) и бесплатное обновление на 1 год (по умолчанию — 1 месяц). Дополнительные усилия близки к 0, а деньги понемногу капают…
Урок 3 — дайте пользователю заплатить столько, сколько он хочет и может.
Пиратство и жадность
С первых дней существования мы решили тратить только минимум времени на борьбу с пиратством. В программе зашит алгоритм на проверку лицензионного ключа который несложно взломать. Идея такова: если человек запускает keygen для взлома — он вряд ли заплатил бы за программу без этого. А так — будет пользоваться и, возможно, когда остепенится, тогда и почувствует потребность заплатить.
Многие устанавливают ключик на несколько машин — мы просто посылаем вежливые письма с напоминанием, что это неправильно. Компании в цивилизованных странах стараются договоренности соблюдать и покупают недостающие лицензии. С менее цивилизованными мы могли бы справиться добавив активацию, но это усложнило бы жизнь для большинства честных клиентов. И опять же: нами пользуются и это уже хорошо.
Урок 4 — концентрируйтесь на продукте, а не на защите. Пират сегодня — клиент завтра.
Большинству вполне хватает бесплатной версии в которой можно делать то же самое, что и в стандартной, только с ограничением в две базы данных. Благодарный народ даже пожертвования предлагает. Да мы и рады: когда потребности вырастут, тогда и заплатят, а заодно боремся с бесплатными самоделками.
Недавно мы добавили бэкапы в Amazon S3, Google Drive и Dropbox. Сначала было желание брать дополнительные деньги. Но решили не напрягать пользователей и просто добавить к существующим версиям. Будет больше пользователей — значит и доходы вырастут.
Урок 5 — довольные клиенты важнее сиюминутного наполнения карманов.
Далее...
В следующей статье я расскажу о том, как работать с контракторами, как мы вбухали кучу денег куда не нужно, как мы раскручивались, как наш работник пытался создать конкурентный продукт, как мы поступаем с трудными клиентами, как получаем и делим деньги, как смотрим на финансирование, как бэкапим в Cloud, как ввели trial, что с локализацией и куда движемся дальше.