Введение

По традиции, для самых жаждущих и нетерпеливых, эта статья будет о:

  • С чего начинается построение любой архитектуры?

  • За счет чего реализуются потенциальные бизнес возможности?

  • Кто нужен для реализации намеченных возможностей?

  • Как создать цифровые продукты, которые будут удовлетворять требованиям заказчиков, вписываться в намеченные сроки и бюджеты?

  • Из чего должна складываться структура продукта и как он должен реализовывать функциональные требования?

Если нет интереса к предисловию, то переходите к первому "почему". Для тех, кто хочет сложить причинно-следственные связи - добро пожаловать. Прорабатывая цикл лекций для студентов ВШЭ по предмету анализа требований, я решил, что логично закончить курс обзором практик и подходов к построению архитектуры. Архитектуры конкретного решения, архитектуры создаваемого продукта, архитектуры ландшафта компании? Да о чем же я хочу рассказать? Четкого понимания о какой именно архитектуре рассказывать у меня не было. Имея определенный опыт работы над архитектурой решения, архитектурой продукта и внутри блока корпоративной архитектуры, у меня сложилось субъективное понимание того, как взаимосвязаны эти виды архитектур. Определить и понимать их границы полезно не только для самих архитекторов, но и для всех вовлеченных в процесс производства цифровых продуктов. Польза определяется эффективностью и точностью вопросов, задаваемых в том или ином окружении для выявления/уточнения/выбора/принятия производственных решений. Как итог  - появился обзор/эссе, который систематизирует информацию по архитектурным концептам разного уровня процесса создания цифрового бизнес продукта. В качестве стержня обзора я выбрал и немного адаптировал аналитическую практику - 5 почему (ссылка). Эта техника ориентирована на то, чтобы от актуальных условий дойти до причин определенного события. Это индуктивная техника (ссылка), которая скрывает широту происходящего и приводит нас к "субъективному общему". Для систематизации эта техника хорошо подходит, но в ней нет рефлексии (ссылка). Вся возможная рефлексия будет адвокатировать уже принятым решениям. Поэтому перевернем ее и сделаем дедуктивной (ссылка). Это важно для осознания картины в целом. Постепенно, отвечая на каждое следующее почему мы будем фокусироваться на том, что наиболее важно для построения эффективной, востребованной архитектуры, что бы не вкладывалось в это понятие.

Почему архитектура нужна?

С чего начинается построение любой архитектуры?

Не усложняем. Начинаем с основ. Давайте дадим определение архитектуры. Такое определение, которое будет интуитивно понятным, ясным и однозначным:

Архитектура - элементы и связи между ними, которые в совокупности представляют собой описание создаваемого объекта (Автор статьи)

Ну что же. По-моему у нас получилось. Описание ясное, понятное, не очень сложное, но достаточно абстрактное. В нем нет критериев и оценок. Оно помогает погрузиться в контекст. Не более. Отлично. Сформулировано. Теперь вопрос. Как нам это поможет? И тут мы начинаем задаваться онтологическими вопросами (ссылка):

  • Для чего мы создаем наш объект?

  • Какую функцию должен выполнять наш объект?

  • Что нужно для функционирования нашего объекта?

  • Кто будет пользоваться результатами работы нашего объекта?

Все эти вопросы рано или поздно может задать себе каждый специалист. Эти вопросы позволяют оценить себя и результаты своей работы, для того, чтобы сфокусироваться на самом важном. А что такое "важно" мы понимаем через конкретный опыт. Через метод проб и ошибок, через эксперименты и коммуникацию.  Для построения архитектуры важно ответить на все возникшие вопросы. Уровень детальности и подробности ответов может быть разный. Детальность определяет пониманием текущего контекста. Чем больше опыт, чем более точные ожидания, тем более ясная архитектура получается. Вопросов может быть много, но все они будут либо о разных аспектах архитектуры, то есть элементах и связях, либо о глубине описания и формализации тех же самых элементов и связей. Немного абстрактно. Я надеюсь, что при этом понятно. Теперь попробуем конкретизировать абстрактность. Все эти концепты, в приложении к создаваемым информационным системам формализовались в виде конкретной  методологии, которая направлена на описание архитектуры любого предприятия. Это модель Захмана (ссылка).  Модель Захмана - фундамент для построения любой информационной системы или набора систем, основываясь на конкретном контексте (Рисунок 1). 

Рисунок 1
Рисунок 1

