Startup в одиночку. 10 советов для успеха
Всем привет! Меня зовут Роман. Я системный программист, разработчик ПО. Мысль о самостоятельном проекте мне давно не давала покоя, хотелось сделать что-то свое. На старте своего проекта у меня за плечами был 10 летний опыт профессиональной деятельности. Работал в международных компаниях, был опыт самостоятельной разработки. На тот момент у меня уже были глубокие знания в различных IT областях, а также участие в успешных проектах, которые до сих пор приносят доход компаниям.
Накопленный профессиональный опыт это очень хорошо, но не он сыграл главную роль в моем startup проекте, он лишь помог мне достичь цели. Для того, чтобы постоянно двигаться к своей цели должна быть какая-то мотивация: деньги, личный успех, самореализация, желание изменить мир или что-то другое. В этой статье я расскажу и поделюсь своим личным опытом о том, как успешно довести до конца разработку своего проекта. Под успешным завершением проекта я понимаю получение первой версии своего продукта и вывод его на рынок, не более того.
Я думаю, что эта статья будет полезна для тех, у кого нет реального опыта разработки собственных проектов, а также для тех специалистов кто уже начал заниматься своим проектом. Речь пойдет о большой системе, а не о маленьком приложении, которое можно реализовать за два-три месяца.
У меня изначально было два пути. Первый — реализовать систему так, чтобы она хоть как-то, но работала, а затем развивать ее. Второй — сделать систему изначально очень стабильной, кросс-платформенной и предусмотреть будущее развитие проекта. Первый путь был более заманчивым и предпочтительнее, он бы занял гораздо меньше время до первого релиза. Я обладаю некоторой долей перфекционизма, поэтому выбрал второй путь. Сделав выбор в сторону перфекционизма, я совершил не значительную ошибку, но в последствии эта ошибка принесла мне большой опыт. Я понимал, что любой из двух вариантов потребует серьезной и напряженной работы, значительных моральных и материальных затрат.
Весь накопленный опыт вообще сложно передать в какой-либо статье. Я попытаюсь выделить и кратко описать 10 пунктов, которые сыграли ключевую роль в моем startup проекте на этапе разработки, думаю они помогут и другим разработчикам. На пути к вашей личной цели вам так или иначе предстоит пройти через все эти пункты. Итак начнем.
1. Вера
Вера в себя и в то, что вы делаете. В самом начале, на старте вашей самостоятельной деятельности, многие начнут вас отговаривать. Они вам будут говорить: «Зачем тебе это нужно?», «Для кого ты это делаешь... ?», «Люди ломаются, выдержишь ли ты?» и прочее. Будут и те кто вас поддержит. Это вполне нормальная ситуация, советую не обращать на это особого внимания. То, что вы начали самостоятельную деятельность — это претензия к своей жизни, вас не устраивает текущая ситуация и вы захотели получить больше. Скорее всего остановился рост, вы что-то осознали в жизни, либо вы достигли потолка в своей сфере деятельности.
Я был готов сделать что-то самостоятельно и не боялся того, что придется делать все в одиночку, помните про мой опыт самостоятельной разработки? Этот опыт очень сильно помог мне. В итоге ваша вера перерастет в уверенность.
2. Воля
Вас ждет долгий путь и необходимо обладать сильной волей. Я работал над своим проектом приблизительно 2,5 года до выпуска первой версии. Рекомендую сделать систему в целом, пойти по первому пути — так будет гораздо проще.
Самое главное — получить какой-то весомый результат уже через два-три месяца своей деятельности. Если результата не будет, у вас начнет пропадать мотивация, может кончиться запал и не останется сил на завершение проекта.
Ваша воля будет расти благодаря каждодневным достижениям. Очень полезно постоянно анализировать свою работу за последний период, к примеру за последний месяц. Благодаря этому анализу у вас будут появляться положительные впечатления о проделанной работе. Скорее всего появится чувство, что ваша цель уже совсем рядом и до нее рукой подать, но не стоит спешить с этим. Необходимо подходить ко всему рационально, не думайте о конечном результате. Просто делайте свою работу изо дня в день иначе вы будете мысленно находиться уже в конце разработки, а реальное положение вещей будет таким что вам еще очень многое надо сделать и прилично потрудиться.
3. Общение
Общайтесь с разными людьми, не замыкайтесь на своем проекте. Общайтесь на отвлеченные темы с незнакомыми людьми, знакомьтесь с новыми людьми. Все это поможет вам достичь вашей цели. Кроме того, в дальнейшем все эти люди смогут высказать вам свое независимое мнение по поводу вашего проекта.
По специфике своей профессии многие программисты — это замкнутые личности, и чем раньше вы преодолеете этот барьер общения с людьми тем лучше, не надо зажиматься внутри себя. Вы должны уметь общаться с незнакомыми людьми. Возможно ваш проект сделает вас популярным или вы получите какую-то известность в своих кругах, вам просто придется уметь это. Необходимо вести полноценный образ жизни, ваш проект это не сама жизнь, это ваша цель не более. Общение это ключ к успеху.
4. Простота
Не надо делать «из мухи слона», все должно быть просто, не усложняйте свою систему. Система изначально должна быть простой и прозрачной. Вы должны понимать каждый кусок своей системы: что, где, зачем и почему. Простую систему понять проще чем сложную.
Старайтесь использовать общеизвестные приемы в разработке, шаблонные алгоритмы, паттерны и прочее. Не надо придумывать свой велосипед на каждом шагу. Если система не получается в каком-то месте простой, то отступитесь на время, переключитесь на другую задачу. Возможно, вы чего-то не знаете, почитайте литературу, спросите совета у более опытных специалистов, да просто отдохните.
Главное — ничего не усложнять, так как простую систему усложнить всегда можно, а вот сложную уже нет. Сложная система это путь в долгий debug с поиском «несуществующих» ошибок в проекте. Если ваша система самодостаточная и у вас не получается какое-то место, то временно можно использовать сторонний код или какие-то сторонние библиотеки.
Разрабатывать систему лучше поэтапно, блочно, итеративно, не надо смешивать все в кучу. Разбивайте проект на более мелкие: файлы, функции, операции. В конечном итоге проект будет рости и совершенно неочевидные вещи в начале разработки станут ясны по ходу дела. Не старайтесь абсолютно все продумать наперед, у вас все равно это не получиться, не надо тратить на это время.
5. Откаты
В любой разработке бывают моменты, когда надо отступить назад и переписать часть своего проекта. Это вполне нормально и надо уделять этому время. Система развивается, растет, добавляются новые особенности, и они, зачастую, конфликтуют со старой архитектурой. Обычно так происходит в самом начале разработки.
Не возможно все предусмотреть на этапе проектирования, реальная разработка расставит все на свои места. Если взять общее время разработки за 100%, то на переписывание кода у меня ушло около 10-15%. Совершенствуйте свой код и идите вперед. Может получиться так, что некоторые места, которые вы придумывали и писали неделями, на каком-то этапе разработки полетят в мусорное ведро. Поэтому иногда полезно анализировать реальную пользу того что вы делаете. Невозможно быть экспертом во всех областях, вы должны понимать, что где-то будет хороший код и реализация алгоритма, а где-то нет. Со временем вы приобретете большой опыт и будете бить точно в цель, все само собой начнет получаться.
У вас должен быть свой стиль программирования, если у вас его нет, то вам придется его наработать. Как только у вас будет свой стиль, старайтесь везде его соблюдать. Понимание красоты кода и хорошей структуры проекта приходит не сразу, а с большим опытом. Если у вас нет такого опыта, то советую писать так как умеете и поглядывать на хорошо написанные проекты, изучать их структуру, читать код, перенимая опыт. Все остальное придет со временем.
6. План
У вас должен быть общий план на год и точный план на месяц. Без планирования вообще сложно что-либо сделать. Общий план на год можно кратко изложить на листе бумаге и поглядывать на него время от времени. Подумайте, как ваша система будет устроена в целом, разбейте это на большие задачи — это и будет ваш годовой план.
Текущий план необходимо формировать ежемесячно. Подумайте примерно, какие задачи вы будете решать в течении месяца, к чему стремиться и т.д. План можно организовать в виде таблицы: время — задача. Разбивайте большие задачи на подзадачи. Стремитесь к тому, чтобы максимальное отведенное время на одну задачу было меньше 0,5 дня. К примеру, если задача занимает 0,8 дня, то ее лучше разбить на две подзадачи 0,3 + 0,5. Это очень важно на первых порах, не ленитесь с этим, так вы будете четко понимать куда уходит ваше время. После выполнения очередной задачи можете переключаться на другую.
Если что-то не получается или вы зашли в тупик, то лучше отступиться и поработать над другой задачей, решение придет к вам само через некоторое время. Когда остается время в конце дня, а за новую задачу браться не совсем охото, лучше попытаться проанализировать текущую ситуацию. Рассмотрите весь проект в целом: что, где и как. Постарайтесь увидеть общую картину происходящего. Подумайте, где и что можно улучшить, запишите это. Затем эти записи можно внести в следующий план, либо скорректировать текущий.
7. Дисциплина
Вы должны понимать, что если будете сидеть весь день в социальных сетях и болтать, то время уйдет в пустую и его уже не вернешь. Вы сами контролируете весь процесс разработки и по сути от этого зависит ваше будущее. Вы сами по себе, вы выбрали этот путь и являетесь одновременно: разработчиком, заказчиком и менеджером проекта. Отнеситесь к этому серьезно.
Распределите время на нужные для вас интервалы. Пользуйтесь ситуацией, это не ваша прошлая работа, вы вольны делать все что хотите. Можете отдыхать в середине дня, а потом работать до вечера. Установите свой режим, который будет наиболее оптимален для вас. Старайтесь придерживаться этого режима, если вы начнете нарушать дисциплину, перерабатывать или наоборот халтурить, то может начаться хаос. Остановить хаос может только дисциплина.
8. Отдых
Старайтесь отдыхать по мере возможности. Выберите себе место там, где вы будете каждый день гулять утром и вечером. Это может быть любым местом в вашем городе: парк, сквер, стадион, улица, да все что угодно. Это обязательно надо делать, необходимо отвлекаться.
Нагрузку чередуйте с отдыхом. Работать лучше стандартную рабочую неделю — 5 дней в неделю, 9 часов в день. Еще раз упомяну, что я говорю о длительном марафоне, а не о забеге на короткую дистанцию. Если вы будете работать еще и часть выходных, то вы быстро устанете и вам все это надоест. Главное — не переусердствовать и не дойти до степени профессионального выгорания.
Ищите новые интересные места, выезжайте на природу, встречайтесь с друзьями и знакомыми. Ходите в театр и кино, мозг будет переключаться от работы и отдыхать это очень полезно. Вы добьетесь больших результатов через отдых. Запишитесь в спортивную секцию или ходите на тренировки, бегайте по стадиону и ведите активный образ жизни это очень помогает. Расслабляйтесь и отдыхайте от своего проекта.
9. Релиз
Итак, вы дошли до первого релиза, и у вас уже почти все готово. Поздравляю! Релиз это компромис между разработчиком и его системой. Не старайтесь впихнуть все по максимуму в свой первый релиз. Желаний много, но deadline должен быть.
Лучше добейтесь гарантированной работы системы, чтобы все работало и «не падало», все новые функции можно добавить в следующей версии. Это что касается сроков, но есть и другая часть — ваши желания.
Если вы разрабатываете мобильное приложение, то в обязательном порядке ознакомьтесь с правилами размещения приложения в намеченном магазине. Надо реально смотреть на вещи такими какие они есть и выполнять все требования «от и до».
Для меня было очень странным, что в App Store не принимаются приложения работающие в фоне без VoIP сервиса. VoIP сервис хотелось добавить в ближайшее время. В итоге фоновый режим пришлось заблокировать, так как приложение не прошло бы review.
Отсекайте все, что вызывает сомнения, вчитывайтесь в требования и выполняйте их. Главное выложить стабильную первую версию, все остальное вторично. Если что-то не понятно это всегда можно спросить у сообщества. Кстати, никогда не бойтесь задавать вопросы более опытным специалистам, все знать невозможно.
10. Переоценка
Не думайте, что большой успех придет вам сразу как только вы сделаете первый релиз. Большой успех складывается из многих аспектов вашей работы. Для меня большой успех это когда продукт имеет многомиллионную аудиторию пользователей. После релиза нужно хорошо потрудиться с раскруткой продукта, рекламой, пытаться сделать свой продукт популярным.
Очень часто технические специалисты тщательно продумывают свою систему и забывают о реальных пользователях. По большому счету, пользователям все равно как система устроена изнутри, им главное получить удовольствие от ее использования. Стоит ли говорить о том, что ваша система должна быть стабильна, это и так думаю понятно.
Нужно вкладываться и освещать свой проект, если у вас нет время на это, то наймите кого-нибудь, обратитесь к специалистам. Рекламируйте себя и свой проект везде где это возможно. Нужно действовать решительно и не останавливаться. Вы должны понимать, что прежде чем собрать хороший урожай нужно хорошо потрудиться. Это один из наиболее важных этапов.
P. S.
В итоге у меня получилось вывести свой продукт на рынок, и я этому очень рад. Каждый из пунктов важен и не стоит пренебрегать каким-либо из них. Все, что описано в этой статье я пережил и прочувствовал на себе. Чувство личного успеха пришло ко мне, как только я увидел заветное «Ready for Sale» в письме от Apple. Это чувство очень сложно передать в какой-либо статье :-) Я проделал долгий путь от идеи до конечного продукта и это того стоило. Я думаю вы и сами все это испытаете, пройдя свой путь. Не важно, длинным будет ваш путь или коротким, главное дойти до своей цели. Творите и будьте успешными!