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