Модель оформлена в виде матрицы, где по горизонтали вопросы, которые поясняют и конкретизируют разбираемый аспект предприятия, то есть формируют элементы ее архитектуры: Почему, Как, Что, Кто, Где и Когда. По вертикали - рассматриваемые аспекты - контекст, концептуальное представление, логическое представление, физическое представление, детализированное представление. Матрица Захмана похожа на пирог, в котором есть 5 аспектов/слоев. Каждый слой должен быть самодостаточным. В противном случае он будет неполным и при переходе к следующим уровням мы будем постоянно сталкиваться с темными "дырами". "Дыры" - следствие умолчания ответов на вопросы, которые были заданы на предыдущих уровнях рассмотрения. Самый важный, первый уровень - концептуальный. Это уровень миссии компании, уровень ее целеполагания. Он самый абстрактный и эфемерный. Он не несет никакой конкретики, не помогает принимать конкретные тактические решения, но он направляет развитие организации и задает ориентиры и тренды. Проигнорировав его можно сделать хороший продукт, но нельзя ожидать его признания и востребованности у клиентской аудитории. Модель Захмана не поможет

  • Делать продукты хорошо;

  • Формализовать нужные для производства роли;

  • Сделать качественный продукт;

  • Принимать верные стратегические и тактические решения;

Модель Захмана поможет:

  • задать рамки и границы архитектуры конкретной компании;

  • определить артефакты, документы, которые помогут провести рефлексию опыта организации.

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

  • Каковы наши потребности?

Почему нужно обосновывать возможности?

За счет чего реализуются потенциальные бизнес возможности?

Мы прошли первый этап. Следом ответим на вопросы целеполагания, которые помогут делать то, что нужно:

  • Что мы за организация? 

  • Как мы реализуем поставку нашего продукта до целевого пользователя?

  • Что мы делаем для нашего пользователя?

  • Кто в организации нужен для создания того самого продукта?

  • Где мы располагаемся, что бы поставка продукта удовлетворяла нашего пользователя?

  • В какой момент времени мы поставляем ему продукт?

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

Мы не оправдали ваши ожидания, – это не наши проблемы. Это ваши проблемы (Андрей Сергеевич Аршавин)

Целеполагание и оправданные ожидания направляют процесс достижения результатов. Если процесса нет, то достижение результатов - удача/случай/везение. Мы пришли к процессам, проектам, активностям, которые должны приводить к принятию конкретных решений и разработке/внедрению конкретных информационных продуктов. Это уровень практических методологий и методик. На этом уровне есть ряд методологий и методик, каждая из которых заточена под определенную специфику. Это UP (ссылка), MSF (ссылка), ГОСТ 34 (ссылка), TOGAF (ссылка). Архитектурное дерево может развиваться по любому из приведенных стволов. Наиболее полный и комплексный - TOGAF. Мы и пойдем по нему далее (Рисунок 2).

Рисунок 2
Рисунок 2

В основе TOGAF находится концепция принятия решений. ADM - Architecture Development Method. ADM состоит из активностей/этапов. Это чеклист архитектора, помогающий не запутаться во всех рассматриваемых аспектах. Основа правильного решения - актуальное понимание требований и учет факторов, важных для нашей организации. С актуальностью требований - ясно. Изменения происходят каждый день, и создаваемые нами системы должны уметь их адаптировать, а вот про важность не все так очевидно. Поэтому об этом стоит немного поговорить. Важным, по TOGAF, являются:

  • Концепция архитектуры;

    • К Захману - Ограничения и цели, которые помогают нам более детально разбираться с тем, как, что и в каком порядке мы будем делать;

  • Бизнес архитектура;

    • Структурированное описание того, как должен/может измениться обще организационный контекст в результате наших действий, как изменится взаимодействие с другими системами с помощью сквозных бизнес процессов и что, на кого в этих бизнес процессах влияет или может повлиять. А раз влияет или может повлиять, то как это сказывается на текущей и потенциальной ценности, которую реализуют те самые бизнес-процессы, выделенные в бизнес-архитектуре;

  • Архитектура информационных систем;

    • Из каких структурных элементов состоит наша система. Компоненты и единицы, связанные в систему, реализующую определенную ценность;

  • Технологическая архитектура;

    • Какими типами информационных систем мы пользуемся для того, чтобы создавать наши цифровые продукты. Код, классы, облачные кластеры, БД, внешние сервисы, оркестраторы инфраструктуры, системы мониторинга, системы хранения кода и т.д.

  • Возможности и решения;

    • Назначение информационных бизнес систем - решать конкретную бизнес проблему. Бизнес проблема решается за счет пользовательского процесса, в котором конкретные пользователи выполняют конкретные бизнес-операции. Бизнес-проблема решается так, как договоримся и согласуем на уровне бизнес архитектуры, но, как правило, выбранное нами решение не единственное. Контекст любой организации имеет множество возможных вариантов пользовательских действий. Их все желательно знать и понимать, чтобы иметь возможность использовать в меняющихся условиях то, которое будет наиболее выгодным для конкретной цели;

  • Планирование перехода;

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

  • Управление реализацией;

    • Это про управление процессом разработки и налаженные механизмы валидации продукта;

  • Управление архитектурными изменениями;

    • Это стартовая/замыкающая точка через которую необходимо пропускать изменения. Она оркеструет этот процесс.

