3 декабря 2018 было понедельником. Но для нас 3 часа ночи этого понедельника все еще воспринимались как бесконечное затянутое воскресенье. Мы с моей девушкой — а она еще успеет поучаствовать в этой истории — сидели за ноутбуками, чтобы не переносить дату релиза в третий раз. Она придумывала дополнительные ключевики для описания приложения в Google Play, я напоследок проверял, что слайды уроков нормально перелистываются. Этим вечером мы впервые залили YouCan для бета-тестирования.
В самом конце декабря в нем появится первый пользователь, который придет в приложение не по нашей прямой ссылке для друзей. На новый год мы загадаем 2 000 пользователей к концу 2019. За январь их будет 45. За февраль — уже 872. Почти год спустя, в 6:30 утра 8 ноября 2019 года, команда Google Play пришлет нам письмо, в котором поздравит с выдвижением YouCan на номинацию «Приложение года по версии пользователей», в которой мы окажемся единственными, не достигшими 100 000 скачиваний.
Очень хочется верить, что у этой истории будут красивые продолжение и финал, которые релизнутся чуть позже. Ну а пока — небольшой цикл статей, в которых постараюсь рассказать о той части пути, которая уже пройдена. Если вам интересно — добро пожаловать под кат.
О чем расскажу
Цикл будет состоять из трех статей:
- В первой расскажу, что происходило до 3 декабря: откуда взялась идея приложения, что помогло ему появиться на свет, ну и чуть-чуть — о полученных и выученных уроках.
- Во второй — отдам должное Хабру техническому, напишу, чем пользовался при разработке, как в очередной раз решил довериться Гуглу и его библиотекам.
- В третьей — расскажу о планах на ближайшее будущее, о собственных впечатлениях от этого эксперимента и отвечу на вопросы, если они появятся.
1% успеха — откуда взялась идея?
Идея и название приложения появилась намного раньше начала работы над ним. Намного — это года на 4. Название «YouCan» — это слова одного из моих учителей (Марк Петрович, вы вряд ли тут бываете, но все же — спасибо). Он однажды сказал, что фраза «ты можешь» несет гораздо больше пользы, чем фраза «ты должен».
А что касается идеи, — приготовьтесь, сейчас будут избитые слова, — я просто хотел сделать то, чего не хватало мне самому. Я сотни раз начинал что-то новое и сотни раз бросал это, потому что… неинтересно. Да — полезно, да — нужно, важно, но не интересно, не весело! Именно этот процесс мы и попробовали переизобрести — формировать новые привычки легче.
Why, Mr. Developer?
А зачем разработчику все это? Свой проект, когда есть основная работа с ее багами, тасками и митингами? У меня есть три ответа: про профессию, амбиции и счастье.
Профессия
Это огромный шаг в профессиональном развитии. Да, хороший разработчик, в первую очередь, должен писать хороший код. Но только хорошего кода недостаточно для развития любого продукта. Абсолютно любого. Даже если продукт — это библиотека, используемая такими же разработчиками, как и вы. Вокруг кода всегда есть другой дивный мир, который очень часто недооценивают и игнорируют. И свой проект, даже совсем небольшой — очень хорошая обзорная экскурсия в этот мир, чтобы понять, какие виды в нем обитают и как с ними взаимодействовать.
Амбиции
У меня есть ощущение, что в руках разработчиков (а точнее, в их головах) находится один из самых дорогостоящих инструментов в мире. К тому же, IT — чуть ли не единственная сфера, где не нужно много ресурсов, чтобы начать проект. В основном это время и знания. И когда я осознал два этих факта, я не мог отказаться от соблазна создать что-то свое. Если проводить аналогию: я понимаю людей, которые изучают недра земли, потому что любят геологию. Но я сам из тех людей, который учат геологию, потому что хотят найти в недрах что-то более ценное.
Счастье
За свою относительно короткую профессиональную жизнь я написал немного проектов — 5 или 6, но уже видел, как половина из них отправилась в корзину. И туда же вместе с ними улетали ночи моей работы, любимые решения, сотни бережно написанных тестов и все, все, все. И у этого была довольно простая причина: не я владел тем, что делал. Не я решал, что делать. Мне не принадлежали ни причины для моей работы, ни ее плоды. Да, обладание ими приносит и определенное количество трудностей, но не сопоставимо с удовольствием от чувства собственной полезности. Недаром один бородатый мужик писал когда-то о вреде отчуждения труда (пожалуйста, пусть комментарии не превратятся в обсуждение социализма и капитализма!)
Что было до?
Папка для приложения, из которой я собрал релизную версию приложения, называлась «YouCan (4)». Рядом лежали и пылились папка «YouCan» и номерные копии с 1 по 3. Это счетчик моих попыток наконец-то сесть и начать писать. Каждый раз я просиживал до поздней ночи, организовывал структуру, создавал стартовый экран и пару сущностей для базы данных. Но потом приходилось идти спать или смотреть новый сезон «Игры престолов», а потом «The International», и возвращаться за этот глупый старый код уже совсем не хотелось. Проще было начать с нуля и написать нормально. i++.
Github заполнен проектами, история коммитов которых начинается и заканчивается тем самым легендарным «initial commit». Большая часть приложений в Google Play обновлялась лишь единожды — во время своего релиза. И конечно, не существует универсального рецепта, как решить эту проблему (иначе вам бы его уже с удовольствием продавали в онлайн-школах). Поэтому все, что я могу — поделиться собственным рецептом.
Секретные ингредиенты
- Кто ты без своего компаньона?
Самый неоднозначный и непростой из ингредиентов. Новый человек в проекте — это не только ценный ресурс, но и в три-четыре раза увеличенная мотивация. И мой рецепт успеха максимально прост: возьмите свою девушку, добавьте ее лучшую подругу — и, вуаля, вы великолепны. Но думаю, этот рецепт подойдет далеко не всем, поэтому вот небольшой список идей, которые кажутся мне важными:- Вы должны понимать мотивацию нового человека. И уметь оценивать, насколько этой мотивации хватит. Пункт, о который даже мы успели обжечься несколько раз. Если человеку просто нравится твой проект и он хочет помогать в свободное от работы время, будь готов, что это пройдет уже на следующей неделе. Мотивация «мой труд должен быть оплачен» менее романтичная, но она гораздо крепче, а главное — практичнее. Есть еще мотивация «ты в доле», и она может быть как самым сильным из всех вариантов, если вы Uber, так и самым слабым, если вы решили сделать Facebook, только лучше.
- Идеально — если ваши компетенции соприкасаются, но не пересекаются. Когда практически все поле нужных навыков покрывается умениями вашей команды, но при этом не очень много зон, где вам приходится толкаться локтями и спорить. Потому что см. пункт 3.
- Будьте готовы к спорам и дискуссиям. Когда на проекте становится больше одного человека, мнений появляется столько же. Это и самое лучшее, что может случиться, потому что даже в пословице две головы были лучше одной, и самое худшее — потому что далеко не все отношения смогут пережить споры и дискуссии без обид, потери мотивации и ссор.
- Учитесь договариваться. Учиться этому можно бесконечно, и я не могу сказать, что овладел этим навыком полностью. Но мне кажется важным, чтобы каждый принимал решения в своей зоне ответственности, но при этом обсуждал ключевые вопросы со всеми участниками. В общем, как и любому сообществу, вам нужны четко сформулированные правила и ценности, которым подчиняется весь процесс.
- Работе — время, проекту — час
Я до сих пор не понял, на что похожа мотивация. Иногда она представляется мне мышцей, которая поддается тренировке. В другие моменты напоминает сосуд с маной, которая восстанавливается после отдыха и сна.
Но я почти всегда замечал одну закономерность: к вечеру, после рабочего дня, мне часто не хватало мотивации даже для дружеской встречи или поездки на велосипеде, не говоря о том, чтобы сесть и писать какой-то код, который я до этого писал весь день. Поэтому мое решение простое: вспомнить, что есть время, когда мышца отдохнула после сна, а сосуд восстановился за ночь — это утро, время непривычной тишины и концентрации. А чувство, когда вы работаете, пока остальные спят, наполняет энергией сильнее любого кофе.
Ну и как же не порекламироваться: если вы все еще не любите утро, мы идем к вам. В нашем приложении есть прекрасный курс о бодрящих утренних ритуалах, списанный с тех самых дней, когда YouCan только начинался.
- Не имей сто тестов, а имей сто интересов
Вот вы проснулись, решились, сели, и тут возникает вопрос:
что надетьна чем писать? Взять известный и сотни раз проверенный фрэймворк или ринуться с головой в бездну модных библиотек с конференций? Заморачиваться ли с написанием тестов? Сразу ли писать навека или идти итерациями?Вещь, с которой я определился в первую очередь — мне очень хочется чувствовать технический рост. Я люблю изучать что-то новое, знакомиться с теми библиотеками и инструментами, до которых вряд ли доберусь на работе. Ваш проект должен вызывать у вас азарт первооткрывателя, а не ощущение рутины и однообразности. Но и тут нельзя обойтись без того самого «но»: я точно не готов тратить драгоценные часы проекта на бесконечное чтение мануалов и долгие поиски по stackoverflow. Поэтому итоговое решение — мягкий баланс между двумя крайностями.
Я воспользовался новым архитектурным подходом для приложения, но при этом не стал отказываться от привычного реактивного подхода для асинхронных задач. На этом этапе ваш код должен быть похож на жилище кочевого народа: его не должно снести легким ветром, но в то же время руками он должен убираться легко и играючи. Так что в самом начале не стройте на века, сносить вам же через неделю. Для монументальных и долгосрочных построек есть основная работа.
- Когда вырастешь — тогда и будешь свою Jira использовать
Пункт, плавно вытекающий из предыдущего: не торопитесь создавать таск-трекеры и доски на трелло. Используйте те инструменты, которые у вас и так в работе. А новые добавляйте только в том случае, если это неизбежно. Конечно, трекать время на задачи и создавать документацию в Wiki — бесценно, но если сейчас можно обойтись без этого, давайте обойдемся?
У нас, конечно, появилась доска на трелло и даже папки с документами в облаке, но только тогда, когда нас стало трое и затраты на коммуникацию стали существенно выше. Но до сих пор мой самый любимый персональный трекер задач — отдельный чат в неком запрещенном мессенджере, куда я сообщениями отправляю найденные баги и проблемы.
Ну и напоследок
Вообще, эта статья писалась, чтобы попросить вас проголосовать за нас в номинации на “Лучшее приложение”. Но голосование закончилось уже вчера, а дописываю я ее только сегодня, так что вряд ли вы успеете. Поэтому напоследок я приберег немного пафоса. Совсем чуть-чуть, но куда же такая статья без этого?)
<пафос>
Один раз испытав удовольствие от позднего релиза в субботу вечером, впервые прочитав восторженный отзыв о своем приложении или поняв, что код, который вы писали вчера утром, сегодня сделал чью-то жизнь немного лучше, можно решить, что всю оставшуюся жизнь просто писать код и останавливаться на этом — очень скучно. Так что будьте готовы.
</пафос>
Автор: mksm_msk