Документация, Технический дизайн 6-8 минут на прочтение

Функциональная архитектура цифровых продуктов, часть 1

Поделиться:

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

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

§ Определение функциональной архитектуры

Так что же такое Functional Architecture? Если коротко, то:

Функциональная архитектура — это детальное описание и структура функциональности создаваемой системы, спроектированные с учётом технологических, пользовательских и бизнес-требований, а также иерархии функций, их зависимости друг от друга и использования в компонентах такой системы.

Слишком размыто? Как и всегда, когда кто-то пытается засунуть объёмную методологию в одно короткое определение. Давайте разбираться.

Представьте, что каждое событие в системе, самостоятельное или произведённое в ответ на действие пользователя, является функцией. Функции могут быть общими, родительскими и дочерними. Они могут объединяться в глобальные функциональные разделы, зависеть друг друга и блокировать другие функции.

На самом деле, это не так сложно, как может показаться — и мы ещё пройдёмся по определениям. Однако давайте сперва попробуем разобраться в предпосылках. Почему вообще появилась FA и какие задачи она решает. А уже потом вернёмся к терминологии и процессу её создания.

§ Перенос рисков

Может быть, я сейчас кого-то оскорблю, но в привычном нам процессе создания цифровых продуктов кроется один серьёзный недостаток. Мы с вами не умеем распределять риски. А соответственно, мы не умеем ими управлять.

Мы привыкли, что разработка — это область проектного процесса с довольно высокой степенью неопределённости. Именно поэтому все агентства и production-компании работают по T&M, с оплатой по часам, а не по результату. Им просто невыгодно брать на себя финансовые риски клиента. Ведь на старте они не могут быть уверены в том, что информации достаточно, а документация по проекту верная и исчерпывающая. Зачастую разработчикам вообще прилетают только функциональные требования и дизайн-макеты (разумеется, этого мало).

И что происходит в итоге? Правильно, риски перекладываются на клиента. Сорян.

Но это если рассматривать проектный процесс с точки зрения задействованных в нём сторон. А давайте взглянем изнутри. Давайте разделим этот самый процесс на два ключевых направления: продуктовый дизайн (исследования, аналитика — проектирование, в общем) и разработку (кодинг, девопс и тестирование). Тогда получается, что проектировщики попросту перекладывают свои обязанности (а с ними и риски) на разработчиков. Да, всё просто.

Программисты вынуждены принимать решения и искать ответы на те вопросы, которые их вообще не должны касаться. Классика: «а что будет, если соцсеть не вернула e-mail пользователя?». Или: «а пользователю нужно сообщать о вот этой вот ошибке?».

Инженеры и строители начинают работать за архитекторов, если тем не хватает квалификации. Такое, блин, возможно только в IT.

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

§ Деградация кода

Редко, очень редко на проекте есть выделенный архитектор. Такой, который загрузит себе в голову весь проект, выделит общие части, разложит всё по полочкам.

Обычный разработчик же мыслит лишь в рамках той части проекта, над которой работает в текущий момент. Он не оценивает весь продукт целиком, не держит его в голове. Поверьте, ему и так хватает забот.

Скорее всего, программист в этот момент даже не помнит, что обрезка изображений, которую он сейчас пишет для аватара в профиле, используется ещё и при создании новости. А через два месяца, когда дойдёт до новостей, он может не вспомнить про то, что уже писал эту треклятую обрезку. И сделать две: одинаковых внешне, но разных в реализации. Или, что вероятнее, он просто скопипастит первую. Потому что выносить её за пределы профиля — это уже рефакторинг, а таску нужно закрыть сегодня.

А представьте, что над проектом работает два, пять разработчиков? Какова вероятность, что они синхронизируются в мелочах вроде пагинации, «бесконечного» скролла или валидации данных? Что каждый из них не напишет в своей части проекта собственный вариант каждого решения?

А ведь это так просто: выявить все общие функции ещё на этапе проектирования и явно указать на них программистам. Не надеяться на авось, и не отмазываться зоной ответственности. Никто, кроме проектировщика/дизайнера, не знает проект настолько хорошо, чтобы это сделать. Разумеется, если нет специального человека.

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

§ Функциональные требования и описание

Когда я рассказываю о функциональной архитектуре на своих лекциях, то в половине случаев слышу: «а, ну это понятно, у нас на проектах тоже есть функциональные требования». Нет. Функциональные требования и функциональная архитектура — разные вещи. Когда ваш аналитик собирает функциональные требования, он формирует задачи, в редких случаях — предварительное, неструктурированное описание системы. Отдавать сырые требования разработчикам, даже хорошим — так себе идея.

Это всё равно что написать «мост должен выдержать десять грузовиков, гружённых щебнем» и отдать это в виде задания строителям. Вряд ли последние смогут сваять что-то путёвое по такой «инструкции».

И даже если углубиться в это конкретное требование, расписать его максимально подробно (посчитав и вес одного авто, и удельную нагрузку, и даже среднюю скорость проезда), то всё равно получится фигня. И не важно, десять таких «требований» будет или пять сотен. Строителям, как и разработчикам, нужны куда более полные и комплексные инструкции. Структурированные с учётом множества факторов.

Функциональная архитектура предполагает предоставление инженерам и программистам целостного и глубокого описания разрабатываемой системы. Понятных и однозначно трактуемых инструкций. FA стабилизирует и ускоряет процесс разработки.

И в следующих статьях мы поговорим об этом.

§ Немного лирики

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

И да, это только первый пост цикла о функциональном проектировании. Чтобы не пропустить остальные (и не только), можете разрешить push-уведомления или подписаться на мой уютный камерный tg-канал.

5/5 (9 голосов)
, Ваша оценка:

Поделиться:

Павел Шерер
Павел Шерер

Продюсер, аналитик, продуктовый дизайнер IT-решений

Комментарии (2)

Валентина Тиняева
Спасибо, забавная статья :) Сначала я подумала "ну вот, ещё одна статья про общие вводные по FA, и зачем это все переписал автор, все это уже есть в других источников, которых полно". Но когда пошло сравнение с Заказчиком "переложить риски на клиента", стало интереснее. А сравнение IT-архитектора с архитектором-это как инженером в промышленности, вот тут-то и зацепило. Буду ждать раскрытия темы, подача мысли интересна как раз благодаря таким приземленным сравнениям. Я обычно клиенту объясняю на примере ремонта квартиры. "Это как поклеить на стену самые дешёвые обои и ждать, что комната будет выглядеть как после евроремонта".
Василий Туркин
Хорошее начало, жду продолжения :)

Добавить комментарий

Чтобы оставить комментарий, войдите:
Нет соединения с сервером.Сервер получил неверные данные, попробуйте еще раз.

Похожие посты

Top