Подход TOGAF, на сегодня - наиболее распространенный подход к реализации и поддержанию архитектуры или архитектур решений в компаниях. Он включает в себя наиболее важные вехи, которые необходимо учитывать при работе над информационными продуктами. Он не требует сильной адаптации. Этап может быть сколь угодно мал, но он обязан быть. Иначе бардак, хаос, размытие ответственности. Если в компании заговорили про архитектуру (что бы не имели в виду), то стоит присмотреться к этому подходу. TOGAF концентрирует внимание на активностях и ресурсах, но ничего не говорит о том, какие ресурсы должны быть. Он отвечает на вопросы:

  • Как выстроить процесс разработки и поддержки архитектуры?

  • Какие этапы должны быть для построения архитектуры?

  • Что является ядром архитектурной деятельности и как этапы связаны между собой?

Почему нам нужны именно такие ресурсы?

Кто нужен для реализации намеченных возможностей?

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

Кадры решают всё (Иосиф Виссарионович Джугашвили)

Мы подошли к ролям. Де-факто, единственная методология, которая раскладывает деятельность по ролям с привязкой к уровням управления организацией - SAFe. Не стоит обманываться названием. Scaled Agile Framework не такой уж и Agile. Kanban многие эксперты подходов к управлению организацией считают не Agile, а крайне waterfall подходом. И что у нас остается - Scrum на уровне производства продуктов. Этот Scrum с легкостью заменяется на любой подход к разработке. Но вот роли, и в особенности архитектурные, разложенные по слоям, в этом SAFe уникален (Рисунок 3).

Рисунок 3
Рисунок 3

Уровни:

  • Уровень владельцев бизнеса и корпоративных архитекторов:

    • Cтратегия и планы развития. На этом уровне и нужен Захман и его основополагающая матрица для фокусировки проектной и продуктовой направленности компании в целом;

    • Для управления используется Kanban;

    • Без каких ролей не поедет -> Владельцев бизнес направлений, способных договариваться между собой и корпоративных архитекторов, которые могут предоставлять компетентную информацию о том, как можно/нужно организовывать процессы и что необходимо для того, чтобы они становились все более и более эффективными;

  • Уровень управления бизнес решениями и архитекторов решений:

    • Тут должен быть выстроен процесс, чтобы поддерживать архитектуру. И снова здраствуйте, милый TOGAF;

    • Для управления используется Kanban;

    • Без каких ролей не поедет:

      • Архитектор решений (набор продуктов объединенных между собой бизнес смыслом);

      • Менеджер решений

        • Роль которая организует контекст, в котором архитектор наводит порядок;

        • Запуск новых продуктов, изменение существующих, найм и увольнение персонала;

        • Среднесрочная стратегия;

      • STE

        • Cкрам мастер для менеджеров и архитекторов - Solution Train Engineer (ссылка);

        • SDM (ссылка) уровня набора продуктов;

  • Уровень команд

    • Тут изготавливают продукты. Сначала думают, а потом делают.

    • Думают - Менеджеры продуктов, Системные архитекторы (архитекторы по конкретным системам) и RTE - scrum мастера для менеджеров решений и архитекторов - Release Train Engineer  (ссылка);

    • Делают - Команды разработки;

    • Для управления архитекторами и менеджерами решений используется Kanban, для управления командами разработки используется SCRUM, для поддержки выведенных продуктов тоже Kanban;

Все ясно и понятно. Об описании каждой роли можно написать отдельную статью. Слой формирует границу, роль наводит порядок по профильной деятельности в рамках слоя. SAFe помогает нам найти ответы на вопросы:

  • Как должна быть организована деятельность по поставке продуктов?

  • Какая ответственность закреплена за каждым иерархическим слоем в компании?

  • Какие роли, и - за что они отвечают?

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

Почему мы делаем именно такие продукты?

Как создать продукты, которые будут удовлетворять требованиям, вписываться в намеченные сроки и бюджеты?

Казалось бы, мы продвинулись дальше и должно стать попроще, но нет, и не надейтесь. Каждый следующий уровень дополняет предыдущий, более абстрактный, но требует для своей реализации конкретные ресурсы и действия.

