Как я разбиваю проекты, чтобы увеличить шансы на успех.

Я собираюсь начать работу над новым проектом по программированию и пытаюсь подумать о том, что я могу сделать, чтобы попытаться гарантировать как можно больший успех. Для меня самое важное время при создании проекта — это первые несколько дней или недель, когда я все еще очень взволнован тем, что делаю. В это время я могу с удовольствием работать над проектом и не отвлекаться на другие идеи или занятия. Поэтому я решил, что в первый период волнения для меня критически важно получить полностью готовый и закодированный минимально жизнеспособный продукт. Если я этого не сделаю, мне редко удастся создать дополнительное волнение, чтобы проект продолжался. Однако если мне удастся создать рабочую версию на раннем этапе, мое волнение не угаснет, и я смогу продолжить работу над проектом, со временем добавляя новые функции.d

До недавнего времени я никогда особо не задумывался о приоритизации наиболее важных функций проекта; Звучит глупо, я знаю, но в основном я работал над тем, что считал «самым сексуальным» — то есть использовал какой-то новый язык, структуру или концепцию, которые раньше не использовал. Это было моим падением много раз, потому что когда я изучаю что-то новое, неизбежно разочарование. Это разочарование всегда заставляло меня отказываться от проекта еще до того, как он был построен. Вот почему я теперь переключил свое внимание на создание минимального количества функций как можно быстрее, чтобы мой минимально жизнеспособный продукт работал, используя методы, которые в основном мне знакомы, чтобы я мог сделать это быстро. Таким образом, я надеюсь, что смогу сохранить импульс волнения.

План, план, план

Для меня ключ к созданию успешного проекта (имеется в виду тот, который будет завершен) заключается в том, чтобы сначала спланировать все на бумаге. Это планирование никогда не бывает невероятно подробным, но оно дает мне достаточную дорожную карту, чтобы помочь определить, в чем будут заключаться мои самые большие проблемы. Некоторое предварительное планирование также помогает мне укрепить такие вещи, как проектирование программы и базы данных, и позволяет мне продумать несколько вариантов. Пройти через эту итерацию различных дизайнов на бумаге намного проще и быстрее, чем создать версию в коде, а затем понять, что ее нужно выбросить, потому что она не работает должным образом.

Обрезать жир

Как только я разрабатываю грубый дизайн программы, я пытаюсь определить все функции, которые имеют решающее значение для ее функционирования как можно быстрее. Например, при создании приложения со списком дел я мог бы подумать о создании системы регистрации и входа пользователей, чтобы люди могли управлять своими собственными контрольными списками. Хотя это критично? Нет, я могу создать приложение таким образом, чтобы оно изначально работало только для одного пользователя, а потом беспокоиться о сценарии с несколькими пользователями. Я мог бы использовать какую-нибудь новую и популярную анимационную библиотеку для работы над анимацией элементов контрольного списка на экране — но важно ли это? Определенно нет — такие вещи вызывают много часов разочарования, а конечный продукт очень мало, поэтому я сначала пропускаю это. Хочу ли я создать базовую функциональность, позволяющую пользователю добавлять и удалять элементы в контрольном списке — ДА! Это определенно наивысший приоритет. Как только я выясню, какие функции имеют решающее значение для функционирования приложения, я в первую очередь работаю над ними.

Просто сделай это

Как и лозунг Nike, сейчас самое время. Я установил крайний срок для создания первой версии программы как можно быстрее. Чем скорее, тем лучше. Это очень важно для меня, потому что первоначальный энтузиазм по поводу проекта недолговечен, и я знаю, что должен создать работающее приложение, прежде чем это головокружение иссякнет. У меня гораздо больше шансов преодолеть препятствия на этом этапе, если я все еще делаю заметный прогресс, и мне нужно сделать рабочую версию программы, прежде чем я столкнусь с серьезным препятствием.

Стоит ли оно того?

Это вопрос, который я задаю себе, когда делаю свою минимально жизнеспособную версию своего приложения. На этом этапе приложение по-прежнему будет выглядеть очень уродливо, как правило, весь черный текст на белом фоне, но я должен иметь возможность перемещаться по действиям и понимать, как будет работать конечный продукт. Процесс выполнения действия кажется неуклюжим или слишком сложным? Я возвращаюсь и исправляю это — хорошо, что я не тратил часы на создание красивого дизайна. Я могу позволить себе потерять то, что я построил, потому что на данный момент я просто не вложил в это достаточно средств, чтобы заботиться об этом; Я могу думать об этом намного яснее, если смогу эмоционально отделить себя от работы, которую я в нее вложил. Если все работает хорошо и меня устраивает базовая функциональность приложения, значит, пора продолжать.

Цикл изменения приоритетов и сборки

На этом этапе я продолжаю добавлять самые важные функции. После добавления каждой функции я пытаюсь переоценить, работаю ли я над самой последней функцией. На этом пути я могу столкнуться с некоторыми камнями преткновения, например, осознать, что мне нужно изменить структуру моей базы данных как можно раньше, и поэтому эти элементы получают более высокий приоритет в списке функций, которые необходимо выполнить в первую очередь. Но, постоянно переоценивая и перераспределяя список функций, я гарантирую себе, что работаю над кодом, который приносит немедленную пользу, доставляет удовольствие от работы и приближает проект к завершению. Трудно впасть в уныние или отстраниться, если вы часто ставите перед собой задачу добиться успеха в проекте на столь раннем этапе.

Получать отзывы

Запустите проект до его завершения. Это может быть просто для пары друзей или это может быть публично. Получение отзывов от других на раннем этапе поможет направить вас в направлении наиболее важных функций, а также даст вам мгновенное удовлетворение и поощрение продолжать двигаться вперед. Не бойтесь показать миру свою незавершенную малышку.

Изменить приоритеты, повторять

С каждой версией, которую вы выпускаете, вы сможете решить: 1) стоит ли продолжать создавать это приложение и 2) какие следующие наиболее важные функции. Если вам нравится, как работает приложение, и вы получаете отзывы других людей о том, что им нравится приложение, то это хорошая мотивация для продолжения работы. Обратная связь также подскажет вам, что важнее всего добавить в программу дальше. В конце концов, вы закончите свой критический список функциональных возможностей и сможете работать над менее важными вещами, такими как дизайн, анимация и т. д. На этом этапе, если вы разочаровываетесь в попытках изучить что-то новое, это не так уж важно. дело — у вас уже есть работающая программа, которая используется. Если вы не можете анимировать добавление/удаление элементов списка дел, как вы изначально предполагали, это нормально — по крайней мере, вы все еще можете добавлять и удалять элементы! Возможно, вы сможете найти альтернативный способ сделать дизайн лучше. Дело в том, что к тому времени, когда у вас будет работающее приложение, эти типы препятствий уже не будут такими обескураживающими, и вы по-прежнему будете чувствовать себя выполненным благодаря хорошо выполненной работе.

Закончи это

В конце концов вам нужно решить, когда у вашего приложения будет достаточно функций, и вы сможете переключиться на маркетинг/использование приложения в реальном мире. Это не означает, что вы больше никогда не будете изменять программу, это просто означает, что использование в реальном мире и обратная связь помогут вам определить, какие изменения нужно внести в будущем, если таковые будут. Также может оказаться, что ваше приложение работает достаточно хорошо без необходимости дальнейших итераций, и вы можете принять решение приступить к следующей идее проекта, которая крутилась у вас в голове.