Привет, Хабр! Я — Светлана Уварова, ведущий системный архитектор в МТС.

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

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

Бывает, что архитектор приходит в новую команду и коллеги встречают его прохладно. Ведь и раньше без него они жили нормально. Например, мой случай: я пыталась собрать информацию о системе, а со мной отказывались общаться: боялись, что я наврежу проекту. Я предлагала решения, ставила задачи, а коллеги говорили, что они лучше знают систему и технологии, и им не нужен кто-то новый. Уходили часы на объяснение своей роли и отстаивание задач. На притирку с этой командой ушло три месяца.

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

Мнение 1. Архитектор — это технический писатель. А значит, пусть записывает то, что ему скажут

«Основной артефакт, который производит архитектор, — это документ с текстом. Если человек новенький в команде, то систему он не знает. И может записать только то, что ему продиктуют. А если записывает за кем-то, то это технический писатель».

Что на самом деле

Вся суть — в содержании и предназначении архитектурных документов. Архитектор проектирует новую систему, опираясь на то, что ему рассказали об уже работающей системе. И он старается ровно и аккуратно встроить дом «новая функция» в давно отстроенный и сданный квартал «существующая функциональность».

Нюансы

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

  1. Доработать или изменить существующий метод, чтобы он забирал из базы данных цену и отображал ее. Назовем этот вариант метод 1.

  2. Выпустить новую версию метода. Берем весь код прошлой версии, добавляем немножко нового кода — и вуаля! Вы прекрасны, а цена отображается. Назовем этот вариант метод 2.

  3. Разработать совсем новый метод. Пусть он будет методом 3.

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

Если мы получили метод 1 или метод 3, то все обращавшиеся к методу 0 системы придется доработать. Иначе все эти витрины сайта или приложения просто не будут знать, как принимать изменившийся ответ с ценой. Тогда вместо отображения ценника мы будем получать ошибку.

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

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

Итог

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

Мнение 2. Не пишешь кода — не суйся в задачи

«Архитектор не сможет объяснить задачу разработчику, потому что он не пишет код сам».

Что на самом деле

Приведу простую аналогию — координатор по организации свадеб. Будущие молодожены могут и сами разобраться, как организовать свою свадьбу: расписать тайминг, оформить welcome-зону, выбрать напитки, собрать плейлист и так далее. Но гораздо проще обратиться к координатору: он учтет пожелания, но предусмотрит нюансы, о которых пара может не знать, и предложит лучшие решения, возьмет на себя логистику, организацию и сам проконтролирует исполнителей. Молодоженам не придется отвлекаться на несколько задач одновременно, и они смогут радоваться своему празднику.

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

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

Нюансы

Перечислю малую часть задач, которую выполняет архитектор:

  • Выбирает технологии и архитектурные подходы, особенно если разрабатывается новая система. Выясняет огромное количество нюансов. Например, разрешены ли выбранные технологии законодательством, позволяют ли они обеспечить нефункциональные требования? Микросервисы или монолит? Реляционная база данных или нет? Что важнее — быстрое чтение или быстрая запись именно для этой конкретной системы и задачи? Нужна ли интеграция, и если да, то какая?

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

  • Выбирает подходы, которые обеспечивают доступность и отказоустойчивость системы.

  • Определяет контексты — внешние взаимодействия с проектируемой системой или новой функциональностью.

Чтобы решать все эти задачи, проектировать возможные решения и выбирать из них оптимальное, огромный опыт программирования не нужен. Хотя я сама писала на разных языках программирования много лет.

Что важно для архитектора:

Уметь выделять проблему. Расспрашивать заказчика, формулировать, уточнять, действительно ли проблема такая. И недаром говорят, что хорошо сформулированный вопрос — это половина ответа. Были случаи, когда заказчик описывал с моей помощью проблему и сам понимал, как он ее может решить без доработок. Еще один бонус от такого общения: автор запроса понимает, что его проблему разделяют, и становится лояльнее.

Уметь принимать решения. Как? Представим, что у нас есть задача. Сперва архитектор ищет десятки решений — 15, 20, 40 — сколько получится. Самое главное — все эти решения должны быть рабочими. Потом он смотрит на требования и из множества вариантов выбрасывает те, что точно не подойдут. Редко бывает, когда решение идеальное и явно правильное. Основные критерии — это выполнение функциональных и нефункциональных требований. Например, не выполняются требования по информационной безопасности — вариант сразу отправляется в корзину. А над какими-то требованиями можно подумать, поискать компромиссы. Как правило, человек, который принимает решение, соглашается с минусами. Поэтому из оставшихся условно подходящих решений надо выбрать то, с минусами которого мы сможем жить.