Даже путь в тысячу ли начинается с первого шага (Лао Цзы)

Мы подошли к разговору о том, что такое архитектура конкретной системы и из чего она состоит. Все те же элементы и связи между ними - только на более конкретном уровне. Мы подошли к модели "4 + 1". Альтернативно можно, рассмотреть модель уточнения абстракций c4, о которой я тут подробно рассказывать не буду, но с которой точно стоит познакомиться С4 (ссылка) (Рисунок 4)

Рисунок 4
Рисунок 4

4+1 - взгляд на создаваемую систему с точки зрения основных действующих лиц процесса разработки и контекста эксплуатации создаваемой системы. В основе этой архитектурной модели лежит представление прецедентов (Use Case). Это описание основных лиц и систем, задействованных в формировании результатов, которые достигаются при использовании системы. Это +1. Дальше 4 представления:

  • Логическое представление. Основными заинтересованными лицами в нем являются аналитики и тестировщики. Это представление описывает общую логику процессов. Как результат мы получаем сформированный словарь терминов и законченное функциональное описание того, какие процессы исполняются в системе. Для этого используется диаграмма классов (ссылка);

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

  • Представление реализации, основные заинтересованные лица в котором – программисты и разработчики. Представление реализации помогает управлять процессом производства. Основная диаграмма, используемая для этого представления, – диаграмма реализации.

  • Представление развертывания. В нем наиболее всего заинтересованы технологические лидеры создаваемой системы. Представление развертывания реализуется посредством диаграммы компонентов. Представление развертывания определяет топологию системы, принципы ее развертывания, инсталляции и коммуникации элементов между собой;

Все представленные диаграммы создаются с помощью UML и/или BPMN инструментария. Как собирать данные, отображать и синтезировать в архитектурное описание - предмет другого разговора. Описание есть. Очередной архитектурный уровень закрыт. Он нужен нам для того, чтобы ответить на вопросы:

  • Какие роли должны быть в процессе/проекте создания и внедрения системы?

  • Какие у ролей ответственности и обязанности?

  • Какие артефакты необходимы для старта процесса кодирования?

Ну что же, у нас есть описание. Они задают функционал и ограничения процесса разработки. Отлично. Теперь можем идти далее и думать о том, что нужно делать для реализации продукта.

Почему информационный продукт должен быть именно таким?

Из чего должна складываться структура продукта и как он должен реализовывать функциональные требования?

На этом уровне мы проектируем дизайн системы. Архитектура задает дизайн. Архитектура базируется на аспектах. Аспекты должны сочетаться и воплощаться в создаваемой системе и программных модулях (части создаваемой системы) (Рисунок 5). Тут обойдемся без цитат. Все будет достаточно конкретно.

Рисунок 5
Рисунок 5
  • Модульность

Этот аспект предписывает независимость и самодостаточность каждого компонента, создаваемого в системе. Система должна базироваться на определенных "столбах". Каждый такой столб сам по себе должен быть независим от остальных и при этом привносить в архитектуру функциональность. Если такие столбы, то есть модули, будут независимы друг от друга, то это обеспечит надежность, сопровождаемость и развиваемость создаваемой системы. Модульность – базисное понятие. Она помогает в организации и распараллеливании работ, способствует взаимозаменяемости устаревших компонентов.

  • Открытость

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

  • Адаптивность

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

  • Моделируемость

Синоним в данном контексте – воспроизводимость. Создаваемый компонент системы должен быть ясным и понятным, принципы его работы должны быть прозрачны для пользователя. Он не должен допускать неоднозначности в трактовании своего внутреннего устройства и поведения.

  • Дружественность.

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

Несоблюдение любого из рассмотренных принципов постепенно может приводить к тому, что систему станет сложно поддерживать и развивать. В совокупности эти принципы воплощаются в архитектурных шаблонах разработки, каждый из которых решает определенную задачу в заданном контексте функционирования системы. Шаблоны решают задачи выбора наиболее подходящего набора элементов. Они задают образ создаваемой системы, то есть описывают то, какой она должна быть. Можно провести аналогию и сказать о том, что архитектурный шаблон проектирования задает части системы, каждая из которых может быть создана с помощью набора тактических шаблонов проектирования (шаблонов разработки). Основные шаблоны архитектурного проектирования:

  1. «Многоуровневая архитектура»

  2. «Модель», «Представление», «Контроллер»

  3. «Каналы и фильтры»

  4. «Управление событиями»

  5. «Микросервисная архитектура»

  6. «Сервисная архитектура»

