Что создаёт 1ADK

От чего на самом деле зависит работа моей системы?

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

Короткий ответ

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

#Что это такое

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

#Почему список всегда неполон

Спросите список внешних зависимостей у троих в компании — получите три разных списка, и ни одного полного.

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

  • того, кто добавил провайдера SMS, уже нет в компании;
  • интеграция с аналитикой вызывается из одного файла, который никто не открывает;
  • внутренний API отчётности принадлежит команде, которую с тех пор реорганизовали;
  • на бакет объектного хранилища ссылается переменная окружения, в значение которой никто не заглядывал с момента установки.

Ничего из этого не видно снаружи и ничего из этого не всплывает в разговоре, потому что вся категория состоит из того, о чём никто не думает. Видимым это становится ровно в двух случаях: когда что-то из этого ломается и когда кто-то выводит список из системы, а не из памяти.

#Что считается зависимостью

Виды зависимостей и цена отказа каждой
ВидПримерыКак выглядит отказ
Платный сторонний сервисПлатежи, доставка почты, SMS, карты, поиск адресовОстанавливается деловая функция. Обычно видно сразу.
Инфраструктурный сервисОбъектное хранилище, управляемая база, очередь, кэш, поискШирокий и тяжёлый. Чаще всего труднее всего заменить.
АутентификацияЕдиный вход, провайдер OAuth, платформа идентичностиНикто не может войти, включая вас.
Внутренний API другой командыСервис отчётности, общая карточка клиентаМедленно, политически и невидимо до самого момента.
Исходящая интеграцияНочной файл партнёру, вебхук клиентуМолча. Первым замечает кто-то другой, недели спустя.
Входящий интерфейсПубличный API, вебхук, который вы принимаетеЛомается чужой продукт, а чинить это вам.

Последние два чаще всего отсутствуют в собственном списке компании, потому что не ощущаются зависимостями. А они ими являются: что-то снаружи полагается на договорённость, и ни одна сторона её не записала.

#Пять вопросов к каждой записи

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

  1. Что это и зачем?

    Название сервиса и одна фраза о том, что перестаёт работать без него.

  2. Какая часть нашей системы его касается?

    Какие компоненты, через какой интерфейс, в каком направлении.

  3. Как это себя ведёт?

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

  4. Чей это аккаунт?

    Из кода не выводится. Если ответ «личный аккаунт нашего разработчика», вы нашли что-то важное.

    Проверки зависимости от агентства и готовности к передаче спрашивают об этом прямо.

  5. Что будет, если это остановится?

    Суждение, а не факт, — но его никто не вынесет, пока у первых трёх вопросов нет ответов.

#Как она выглядит

Интеграции вымышленного биллингового продукта Вымышленный пример — не клиент
ИСХОДЯЩАЯ  Платёжный провайдер                    REST · внешний
           от    Сервиса биллинга
           авторизация  ключ API из конфигурации
           для   Приёма платежей по картам
           ⚠  Поведение при повторах не установлено

ИСХОДЯЩАЯ  Транзакционная почта                   REST · внешний
           от    Модуля уведомлений
           для   Чеков, писем о просрочке, сброса пароля

ИСХОДЯЩАЯ  Объектное хранилище                    SDK · внешний
           от    Генератора счетов
           для   Хранения созданных PDF-счетов
           ⚠  Бакет и регион приходят из конфигурации вне
              репозитория — не установлены

ИСХОДЯЩАЯ  Выгрузка CSV партнёру                  ФАЙЛ · внешний
           от    Ночной выгрузки
           для   Ежедневного файла с платежами
           ⚠  Получатель не установлен. Никто в анализе не смог
              сказать, кто это принимает.

ВХОДЯЩИЙ   API платежей                           REST · публичный
           к     Сервису биллинга
           для   Возможности витрине принять платёж
           авторизация  токен, выданный витриной

ВХОДЯЩИЙ   Вебхук провайдера                      REST · внешний
           к     Сервису биллинга
           для   Подтверждения, что платёж прошёл
           ⚠  Проверка отправителя не установлена

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

#Зависимость — не то же самое, что владение

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

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

Об этом на сайте есть две вещи: кому должна принадлежать продакшен-инфраструктура и проверка зависимости от агентства, которая проходит по аккаунтам по одному.

#Чего она не найдёт

Чего это не делает

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

Узнайте, от чего зависит ваша система.

Первая карта бесплатна, и интеграции — обычно та её часть, которая владельца удивляет. Человек с доступом к коду выполняет одну инструкцию.

Построить карту проекта — бесплатно Проверить зависимость от агентства