С чего лучше начать проект или как сделать так, что бы не было потом мучительно больно
- среда, 10 апреля 2019 г. в 00:21:37
Доброго всем времени суток. Настала очередь поговорить о проектировании проектов. По собственному опыту знаю, что иногда сложнее создать проект с нуля, чем привести в порядок то, что уже есть. Во многом это связано с тем, какое наследие Вы или Вам, оставляют после себя. В этой статье постараюсь рассказать на что стоит обратить особое внимание и предложить краткий план следования.
Все градации условны и чаще всего встречаются перетекающие типы. Хочу заметить, что все типы могут мутировать друг в друга, единственный нюанс — в стоимости модернизации. Например, проект изначально был “одноразовая поделка”, а потом эволюционировал в “замкнутая система”. Обычно, подобное приводит к полному или почти полному переписыванию системы или ее рефакторингу. Как вы понимаете, это экономически нецелесообразно. По этой же причине желательно понять какой именно проект вам необходимо создать с нуля, и попытаться определить его дальнейшую судьбу.
Для определения типа проекта, ниже я привел вопросы, получив ответ на которые вам станет понятно, чего от Вас хотят:
Как вы видите, перечень не такой уж и большой. Правда, по какой-то неведомой причине, мало кто задаётся подобными вопросами до того, как начать что-либо делать. Вы спросите зачем мне понимать тип проекта?! Всегда надо делать так, чтобы проект жил вечность?! По большому счёту, вы правы, но есть нюансы, как в скабрезном анекдоте. Эти нюансы — ресурсы и сроки. Не стоит забывать, что мы трудимся на благо бизнеса и выполняем поставленные задачи. Когда вам известен тип проекта, вы можете без зазрения совести чем-то пожертвовать для достижения поставленных задач.
В выборе лучше придерживаться правила: технология не должна быть суперновой, но и устаревшей тоже. Если технология или фреймворк новые, это может обернуться такими проблемами как:
Данный перечень проблем актуален не только относительно технологий, но и к сторонним зависимостям. Всё вышеперечисленное может похоронить проект на корню.
Перед тем как выбрать что-то конкретное, подумайте несколько раз. Составьте пресловутую таблицу преимуществ с коэффициентами важности для проекта.
Данный пример составлен для вымышленного проекта:
Название функционала проекта. |
Коэффициент важности для проекта |
---|---|
Работа с формами |
3 |
Роутинг |
1 |
Простота написания анимации |
0,3 |
Как видно из таблицы, важными критериями отбора являются “работа с формами” и “роутинг”. Простота создания анимации для данного проекта не существенна. Далее модернизируем таблицу путем добавления новых столбцов-технологий. В нашем случае их будет два.
Название функционала проекта. |
Коэффициент важности для проекта |
Технология 1 |
Технология 2 |
---|---|---|---|
Работа с формами |
3 |
+ |
± |
Роутинг |
1 |
+ |
± |
Простота написания анимации |
0,3 |
+ |
- |
Исходя из данных таблицы, мы понимаем, что у “Технология 2” работа с формами и роутинг хромают, а создание анимации подобно вызову Сатаны. В итоге, удельный вес данной технологии составляет 2. Вы спросите почему 2? Всё просто! Если вы ставите ±, то в данной технологии конкретный функционал реализуем, но с какими-то “костылями”, либо же более трудозатратный. В нашем сравнении выгоднее будет “Технология 1 “, с итогом 4,3. Думаю пояснения по образованию сумм излишни. Данная таблица работает не только с технологиями, но и со всем, что требует сравнения и выбора из списка. Главное — не забывать, что чем больше критериев напишите, тем проще вам будет сделать выбор.
В настоящее время есть возможность выбрать из многообразия различных сервисов, предоставляющих инструменты для проектирования архитектуры. Правда у любого из них есть недостатки, для кого-то критичные, а для кого-то нет. Так как я “oldfag”, то предпочитаю листочек и ручку или доску и маркер.
Для того чтобы понять за что хвататься в первую очередь, вам необходимо обрисовать основные части системы, а затем выбрать способ построения архитектуры. Как правило, на практике используют всего три:
Нисходящий — разработчики отталкиваются от больших узлов системы и идут к более мелким. Смысл архитектуры в том, что первоочередные компоненты — это крупные узлы, содержащие в себе более мелкие.
Восходящий — разработчики отталкиваются от мелких частей и идут к более крупным. Смысл архитектуры в том, что сначала создается много мелких компонентов, а уже из них собираются более крупные.
Монолит — архитектура неделимая на части, зачастую именуемая “legacy”. По факту это жесткая структура, изменение которой, требует решений без “костылей”. Это самый плохой вариант, но, как и всё в нашем мире, имеющий право на существование. Монолит применяют для реализации конкретного функционала и не планируют в дальнейшем его поддерживать. По сравнению с остальными, скорость такого подхода в разы быстрее. Ну просто потому, что можно на многое закрыть глаза.
Выбор вида архитектуры зависит от целей на проекте и скорости разработки. Обычно, первый способ используют, когда сроки не поджимают, а количество крупных модулей малочисленно. Его особенность заключается в том, что можно точно представить связь между конкретными модулями. Из минусов могу отметить долгое время разработки, связанное с последовательностью действий.
Второй способ предпочитают, когда требуется высокая скорость разработки и отсутствует понимание верхнеуровневой архитектуры. Особенностью является множество мелких компонентов, которые порой используются в разных крупных узлах. Стоит отметить, что почти всю разработку можно выполнять параллельно, без оглядки на остальные задачи. Минусами данного подхода будут компоненты, не отвечающие требованиям верхнеуровневой архитектуры и, соответственно, их придется переписывать или же создать возможность кастомизации.
Как показывает практика, все методики разработки сводятся к спиралевидному подходу, характеризующийся постепенным наращиванием функционала. Рассматривать его в рамках этой статьи не считаю целесообразным.
Так называемая “Дорожная карта” поможет вам выполнить работу эффективнее. По сути это график, с условными сроками сдачи того или иного функционала. Даты могут переноситься, но, как показывает практика, при грамотном выполнении вышеизложенных пунктов, поправка составит до 30%. На практике это обычно 10-15%. Планирование позволит вам отслеживать прогресс проекта, видеть провисания, вносить коррективы в виде ресурсов или сдвига сроков, и т.д.
Любой проект начинается с документации, и чем её больше, тем лучше! Так что не надо лениться — документируем ВСЁ. Да, это займет время, но впоследствии может спасти Вас от гнева руководства, если что-то пойдет не так, не по Вашей вине. Также не стоит забывать, что после Вас на проекте появятся люди, которым придётся разбираться в том, что вы создали. А без документов сделать это будет не просто.
В данной статье описано, как следует действовать и на что обратить внимание при старте проекта. Данные этапы универсальны для фронта, бэка, тестирования или всего вместе. Я нарочно избегал конкретики по технологиям, для того чтобы не вводить в заблуждение.
Когда перед вами встаёт выбор какой использовать стек технологий, архитектуру и необходимо определить временные рамки для реализации проекта, вам может помочь таблица, приведённая ниже:
Типа проекта / признаки |
Одноразовая поделка |
Стартап |
Информационные системы |
Замкнутые системы |
Saas решения |
Какие-то другие проекты |
---|---|---|---|---|---|---|
Кол-во людей до 5 |
X |
X |
X |
X |
||
Кол-во людей от 7 до 10 |
||||||
Кол-во людей от 10 до 30 |
X |
|||||
Кол-во больше 30 |
X |
X |
||||
Срок сдачи до 3х месяцев |
X |
X |
X |
X |
||
Срок сдачи от 6 до 12 месяцев |
||||||
Срок больше 12 месяцев |
X |
|||||
Документация |
||||||
Требования интегрирования с другими системами |
||||||
Конкретный заказчик известен |
||||||
Планируется дальнейшая поддержка |
||||||
Планирование |
||||||
Роли четко разграничены |
||||||
Разрешено использовать внешние зависимости |
||||||
Есть живые данные для тестирования и анализа |
||||||
Требования по безопасности |
||||||
Требуется тестирование |
||||||
Требуется написание документации по продукту или инструкция |
||||||
Требуются модульная реализация |
||||||
Несколько команд разработки |
||||||
Всего |
Как пользоваться таблицей, думаю все уже догадались, но на всякий случай — ровно также как и с предыдущей, только с небольшим дополнением в виде закрашенных ячеек. Имеется в виду, что значение не может быть использовано для данного проекта. Также прошу заметить что, таблица может быть неполной, добавьте строки, которые сочтёте необходимыми.