На хабре есть очень хорошие статьи и разъяснение на тему того, чем шаблоны разработки отличаются от архитектурных шаблонов. Мне нравится эта (ссылка), но можно найти много дополнительного и интересного. Мы добрались до самого детального уровня рассмотрения архитектуры. При желании можно перейти на уровень шаблонов разработки, но это будет в других статьях. Суть - архитектурные шаблоны позволяют ответить на вопросы:

  • Из каких элементов должна состоять создаваемая система?

  • За что отвечает каждый элемент?

  • Как элементы взаимодействуют между собой?

Порассуждаем об приведенных уровнях, связях между ними и значимости каждого уровня? То есть, ориентируясь на данные тут определения, составим архитектуру архитектур. 

Вместо и в дополнение к итогам

Я привел 5 уровней, которые характеризуют архитектуру (чтобы не вкладывалось в это понятие) любой компании (Рисунок 6).

Рисунок 6
Рисунок 6

Я постарался продемонстрировать классификацию и структурирование архитектурной деятельности любой компании. В этом структурировании какие-то уровни  могут игнорироваться, какие-то уровни могут реализовываться альтернативным образом, но предложенная классификация решает главную задачу – дает представление о том, что такое архитектура и из каких частей она состоит. Перечитывая статью и выискивая в ней логические и грамматические ошибки, я стал задаваться вопросом: А что будет с этим концептом, если в нем не будет отдельного уровня, двух, трех, четырех. Что из этого более важно для того, чтобы сделать крутой, востребованный продукт, который будет приносить пользу. Давайте разбираться. Все уровни нужны. Игнорирование каких-то уровней крайне не желательно. Если вы собираетесь создавать и развивать инженерную организацию, которая целенаправленно будет двигаться к своим целям, то вам нужно думать о каждом архитектурном уровне. Но, на мой взгляд, в ситуации когда у нас ограниченные ресурсы и нам нужно делать продукты, которые будут эволюционировать вместе с организацией, умирать, возрождаться в поисках более оптимальной стратегии развития - все пять уровней часто являются избыточными. Мы будем строить правильную организацию, вводить архитектурные уровни и систематизировать работу в них вместо того, чтобы сосредотачиваться на создании нужного здесь и сейчас информационного продукта. Верхний уровень, уровень Захмана или онтологии, как Вам будет удобнее, это уровень профессиональных устоев и культуры. Он предлагает искать ответы на конкретные вопросы, при этом он абсолютно нетерпим к ситуации, когда для нас вопросы являются не актуальными/не важными/не понятными. Этот уровень может дополняться вместе с постепенным эволюционированием на других слоях представленного описания. То есть цель будет уточняться по ходу движения. Уровень выстраивания процессов важен для того, чтобы выстроить процесс поставки ценности, очевидно же. Процесс может быть разной степени полноты учета факторов и комплексности. От этой полноты будет зависеть полнота достижения задуманной бизнес ценности. Процесс может быть даже не процессом, а стихийным проектом с этапами, которые важны именно в данный момент времени и именно для того, чтобы создать конкретную систему (CMMI - 0 процессный уровень). С ролями и уровнем "прав и обязанностей" (SAFe) ситуация аналогичная. Цель выстраивания архитектуры - создание продукта с заданным уровнем качества. Пользователи системы должны быть удовлетворены. Хорошо, если они счастливы, но это over. Главное - они должны иметь возможность быстро, качественно, удобно выполнять нужные им действия. И вот тут уровень "продуктополагания" (4+1/с4) незаменим. Какие-то представления мы может проигнорировать или выполнить для "галочки", но это будет иметь последствия. С уровнем архитектурных шаблонов ситуация похожа. Уровень, на котором мы закладываем качество создаваемых продуктов. То есть верхние уровни более важны тактически (для выполнение работы здесь и сейчас), более приоритетны для формирования конкретных информационных продуктов, а нижние уровни важны стратегически (цель, к которой мы идем). Но стратегия это очень эфемерный артефакт.

Мёд – это очень уж странный предмет… Всякая вещь – или есть, или нет, – А мёд (я никак не пойму, в чём секрет!)…

Стратегия формируется долго, результаты ее не всегда видны и понятны. Если мы допустим ошибки на более верхних, тактических уровнях они сразу станут видны и понятны, условно - дешевоисправимы. А если на более нижних, стратегических уровнях, то выявить их будет более сложно, исправить более дорого. Без ложки дегтя не всегда обходятся бочки с медом. А что по этому поводу считаете Вы?

