Сегодня я хочу поговорить о создании собственных проектов, и чем это отличается от создания проектов для заказчиков. По возможности я проиллюстрирую свой рассказ примером создания мной социального микроблога Рубик.
Когда вы создаете проект для заказчика, то вам, по большому счету, плевать, будет ли проект коммерчески успешным. Заказчик хочет новую социальную сеть? Пожалуйста. А о том что очередная социальная сеть никому не нужна, и что создавать ее сегодня уже просто смешно, вы скромно умолчите. Заказчики часто не понимают, что большая часть фич, которые они хотят, на самом деле никогда не будут востребованы. Как-то мне довелось столкнуться с проектом, который со стороны выглядел обычным каталогом сайтов. На создание аналогичного каталога ушла бы неделя. Но на самом деле объем этого проекта составлял более ста тысяч (!) строк. Чего там только не было: и CRM, и конструктор сайтов, и навороченная статистика. Все эти компоненты системы объединяло одно — они были отключены за ненадобностью.
Отличительной особенностью любого проекта является то, что им пользуются люди. Иначе это не проект, а набор исходников. Как-то по молодости я решил написать блогохостинг. Писал три месяца, реализовал кучу фич. Когда дописал — впервые попытался запустить его на виртуальном сервере. Это «хозяйство» так тормозило, что через час попыток я понял что для хостинга лишь нескольких блогов придется арендовать выделенный сервер либо переписывать все с нуля. Оба варианта были нереальны. Но даже если бы все запустилось нормально, у меня с большой вероятностью возникли бы проблемы с привлечением пользователей. В итоге 3 месяца жизни пошли псу под хвост.
Этого можно было избежать и минимизировать потери времени, если бы я пользовался методикой нулевого прототипа, о которой расскажу далее.
При создании проекта «для себя» очень важно понимать, будет ли пользоваться проект спросом. Это можно понять лишь методом проб и ошибок. Чем быстрее вы попробуете, тем быстрее вы сделаете выводы в каком направлении стоит развивать проект и стоит ли. Ускорить процесс можно пройдя через следующие шаги.
В первую очередь у вас должна быть идея проекта. Забудьте про домен, название, дизайн. Это пока не важно. Важно то, каким вы представляете себе свой проект.
Моей идеей было «создать социальный блог о Ruby». Здесь надо отметить, что социальными блогами я называю все хабраподобные проекты, где каждый пользователь может постить, а остальные оценивать его «творчество».
Теперь нужно понять, какую проблему решает ваш проект. А для этого нужно абстрагироваться от реализации. Например, цель своего проекта я определил как «дать возможность Ruby-разработчикам обмениваться полезной информацией».
На следующем этапе запишите все-все фичи, которые вы хотели бы видеть в своем проекте. Не стесняйтесь, чем больше, тем лучше. В итоге у вас, скорее всего, получится внушительный список, реализация которого займет далеко не один человеко-месяц.
А теперь начинается интересное. Вы должны еще раз перечитать цель вашего проекта, после чего начать вычеркивать фичи, одну за другой. В итоге у вас должны остаться только самые ключевые фичи, без которых ваш проект потеряет смысл. Должно остаться такое количество фич, которое можно реализовать за один день. В моем случае пришлось отказаться от комментов, плюсования-минусования постов, кармы, тегов. Пришлось отказаться даже от авторизации и, следовательно, редактирования постов.
В итоге у меня осталось:
После того как мы порезали фичи приступаем к созданию нулевого прототипа. Нулевой прототип должен быть создан за один день. К вечеру все должно работать. Коряво, через задницу, но работать. Еще один день можно уделить приведению внешности вашего проекта в порядок. Ваш нулевой прототип готов и им уже можно (и нужно) начинать пользоваться.
Когда нулевой прототип создан, могут выясниться интересные вещи. К примеру, в моем случае выяснилось, что я просто не потяну написание полноценных постов для своего социального блога. Понятно, что первое время, пока проект не раскрутиться, только я и должен был бы их писать.
Гарантирую, что в любом проекте выяснятся интересные вещи о которых вы и не догадывались.
В моем случае пришлось немного подкорректировать идею проекта, заменив блог микроблогом. Но цель осталась прежней. После корректировки идеи пришлось пройти все шаги сначала. После создания второго нулевого прототипа выяснилось, что посты в микроблог я смогу писать регулярно и без проблем.
Когда вы определились с тем, какую конкретно идею будете реализовывать, переходите к созданию прототипа. Прототип должен быть цельным, готовым к использованию. В прототип вы добавляете только самые важные фичи, без которых немыслим использование вашего проекта реальными пользователями. Реализация прототипа должна занять у вас одну, максимум две (если проект сложный) недели. У меня из фич в прототипе было: авторизация, работа с постами, работа с комментариями.
Когда ваш прототип готов, пришло время разворачивать его на сервере. Могут возникнуть всякие неожиданности, которые нужно по мере возможности устранять. После успешного развертывания, попросите ваших друзей протестировать ваше приложение. Обнаружатся баги, которые вы не замечали замыленным взглядом. Критические баги необходимо профиксить. В моем случае вылез серьезный баг с авторизацией.
Здесь начинается настоящая жизнь вашего проекта. Если проект заинтересует пользователей — он будет успешен. Если нет — вооружайтесь новой идеей и возвращайтесь к первому шагу ;)
Я свой проект уже запустил и даже код открыл. Теперь очередь за вами.
ОБНОВЛЕНИЕ:
Еще раз поясняю. Есть нулевой прототип. Он делается за один день, исключительно для использования разработчиком, и для обкатки идей. А есть прототип, который становится самой первой публичной версией вашего проекта.
Нулевой прототип, только для вас и ваших друзей. Соответственно, моя ошибка не в том, что я не включил в своем нулевом прототипе экранирование html-тегов, а в том что дал здесь публичную ссылку на него. Приношу извинения всем тем, кому пришлось закрывать браузер со всеми вкладками, из-за скрипта вставленного каким-то имбицилом — я тоже попался. Сейчас экранирование добавлено.
Отвечу всем любителям проектировать. Я не призываю писать говнокод. Я лишь говорю о том, что не надо сильно заморачиваться на масштабируемости и архитектуре. Нужно создать нечто работающее. Убедиться, что это востребованно пользователями. Собрать фидбэк. И двигаться вперед.
По поводу простоты моего проекта. В комментах отметились, что мол у меня проект простой и его можно написать за неделю, а со сложным так не получится. Ребята, откуда вы знаете, каков был проект до обрезания фич? То что вы видите — это прототип, запущенный в продакшн. В моем изначальном проекте чего только не было: вики, база вакансий и резюме, публичные профили разработчиков, форумы, блоги, голосования и т. д. Но это было до того как я начал резать фичи и оставил лишь самое главное, ключевое.
Мне не известны примеры веб-приложений, для которых нельзя бы было за один день создать нулевой прототип. Даже для поисковой системы можно создать нулевой прототип. У вас есть примеры реальных приложений, которые не подходят под эту методику?
Проекты для дяди
Когда вы создаете проект для заказчика, то вам, по большому счету, плевать, будет ли проект коммерчески успешным. Заказчик хочет новую социальную сеть? Пожалуйста. А о том что очередная социальная сеть никому не нужна, и что создавать ее сегодня уже просто смешно, вы скромно умолчите. Заказчики часто не понимают, что большая часть фич, которые они хотят, на самом деле никогда не будут востребованы. Как-то мне довелось столкнуться с проектом, который со стороны выглядел обычным каталогом сайтов. На создание аналогичного каталога ушла бы неделя. Но на самом деле объем этого проекта составлял более ста тысяч (!) строк. Чего там только не было: и CRM, и конструктор сайтов, и навороченная статистика. Все эти компоненты системы объединяло одно — они были отключены за ненадобностью.
Проекты для себя
Отличительной особенностью любого проекта является то, что им пользуются люди. Иначе это не проект, а набор исходников. Как-то по молодости я решил написать блогохостинг. Писал три месяца, реализовал кучу фич. Когда дописал — впервые попытался запустить его на виртуальном сервере. Это «хозяйство» так тормозило, что через час попыток я понял что для хостинга лишь нескольких блогов придется арендовать выделенный сервер либо переписывать все с нуля. Оба варианта были нереальны. Но даже если бы все запустилось нормально, у меня с большой вероятностью возникли бы проблемы с привлечением пользователей. В итоге 3 месяца жизни пошли псу под хвост.
Этого можно было избежать и минимизировать потери времени, если бы я пользовался методикой нулевого прототипа, о которой расскажу далее.
При создании проекта «для себя» очень важно понимать, будет ли пользоваться проект спросом. Это можно понять лишь методом проб и ошибок. Чем быстрее вы попробуете, тем быстрее вы сделаете выводы в каком направлении стоит развивать проект и стоит ли. Ускорить процесс можно пройдя через следующие шаги.
Идея
В первую очередь у вас должна быть идея проекта. Забудьте про домен, название, дизайн. Это пока не важно. Важно то, каким вы представляете себе свой проект.
Моей идеей было «создать социальный блог о Ruby». Здесь надо отметить, что социальными блогами я называю все хабраподобные проекты, где каждый пользователь может постить, а остальные оценивать его «творчество».
Цель
Теперь нужно понять, какую проблему решает ваш проект. А для этого нужно абстрагироваться от реализации. Например, цель своего проекта я определил как «дать возможность Ruby-разработчикам обмениваться полезной информацией».
Фичи
На следующем этапе запишите все-все фичи, которые вы хотели бы видеть в своем проекте. Не стесняйтесь, чем больше, тем лучше. В итоге у вас, скорее всего, получится внушительный список, реализация которого займет далеко не один человеко-месяц.
Режем фичи
А теперь начинается интересное. Вы должны еще раз перечитать цель вашего проекта, после чего начать вычеркивать фичи, одну за другой. В итоге у вас должны остаться только самые ключевые фичи, без которых ваш проект потеряет смысл. Должно остаться такое количество фич, которое можно реализовать за один день. В моем случае пришлось отказаться от комментов, плюсования-минусования постов, кармы, тегов. Пришлось отказаться даже от авторизации и, следовательно, редактирования постов.
В итоге у меня осталось:
- добавление поста (может добавить кто угодно, авторизации нет);
- список постов;
- просмотр поста.
Нулевой прототип
После того как мы порезали фичи приступаем к созданию нулевого прототипа. Нулевой прототип должен быть создан за один день. К вечеру все должно работать. Коряво, через задницу, но работать. Еще один день можно уделить приведению внешности вашего проекта в порядок. Ваш нулевой прототип готов и им уже можно (и нужно) начинать пользоваться.
Когда нулевой прототип создан, могут выясниться интересные вещи. К примеру, в моем случае выяснилось, что я просто не потяну написание полноценных постов для своего социального блога. Понятно, что первое время, пока проект не раскрутиться, только я и должен был бы их писать.
Гарантирую, что в любом проекте выяснятся интересные вещи о которых вы и не догадывались.
В моем случае пришлось немного подкорректировать идею проекта, заменив блог микроблогом. Но цель осталась прежней. После корректировки идеи пришлось пройти все шаги сначала. После создания второго нулевого прототипа выяснилось, что посты в микроблог я смогу писать регулярно и без проблем.
Прототип
Когда вы определились с тем, какую конкретно идею будете реализовывать, переходите к созданию прототипа. Прототип должен быть цельным, готовым к использованию. В прототип вы добавляете только самые важные фичи, без которых немыслим использование вашего проекта реальными пользователями. Реализация прототипа должна занять у вас одну, максимум две (если проект сложный) недели. У меня из фич в прототипе было: авторизация, работа с постами, работа с комментариями.
Предзапуск
Когда ваш прототип готов, пришло время разворачивать его на сервере. Могут возникнуть всякие неожиданности, которые нужно по мере возможности устранять. После успешного развертывания, попросите ваших друзей протестировать ваше приложение. Обнаружатся баги, которые вы не замечали замыленным взглядом. Критические баги необходимо профиксить. В моем случае вылез серьезный баг с авторизацией.
Запуск
Здесь начинается настоящая жизнь вашего проекта. Если проект заинтересует пользователей — он будет успешен. Если нет — вооружайтесь новой идеей и возвращайтесь к первому шагу ;)
Я свой проект уже запустил и даже код открыл. Теперь очередь за вами.
ОБНОВЛЕНИЕ:
Еще раз поясняю. Есть нулевой прототип. Он делается за один день, исключительно для использования разработчиком, и для обкатки идей. А есть прототип, который становится самой первой публичной версией вашего проекта.
Нулевой прототип, только для вас и ваших друзей. Соответственно, моя ошибка не в том, что я не включил в своем нулевом прототипе экранирование html-тегов, а в том что дал здесь публичную ссылку на него. Приношу извинения всем тем, кому пришлось закрывать браузер со всеми вкладками, из-за скрипта вставленного каким-то имбицилом — я тоже попался. Сейчас экранирование добавлено.
Отвечу всем любителям проектировать. Я не призываю писать говнокод. Я лишь говорю о том, что не надо сильно заморачиваться на масштабируемости и архитектуре. Нужно создать нечто работающее. Убедиться, что это востребованно пользователями. Собрать фидбэк. И двигаться вперед.
По поводу простоты моего проекта. В комментах отметились, что мол у меня проект простой и его можно написать за неделю, а со сложным так не получится. Ребята, откуда вы знаете, каков был проект до обрезания фич? То что вы видите — это прототип, запущенный в продакшн. В моем изначальном проекте чего только не было: вики, база вакансий и резюме, публичные профили разработчиков, форумы, блоги, голосования и т. д. Но это было до того как я начал резать фичи и оставил лишь самое главное, ключевое.
Мне не известны примеры веб-приложений, для которых нельзя бы было за один день создать нулевой прототип. Даже для поисковой системы можно создать нулевой прототип. У вас есть примеры реальных приложений, которые не подходят под эту методику?