Уметь обосновать решение команде. Рассказать про все плюсы и минусы, объяснить, почему этот вариант лучше, чем другие 5-10-20. В 95% случаев команда соглашается. А с остальными 5% есть два пути. Первый путь — просто смириться, что есть недовольные. Особенно, если это не влияет на ваше решение. И здесь мы видим еще одно важное качество архитектора: признавать за другими людьми право на свое мнение.

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

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

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

Костяк решения, на которое мы смотрим, такой:

  1. Чтобы продать, надо описать, что мы можем продать.

  2. То, что мы описали, мы должны уметь подключить на оборудование.

  3. То, что мы подключили, мы должны уметь посчитать.

Если мы сделали все это, остальные функции можно уже наложить на основу, но не наоборот.

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

Мнение 3. Архитектор не должен заботиться о том, какими данными наполнят систему

«Зачем архитектору знать о данных, которыми будет наполняться система? Ведь для него нет никакой разницы!».

Что на самом деле

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

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

Все это, разумеется, влияет на архитектуру.

Нюансы

Система без защиты доступа к данным
Система без защиты доступа к данным

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

Система с аутентификацией и авторизацией
Система с аутентификацией и авторизацией

А вот в этом варианте уже придется пройти аутентификацию, ввести пароль и доказать, что «я это я». Хотя, как известно, «я бывают разные».

Пользователи имеют свои роли и, соответственно, доступы. Например, записывает данные только оператор, а читают все. И уже не получится притвориться другим пользователем — если, конечно, не знать чужой логин и пароль.

Система с синхронизацией данных через брокера сообщений с аутентификацией и авторизацией
Система с синхронизацией данных через брокера сообщений с аутентификацией и авторизацией

В этом варианте системы появляется брокер сообщений. Одна система оповещает другую, что ее данные изменились.

Объясню на примере. Есть справочник единиц измерения внутри компании. Если каждый филиал будет вести свой отдельный справочник, то информация может не совпадать. Например, в одном справочнике СМС указаны в штуках, а в другом — именно в СМС, мегабайты где-то обозначены как MB, где-то — МБ или Мб. И один филиал ведет справочник в виде таблицы в Excel, другой — в товароучетной системе, третий — еще где-то. Из-за этого найти информацию сложно. Чтобы данные везде записывались одинаково, есть общие справочники компании. И их заполняет, например, один отдел в мастер-системе. И как только что-то изменилось в этом всеобщем справочнике, мастер-система через брокер сообщений передает по филиалам информацию, и справочники обновляются везде.

Итог

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

Мнение 4. Архитектор = аналитик

«Архитектор и аналитик занимаются одним и тем же». Не скажу, что они на 100% не правы, но есть один нюанс. Сейчас объясню.

Что на самом деле

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

И аналитик, и архитектор могут ставить задачи самым разным командам: разработчикам, и девопсам, тестировщикам, техническим писателям.

Нюансы

Приведу простой абстрактный пример, который иллюстрирует разницу между аналитикой и архитектурой.

Аналитик пишет требование: «Обеспечить в форме на сайте возможность ввести фамилию, состоящую из русских букв».

Архитектор прорабатывает и ставит задачи:

  1. DevOPS: настроить сетевые доступы, необходимые для использования базы данных. Без сетевых доступов код не будет работать, потому что не сможет подключиться к базе данных.

  2. Разработка:

    a. Создать схему в базе данных и таблицу для ввода фамилий с колонкой «фамилия». Не должно быть логики и триггеров в базе данных.

    b. Написать метод проверки того, что фамилия состоит только из русских букв. В случае ввода любых других символов отображать ошибку — «Что-то пошло не так».

    c. Реализовать настройку, отключающую функциональность из п. b. Переключатель обычно делаем на случай, если передумали это использовать или случилась авария после запуска функции. В обоих случаях не требуется дополнительная разработка и правка кода, чтобы удалить функцию и быстро откатиться к стабильной версии.

  3. Тестирование:
    a. Протестировать возможность ввода любых нерусских символов.
    b. Протестировать при вводе фамилии возможность ввода спецсимволов.

  4. Технический писатель:
    a. Подготовить/доработать руководство пользователя по вводу фамилий.

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

Итог

В разработке любых систем одинаково важны описания от аналитика и архитектора. Аналитик доступно формулирует требования и образ результата, то есть аналитика понимает заказчик. Работа архитектора поможет сформировать понятные командам задачи и получить результат.

Что со всем этим делать

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

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

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

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

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