Благодарности

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

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


  1. Myclass
    14.04.2023 21:23
    +2

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

    Вроде всё правильно, но в последнее время всё больше и больше убеждаюсь, что чем громче кто-то меня пугает хаосом и предлагает против какие-то решения или методологии как например SAFe или SCRUM, то понимаю, что хаоса будет в два раза больше. А затрат раз в пять больше. Но - это моё личное мнение.

    Сравниваю программистов одиночек, которые создают успешные и красивые Apps (чаще games or frameworks) с корпоротивными программами и понимаю, что разница как между небом и землёй. В пользу одиночек. А почему? Потому что у них есть возможность, но самое главное желание - вначале продумать, потом только начинать. В корпоративах всегда начинают, в надежде когда-нибудь найти время для обдумывания, но так никогда его и не найдя. И хаос, который они должны были вроде обуздать (потому что ведь у них правильная методология) - переполнил все борта.

    Об отсутствии какой-либо ответственности я вообще молчу. Сложные проекты расчитаны на мин.3-5 лет (например миграция soft- или it-инфраструктуры в Cloud). Среднее время между переходами манагеров среднего звена 2-3 года. И какую понесёт отвественность архитектор-манагер, если через какое-то время огрехи в архитектуре начнуть всё больше и больше о себе знать, когда этого манагера уже нет поблизости?

    Диаграмму деятельности со спокойной совестью можно поменять на BPMN

    Я сам обожаю BPMN, но убеждаюсь, что в большинстве своём - если что и пишется с помощью BPMN, то только в архив. Почти никто с этими диаграммами не работает, а делают их или просто из спортивного интереса, тк. кто-то для себя это открывает в первый раз или для лицензирования ISO 9000 или ISO 9001. И каждый раз, как только приходят аудиторы, то достаются из ящиков диаграммы, которые с реальностью ну вообще ничего не имеют общего уже много лет. Но выглядят они убедительно.

    А всё почему? Да потому что один из тезисов агильного манифеста гласит - работающая система стоит выше чем документация о системе.

    Те. с Вашими словами я соглащаюсь, но в реальности вижу совсем не то. Надо реальность наверное поменять :)


    1. in86 Автор
      14.04.2023 21:23

      Потому что у них есть возможность, но самое главное желание - вначале продумать, потом только начинать


      Спасибо за мнение и опыт. У Вас в общем-то нет вопроса, но мне кажется логичным немного ответить Вам не вступая в полемику, а продемонстрировать другую сторону медали.

      Мне кажется не совсем уместным сравнивать программистов одиночек и компаний. Там где есть возможность делать в одиночку не образуется компаний. Там есть конкретный труд. Когда этот "труд" перерастает во что-то большее/великое/хорошее нужна система, чтобы целенаправленно развивать этот самый "труд". Вот тут и встает дилемма о том, как организовать целенаправленное развитие. Одиночка всегда более эффективен, чем среднестатистическая единица в группе, потому что группа 40% своих затрат тратит на синхронизацию.

      Но для того, чтобы было над чем думать у каждого должен быть опыт. Тут есть 2 цикла, которые заточены под работу над опытом

      Цикл PDCA (ссылка) - когда мы говорим про работу над информацией
      Цикл Колба (ссылка)- когда мы говорим про работу над развитием навыка

      Эти циклы противопоставляются друг другу, но это в корне не верно. Один дополняет другой.
      Вы говорите о том, что программист более эффективен за счет того, что у него есть возможность подумать. С этим я согласен. Но я делаю шаг в сторону и думаю о том, что надо программисту, чтобы он смог "эффективно" подумать. Ему нужен опыт, который научил его быть эффективным. Это как раз Цикл Колба.

      С организациями все точно так же. Есть куча работы, которую нужно делать. Нужно потому, что нет возможности делать только крутые продукты. Нужно реагировать на требования государства, нужно реагировать на изменения законодательства, нужно людям зарплату считать и т.д.
      Как эту всю махину организовать? Вот есть такое субъективное мнение, что так можно. На практике подтверждено, что есть компании и которых так получается эффективно. Да, их немного, но они есть. Мне кажется этого достаточно, чтобы последовать их примеру и по пути постоянных и небольших изменений из чего-то хорошего сделать что-то более хорошее )


      1. Myclass
        14.04.2023 21:23

        Не могу ни плюсовать ни минусовать, использую свой один-часовой комментарий как оценку Вашим словам - соглашусь с Вами полностью!


        1. in86 Автор
          14.04.2023 21:23

          Круто, что наше обсуждение было полезно нам обоим )


  1. Daniilaandryshenko92
    14.04.2023 21:23

    Архитектурные концепты при создании информационных продуктов включают в себя понимание структуры и организации информации в продукте, а также способа ее представления и взаимодействия с пользователем.
    Для понимания архитектурных концептов при создании информационных продуктов следует учитывать следующие факторы:
    1. Целевая аудитория: необходимо определить, для кого будет создан продукт, какие потребности и ожидания у пользователей, какие задачи он должен решать.
    2. Структура информации: необходимо определить, как будет организована информация в продукте, какие разделы и подразделы будут созданы, какая будет иерархия информации.
    3. Навигация: необходимо определить, как пользователь будет перемещаться по продукту, какие элементы навигации будут использоваться (меню, кнопки, ссылки и т.д.).
    4. Визуальное оформление: необходимо определить, как будет оформлена информация в продукте, какие элементы дизайна будут использоваться (цвета, шрифты, изображения и т.д.). 5. Функциональность: необходимо определить, какие функции будут реализованы в продукте, какие возможности будут предоставлены пользователю.
    6. Взаимодействие с пользователем: необходимо определить, как будет организовано взаимодействие с пользователем, какие элементы интерфейса будут использоваться (формы, поля ввода, кнопки и т.д.).
    В целом, понимание архитектурных концептов при создании информационных продуктов позволяет создать продукт, который будет удобен и понятен для пользователей, а также будет эффективно решать поставленные задачи.


    1. in86 Автор
      14.04.2023 21:23

      Спасибо за комментарий

      Точно, так и есть:

      * 1,2 - С этим поможет, структурирует, упорядочит Модель Захмана. Она прямо про это;
      * 4 - Это внутри TOGAF;
      * 5,6 - Это 4+1;


  1. Myclass
    14.04.2023 21:23

    Перечитал вновь и появился доп. вопрос к теме

    Кто нужен для реализации намеченных возможностей?

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

    А в статье первое берётся как данность и разговор идёт о втором. В жизни много раз наяву видел реализацию басни Крылова с животными и музыкальными инструментами. Так и с проектами - концентрация шла на методологию, а потом выяснилось, что наархитектовали так, что после 3-5 лет проекта его заменили на новый проект. И самое печальное - те-же самые архитекторы уже под другой методологией 'создавали' следующие шедевры.

    Я понимаю, что в рамках такой статьи поднять этот вопрос нелегко. Мне хотелось просто об этом напомнить.


    1. in86 Автор
      14.04.2023 21:23

      Спасибо. Крутая аналогия.

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

      А по поводу:

      Будет-ли при тренировки красивый стадион или SAFe - думаю важно, но не настолько как первое

      Позвольте ответить аналогией на аналогию.

      Возьмем все тот же спорт. Скажем футбол.

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

      В стране, где нет красивых стадионов и не занимаются целенаправленным развитием инфраструктуры есть шанс выиграть что-то у кого-то когда-то, но нет шанса построить систему целенаправленного развития.


  1. OlegZH
    14.04.2023 21:23

    • С чего начинается построение любой архитектуры?

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

    • Как создать цифровые продукты, которые будут удовлетворять требованиям заказчиков, вписываться в намеченные сроки и бюджеты?

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

    Вот, что у нас есть?

    1. Торговля. Ситуация: покупатель/продавец, поставщик/производитель. Есть: материалы/склады/логистика, цены/партии, единицы измерения, номенклатура. Требуется: оперативный/бухгалтерский/аналитический учёт.

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

    3. Научная/творческая деятельность: написание статей, рисование картин, съёмка фильмов, проведение спектаклей и радио, накопление данных, обработка данных.

    4. Строительство, проектная деятельность, управление территориями.

    5. Спорт.

    А ещё у нас есть

    • пользователи, которые могут быть простыми потребителями услуг, а могут быть и источниками всевозможного содержимого + всевозможные роли (включая и роли администратора);

    • конкретные объекты, с которыми мы имеем дело (товары, материалы, книги/фильмы/статьи//научные/публицистические/критические//, научные/исторические данные, ...);

    • конкретные способы обращения с этими объектами (типовые операции и типовые сценарии).

    Понятное дело, что различных предметных областях имеются, грубо говоря, свои "склады", своя номенклатура "товаров", свои "накладные", свои "регистры" и свои отчёты. Архитектура — это представление о том, что имеются эти самые "товары", "склады", "накладные", "регистры" и отчёты (и как они взаимодействуют).

    • Из чего должна складываться структура продукта и как он должен реализовывать функциональные требования?

    Возьмём для "примера" задачу решения квадратных уравнений. Сама по себе эта задача решается простой процедурой, которая получает на входе три числа, а на выходе два совершенно других числа, которые (вот ведь какая история!) могут оказаться и комплексными! Но! Попробуйте сделать так, чтобы у этой процедуры были пользователи. Это значит, что надо будет вести историю вызовов, и у каждого. пользователя она будет своя, и свои данные и свои результаты. Тут можно заговорить и о разграничении доступа. Хорошо! А что должна выводить процедура? Чисел мало, нужен поясняющий текст и, вообще, анализ того, что и в каком случае получается, вплоть до полной документации, фактически, описывающей теорию решений элементарного квадратного уравнения. (Запахло ChatGPT? Да-да!!)))) А как эта процедура будет устроена внутри? Просто прочитать три числа из входного файла/потока? Или получить их прямо в визуальной форме? Но можно сделать режим мастера, и действовать строго последовательно (или каким-то образом гарантировать строгую последовательность в рамках общей формы ввода). Уже довольно много вариантов взаимодействия. А если мы хотим решать не только квадратные уравнения? А если мы хотим, чтобы пользователи сами формулировали свои задачи?

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

    Если мы допустим ошибки на более верхних, тактических уровнях они сразу станут видны и понятны, условно - дешевоисправимы. А если на более нижних, стратегических уровнях, то выявить их будет более сложно, исправить более дорого.

    Самая дорогая ошибка связана с тем, что мы разрабатываем программный продукт для работы в конкретной операционной системе, вычислительной сети (интернет) и для конкретной (реальной) организации работы. Это неустранимая ошибка, но именно она обходится нам дороже всего. Надо бы делать операционные системы под конкретные задачи, но всё наоборот. Было бы удобнее иметь единый для всех участников рынка справочник номенклатуры/план счетов/реестр документов и отчётных форм, но в каждой предметной области/стране/ведомстве свои правила и требования.

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


    1. in86 Автор
      14.04.2023 21:23

      Спасибо за комментарий.

      Давайте попробую пояснить свою мысль.

      Если, уж, нам нужна архитектура, то нам нужен обзор возможных предметных областей и предметных ситуаций. Нужна классификация задач: тут у нас — торговля, тут к нас — образование, тут — производство, тут — развлечение (просмотр фильмов, прослушивание музыки), а тут — творчество (создание нового)

      Вы говорите, про архитектуру конкретного решения, решений. Я говорю, про архитектуру построения системы развития ИТ.

      Если мы посмотрим, на интересующую Вас область, то внутри TOGAF, есть этапам/активность - бизнес архитектура. Внутри этой активности есть область бизнес анализ (BABOK). Внутри этой области есть действия по построению целевой бизнес процессов, то есть того, как должны работать - торговля/образование/производство/... Там Вы берете какой-то существующий инструмент и с его помощью наводите порядок. Инструментов много. Например такой (ссылка) - хорошо себя зарекомендовавшие схемы процессов по разным коммерческим сферам деятельности. Тут нет концептов и нет архитектуры. Тут нужно выбрать/разработать/адаптировать модель деятельности, которую нужно последовательно воплотить в коде. Вот тут, в воплощении и появляется архитектура, которая должна соответствовать параметрам, которые я предложил Выше в разделе "Почему информационный продукт должен быть именно таким?"

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

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

      Архитектура — это представление о том, что имеются эти самые "товары", "склады", "накладные", "регистры" и отчёты (и как они взаимодействуют).

      Точно. Но тут Вы про архитектуру конкретного решения, конкретного продукта. Полностью согласен.

      (Запахло ChatGPT? Да-да!!)))) А как эта процедура будет устроена внутри? Просто прочитать три числа из входного файла/потока? Или получить их прямо в визуальной форме? Но можно сделать режим мастера, и действовать строго последовательно (или каким-то образом гарантировать строгую последовательность в рамках общей формы ввода). Уже довольно много вариантов взаимодействия. А если мы хотим решать не только квадратные уравнения? А если мы хотим, чтобы пользователи сами формулировали свои задачи?

      ChatGPT - не панацея. Это инструмент, которым нужно уметь пользоваться, который нужно уметь настраивать. Инженер не может не понимая инструмента его использовать. Иначе инженер не может отвечать за результаты своего труда.

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

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

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

      Можно. И такие системы уже есть. Коммерчески успешные. Например - SAP, котораzреализована как раз вот так. На обслуживание такой технической системы требуется очень много профильного персонала, которые должны работать по своим правилам. Каким правилам? - Как взаимодействовать с пользователями, как вносить изменения в справочники, как развивать систему, как адаптировать систему под конкретные изменения. Все такие системы объединены в отдельный класс систем, которые развиваются по принципам шаблонного проектирования. Это отдельное направление деятельности, которое приводит к своим виткам развития в ИТ. Например к BPMS системам или Low code системам и т.д. Но внедрив такую систему, Вам все равно придется думать и решать задачи связанные с их развитием

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

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