Короткий ответ
#Пять проходов
-
Что запущено и где
Среды, что в каждой развёрнуто, что работает по расписанию и что работает, чего нет в репозитории. По консоли облака и crontab, а не по разговору.
-
Опись
Каждый компонент с каноническим типом и одним читаемым предложением. Сервисы, модули, базы, очереди, задачи по расписанию, фронтенды, внешние системы.
Канонический тип важен: свободные формулировки вида приводят к тому, что два анализа одной системы дают несравнимые списки.
-
Связи
Что что использует, от чего зависит, откуда читает, куда пишет или что реализует — и в какую сторону. Направление здесь не украшение: оно решает, что сломается, когда что-то встанет.
-
Границы
Предоставляемые и потребляемые интерфейсы. По каждому: маршрут или канал, зачем он, как аутентифицируется и что происходит при сбое.
Именно в последних двух правдоподобная реализация и правильная больше всего похожи друг на друга.
-
Что установить не удалось
Каждый вопрос, который проходы выше подняли и не закрыли, с причиной и приоритетом. Записанный на карте, а не оставленный за её пределами.
#Что записывать по каждому элементу
| Поле | Чем оно оправдывает своё место |
|---|---|
| Тип | Канонический, из фиксированного набора, — чтобы две карты одной системы были сравнимы. |
| Имя | Как это называют люди. Полезно и не является идентичностью. |
| Назначение | Одно-два предложения, которые прочитает непрограммист. Это поле решает, сможет ли пользоваться картой тот, кто за неё платит. |
| Расположение | Относительный путь в репозитории, если он есть. Никогда абсолютный. |
| Устойчивый идентификатор | См. ниже. Поле, о котором забывают все, и то, на котором карта держится. |
| Уверенность | Чтобы догадка не читалась как факт. |
| Доказательство | Где это установлено — файл и диапазон строк. Превращает карту из свидетельства в проверяемое. |
#Поле, о котором забывают все
Карта без устойчивой идентичности прекрасно работает в первый раз и перестаёт работать на втором обновлении.
Чтобы потом сказать, что компонент изменился, а не что один исчез и появился другой, две версии карты должны согласиться, что описывают одно и то же. Имена этого не несут:
- Переименуйте класс — это тот же класс.
- Назовите две вещи «Основная база» — это по-прежнему две разные вещи.
- Переместите файл — и вся идентичность, построенная на путях, ломается разом.
Поэтому дайте каждому элементу что-то устойчивое, по чему его узнают: путь в репозитории, полное имя или метку, которую вы выбрали и держите для того, у чего нет ни первого, ни второго, — базы, очереди, среды развёртывания, облачного ресурса. Элемент, у которого нет ни одного из трёх, при каждой пересборке карты оказывается новым.
SERVICE Биллинг
путь: app/Services/Billing/
полное имя: App\Services\Billing\BillingService
DATABASE Основная база
внешний id: db.main
(ни пути, ни полного имени — идентичность в метке)
QUEUE Очередь платежей
внешний id: queue.payments
Два внешних идентификатора выбирают один раз и больше не меняют. В этом и
вся дисциплина: если через год кто-то переименует очередь в инфраструктуре,
метка останется queue.payments, и её история уцелеет.
#Одна система, пять иерархий
Компонент одновременно лежит больше чем в одном дереве, и именно схлопывание их в одно делает большинство архитектурных документов «почти верными».
Платёжный сервис находится внутри приложения, внутри развёртывания и внутри бизнес-возможности. Это три разных родителя, и попытка загнать их в одну иерархию каждый раз теряет информацию.
- Приложение — из чего софт состоит, в терминах софта.
- Бизнес — что он делает, в терминах компании.
- Организация — кто чем владеет.
- Развёртывание — что где работает.
- Данные — какая информация существует и где она живёт.
В первый день все пять не нужны. Нужно записывать вложенность как принадлежащую названному представлению, а не как единственное дерево, — иначе второе представление окажется переписыванием, а не дополнением.
#Когда рисовать схему
После того как есть список, а не до. Схема, нарисованная первой, становится тем, о чём спорят, и зашивает в себя решения — что включить, что объединить, что опустить, — которые должны приниматься из доказательств, а не из того, что помещается на слайд.
Когда список есть, схема по-настоящему полезна и дёшева: это вид на то, что у вас уже имеется. Честной её держат два правила:
- Ставьте дату и указывайте, из чего она выведена. Схема без даты неопровержима.
- Не позволяйте ей стать источником. Когда схема и анализ расходятся, ссылки приложены к анализу.
#Как удерживать её верной
Карту стоит иметь, только пока она верна, и провал всегда один и тот же: её производят один раз, как проект, а потом обновлять её оказывается некому.
Предотвращают это две вещи:
- Сделайте пересборку дешёвой. Если обновление карты стоит полудня чьего-то внимания, оно не случится. Если оно стоит одной инструкции — случится.
- Пересобирайте по событиям, а не по календарю. После релиза, в конце этапа работ, когда приземлилась подсистема, перед передачей. Квартальный ритм даёт обновления, которые никто не читает, и пропускает те, что имели значение.
Тогда ценность оказывается в разнице между двумя версиями, а не в любой из них: что появилось, что изменилось, что ушло и какие прежние утверждения больше ничем не поддержаны.
#Что идёт не так
Рисовать до того, как составлен список.
Вместо этого Артефакт — это список; схема — вид на него. Рисование первым зашивает решения, которые никто не принимал сознательно.
Свободные формулировки типов компонентов.
Вместо этого Фиксированный словарь. «Сервис», «svc», «микросервис» и «бэкенд-сервис» — это четыре имени одного и делают две карты несравнимыми.
Нет устойчивого идентификатора.
Вместо этого Путь, полное имя или выбранная метка. Без этого у карты не может быть истории.
Опустить то, что установить не удалось.
Вместо этого Запишите это. Карта без дыр либо получена из полного анализа, либо тихо превратила свои дыры в молчание.
Одна гигантская иерархия.
Вместо этого Записывайте вложенность по представлениям. У компонента законно разные родители в развёртывании и в бизнесе.
#Чего карта сказать не может
Чего это не делает
- Почему построено именно так. Карта фиксирует, что есть; рассуждения живут в людях.
- Хороша ли архитектура. Оценки качества и балла здесь нет.
- Что происходит во время работы — нагрузка, задержки, что видит конкретный пользователь.
- Всё, что настроено только вне репозитория: оно появляется как открытый вопрос, а не как компонент.
- Безопасна ли система. Карта — не оценка уязвимостей.