Делитесь в комментариях своими историями и задавайте вопросы!

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


  1. powerman
    20.06.2024 14:56
    +17

    Архитекты бывают разные: Enterprise, Solutions/Systems, Application/Software…

    И если это Application/Software Architect, и он при этом не пишет регулярно код, то мне жалко команду, которая будет вынуждена реализовывать его идеи. Это я говорю как Application/Software Architect с 35 годами опыта: если бы я лет 20 назад перестал писать код, то моё сегодняшнее представление об имеющихся языках, технологиях, инструментах и их характеристиках было бы очень далеко от реальности, что неизбежно приводило бы к низкому качеству принимаемых мной решений и соответствующей реакцией разработчиков на мои требования и рекомендации. А, судя по статье, Вы описываете как раз такой тип архитекторов.

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

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


    1. powerman
      20.06.2024 14:56
      +8

      На английском таких не пишущих код архитектов называют Ivory Tower Architect (хз как это будет на русском). Цитируя Фаулера:

      A well-known architecture department anti-pattern is the “ivory tower”:
      architects sit in the penthouse to define how developers should design
      and build software, without developing any software themselves. Such a setup has one
      cardinal flaw: it doesn't provide feedback to the architects as to the effectiveness
      nor the cost of their decisions. Worse yet: some architects quite enjoy themselves
      not having to deal with those consequences.


      1. JuryPol
        20.06.2024 14:56
        +1

        https://habr.com/ru/companies/wunderfund/articles/755890/

        Там это переводится  как «архитектор в башне из слоновой кости».


        1. powerman
          20.06.2024 14:56
          +1

          Это буквальный перевод, он не очень подходит - у нас не распространена идиома "башня из слоновой кости" и связанная с ней история. Лет 20 назад таких архитекторов на русском называли "облачный архитектор", намекая на то, что он летает в облаках. Но потом появились реальные облака, и для них появились свои архитекторы, и "облачный архитектор" начало означать совсем другое.


          1. JuryPol
            20.06.2024 14:56
            +1

            Ну, «башня из слоновой кости» в художественной литературе все же встречается. Но гораздо чаще у литературных критиков. И вообще в окололитературной среде. Публицисты - опять же…


    1. Batalmv
      20.06.2024 14:56

      Поддерживаю, для вашего уровня обязательно. Я работаю уровнем выше и уже не пишу давно (хотя хочется) :(


  1. dididididi
    20.06.2024 14:56

    А какой у вас бэкграунд? Ну что нужно уметь/закончить,/ кем работать чтоб стать системным архитектором?


  1. sensei_developer
    20.06.2024 14:56
    +2

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


  1. Alex_Chicot
    20.06.2024 14:56

    Как в первом комментарии отмечено - архитекторы бывают разными. Разные уровни ответственности - разные архитекторы. От отдельных сервисов/приложений - до уровня корпоративной архитектуры с тысячами систем в компании.

    В статье лишь один аспект - участие в конкретной проектной команде по реализации конкретной задачи.


  1. iverzin
    20.06.2024 14:56
    +2

    С одной стороны вы говорите очень разумные вещи.
    Но с другой, когда вы пишите о том чем вы лично занимаетесь... Извините, но это не работа архитектора.

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

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

    А чем занимаетесь вы:
    "расспрашивает об уже имеющихся функциях системы" - это работа аналитика.
    "описывает требования, которые должен реализовать разработчик" - ну здорово, это все равно что генерал ставил бы задачу солдату.
    Да и примеры ваши "метод1, метод2, метод3" или "ввести фамилию, состоящую из русских букв". Это уровень тимлида.

    Может в этом и причина почему "встречают его прохладно". Для решения этих задач вы не очень-то и нужны были.

    Посмотрел вашу прошлую статью "Как нефункциональные требования влияют на архитектуру". Да, это работа архитектора.
    А в этой статье как-то все не очень.
    Ни в коей мере, не оспариваю вашу квалификацию и т.д. Замечания только к этой статье.


  1. vovs
    20.06.2024 14:56

    Света прочитал. Доступно написано. Боль понятна. Было тоже самое :-) И нет каких то простых и понятных шагов, чтобы внедрить практику в команду, в проект. Все индивидуально.


  1. duke_alba
    20.06.2024 14:56

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


    1. powerman
      20.06.2024 14:56
      +1

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

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


  1. duke_alba
    20.06.2024 14:56

    Это правда. Если программер не понимает - зачем это всё, то сделает плохо. Мой коммент вызван тем, что я видел варианты, когда архитектор не имел никакого веса, и это поддерживалось начальством. Печальное зрелище.


  1. dnszaikin
    20.06.2024 14:56

    Архитектор в первую очередь решает задачи, которые до этого не имели решения, сталкивается с тем, с чем другие не сталкивались, что не загуглишь, не подсмотришь на stackoverflow, и ещё подумаешь как спросить у chatgpt) Лучшее архитектурное решение, это совокупность компромиссов, где каждый из которых несёт наименьший вред принимаемому архитектурному решению. Описанный вами архитектор, без контекста его бекграунда выглядит как старший аналитик, которого просто назначили. Архитектор ещё должен контролировать выполнение архитектурных требований, а наиболее сложные и ответственные участки проекта писать сам. Архитектор который не пишет код - аналитик.