О требованиях к продукту: собирайте их, группируйте, работайте с экспертами в предметной области проекта, изучайте ее самостоятельно. Вы должны быть максимально ознакомлены со спецификой той области, для которой пишете продукт. Составляйте списки вопросов, терроризируйте заказчиков или менеджеров – их должно тошнить от вашей въедливости. Люди не всегда хорошо структурируют свои знания: забывают о важном, придают вес незначительному и т. д. Ваша задача на первом этапе – выделить главные и проблемные направления будущего продукта, область его применения и основные функции.
Не пугайтесь, когда вы будете сталкиваться с требованиями, конфликтующими между собой или не поддающимися описанию кодом. Вы в любом случае столкнулись бы с ними, но позже, когда время для анализа было бы уже упущено. Сбор требований должен формировать для вас картину будущего продукта, указывать на его сильные и слабые стороны, потенциальные проблемы и конкурентные преимущества. Будьте заранее готовы к тому, что, когда работа над проектом будет уже в самом разгаре, часть требований окажется неактуальной. Это распространенный сценарий, он не должен деморализовать вас. Любой продукт – живой, он будет развиваться и видоизменяться. Ваша задача – определить его возможности и рамки, в которых он будет существовать.
Ваши заказчики или эксперты в предметной области наверняка проанализировали рынок на предмет аналогичных продуктов. Но вам тоже будет нужно провести свое исследование, чтобы представлять, как работают существующие аналоги, насколько они удобны и каким требованиям соответствуют. В большинстве случаев вам будет доступна только пользовательская часть системы, поэтому постарайтесь извлечь из нее максимум сведений, обращая особое внимание на те моменты в ее работе, которые пересекаются с требованиями для вашей системы.
Отдельным важным шагом будет выбор технологического стека для вашего проекта: языка программирования, инструментов, компонентов и библиотек. Для многих разработчиков ощущения на этом этапе будут похожи на восторг ребенка в магазине игрушек. Получите от этого процесса максимум удовольствия, но не позволяйте эйфории взять верх – набирая технологии в свой мешок с подарками, нужно исходить только из целесообразности их использования. Здесь как никогда важно дать приоритет проекту и его требованиям. Он будет зависеть от вас, от того, что вы выберете, – не подведите его, находите решения, которые помогут проекту стать успешным.
Ограничьте время анализа по конкретным вопросам, иначе вы рискуете столкнуться с аналитическим шоком и неспособностью принять решение. Если чувствуете, что анализ какого-либо вопроса занимает больше времени, чем должен, перейдите к следующему пункту. Если все равно сомневаетесь при каждом принятии решения, постарайтесь понять, говорит ли это ваша тревожность или есть объективные сомнения в правильности выбора. Тревожность необходимо просто принять: вы были бы отвратительным специалистом, если бы не чувствовали ответственности за свои действия. Объективные же сомнения можно отбросить, досконально проанализировав вопрос и выбрав максимально приемлемый вариант. Возможно, он не будет идеальным, но выбор уже сделан и вы больше не рефлексируете над ним.
Определите сроки работы с заказчиками или менеджерами, разбив весь объем на этапы (milestones), однако всегда помните о коварности установления строгих дат. Это крайне важно для новых проектов, где требования будут постоянно меняться и усложняться. Не пытайтесь никого впечатлить скоростью, на кону ваше время и хорошее самочувствие. Выделяйте для анализа и работы столько времени, сколько вам требуется. Я не привожу здесь подробного описания методологий разработки и способов планирования работы над проектом (их слишком много, а ваше время для меня ценно). Универсальный совет: уважайте свое время и не позволяйте дедлайнам сказываться на качестве работы.
Если вы чувствуете, что начали прокрастинировать, это абсолютно нормально и ожидаемо. Совет здесь будет только один: начинайте работать. Через силу, через усталость и нежелание, но начинайте работать по чуть-чуть, выполняя какие-то легкие, но необходимые задачи для нового проекта. Это может быть подготовка инфраструктуры приложения, организация загрузчиков или билд-системы. Черт, да вы можете потратить время на проработку формата вывода в лог, главное – начать делать хоть что-то, и вы обязательно втянетесь в работу в процессе.
Постарайтесь получить максимум удовольствия от нового проекта, пусть это будет захватывающе и интересно, пусть это станет испытанием. Новый проект даст вам новый опыт и знания, вы сможете создать что-то прекрасное из ничего – дайте себе шанс насладиться этим.
Тезисы
■ Не паникуйте, получайте удовольствие от процесса.
■ Досконально изучите предметную область.
■ Узнайте максимум об аналогах и конкурентах.
■ Не позволяйте эйфории от выбора технологий затмить требования проекта.
■ Не позволяйте себе впадать в аналитический шок.
■ Устанавливайте свои сроки и учитывайте приоритеты.
Задание
Если у вас есть время, представьте себе проект, который хотели бы реализовать. Определите его предметную область, его функции, сильные и слабые стороны. Составьте список формальных и неформальных требований к проекту. Определите технологический стек, который стали бы использовать, учитывая требования. Проведите анализ потенциальных проблем, с которыми можете столкнуться. Разбейте проект на этапы, определив ориентировочные сроки их завершения.
История из жизни
«Экзамен для меня всегда праздник, профессор». И это действительно так. Новый проект для меня всегда праздник. Мне немного страшно, но ощущение предвкушения, чувство нового начала куда сильнее. Я знаю, что первое время будет очень сложно. Время принятия самых важных решений, время формирования архитектуры, которая должна пройти проверку годами. Для меня начать новый проект – это все равно что, как в детстве, стоять перед нераспакованным новогодним подарком, испытывая огромную радость и предвкушая что-то очень интересное…
И напоследок…