Как избежать неработоспособности API при изменениях? 8 пунктов, о которых стоит подумать

Представьте что вы работаете в средней или крупной организации. По системам бегают заявки, документы, всё прошито бизнес-процессами. Системы разрабатывает ~50 команд. Они живут в своих темпах и друг с другом практически не общаются. Бывает такое, что сделали изменения в одном месте (Например в 1С добавили обязательное поле «КПП получателя» в документ «СЧЕТ»), не предупредили, а в других местах все развалилось. Как сделать так, чтобы такого не было?

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

Ответы в двух категориях

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

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

Уточняющие вопросы

Коллеги имели возможность задать вопросы и вот что они спросили:

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

Каждая команда сама. В каждой команде в основном свои заказчики. За весь процесс отвечает владелец процесса.

Есть вопрос а в чём корневая причина проблемы? Возможные ответы:
а) При постановке задачи забыли что нужно при изменении контракта доработать смежный сервис?
б) У второй команды задача потерялась?
в) Команды отработали корректно но задеплоены несоответствующие версии сервисов?

Не то что забыли, а даже и не знали. Вариант А.

А что значит всё развалилось?

Интеграция с этим 1с начала падать у части команд и из-за этого платежки не проходили.

Проверяем на последствия

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

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

Частотный

Генри Нив в своей книге «Организация как система» развивает идеи Шухарта и говорит:

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

Ребята в Motorolla, когда придумывали 6 сигм, договорились что чинить будут только те ситуации, которые выводят процесс из 6 сигм. Это очень серьезный уровень, посмотрите в таблицу:

Таблица качества 6 сигма

DPMO — количество косяков на миллион возможностей.  Если бы в организации из кейса было принято качество по 6 сигма, то на 1 000 000 релизов допускалось 3 ошибки. Первые три косяка за год игнорировали, а на 4 надо было бы заниматься.

Я не видел применения этой методологии в процессах разработки. Думаю, она больше применима к огромному потоку однотипных процессов, где результатом труда являются типовые единицы, а не каждый раз уникальный код. Для кейса я бы прикинул так «Если у нас 1000 успешных релизов в год, а на 1 из них приходится такой сбой», то можно и забить.

Денежный

Нужно прикинуть, сколько денег мы потеряли, можем потерять в будущем и сколько +- стоит починить эту проблему.

Допустим ошибка привела к простою на 2 дня, мы не смогли оплатить 2000 заявок и  20 проектов, где нужны были эти оплаты, отодвинулись на 2 недели вперёд.  1 неделя каждого проекта стоит 1 000 000 рублей.  Сейчас мы потеряли 40 000 000 рублей.

Поговорили с айтишниками и они сказали, что такое в прошлом году случалось раза 3 на 1000 релизов, поэтому будем  считать вероятность повторения — 0.3%. 40 000 000 * 0.3% = 120 000 рублей. Это сумму мы платим в год за не устранение этого риска, меньше месячной зарплаты 1с-ника.

Настоящие рисковики засмеют с таким подходом, но для данного кейса подойдет 🙂 Если вас интересует анализ рисков и принятие решений, то почитайте книжку ниже.

Отличная книга по принятию решений, не только про риски

Клиентский

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

1с не работает пока, такие условия. Надеемся на понимание.

 

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

Конкретные предложения

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

1. Централизация и общие требования

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

Специально искал максимально мерзкую картинку с ESB

У таких изменений всегда есть обратная сторона — существенное увеличение релизных циклов каждой отдельной команды и появление бюрократического аппарата,  который отнимает время работы команд (огр.коммитеты, архитектурные советы  и т.д.) и тормозит их, становится бутылочным горлышком. А при runtime-зависимостях и еще дополнительные точки для выхода из строя ВСЕГО.

Авторы этой книги предлагают чаще ошибаться, чем сильно всё контролировать. Согласен с ними,  но не по всем вопросам.

Что конкретно предложили коллеги:

    • Внедрить централизованное управление НСИ
    • Организовать управление программой изменений в ПО
    • Внедрить SLA для API
    • Использовать интеграционную шину
    • Решать на этапе проектирования.
    • Ввести руководителя сквозной функции, руководителя проекта. Он будет координировать и согласовывать работу проектных команд и всех изменений и графики релизов.
    • Назначить ответственного менеджера, который будет «шиной», и к нему обращаться по всем вопросам и проблемам. Он организует процесс изменений во всех командах, и проработать санкции за косяки.
    • За всеми документами в 1с закрепить владельцев. Если документ задействует несколько отделов, то со всеми надо согласовать изменения. Только после согласования необходимости аналитик их прорабатывает.
    • Сделать основные принципы построения сервисов и их взаимодействия между собой.  «Либеральны что принимаете», «Консервативны что отправляете», использовать «толерантный читатель».
    • Жизненный цикл API
  • Сделать бизнес-процесс о согласовании/изменении заинтересованных команд
  • Сделать матрицу пересечений систем-тим лидов и сущностей и просить у них согласование при изменении

2. CI/CD

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

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

CI/CD это когда программист дописал программу, а к пользователям она попала сама

Вот что написали:

  • На пайплайнах не давать задеплоить 1с, если все не собралось с новой версией.
  • При сборке проверять, что твой приклад не использует deprecated API.

Интересно, что никто не упомянул канареечное или блю-грин разворачивание, а следовало бы 🙂

3. Синхронизация

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

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

4. Тестирование

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

Тестирование — это часть SDLC, которая не просто статус в Jira

  • Использовать регрессионное тестирование.
  • Разные политики падения тестов — на проде по любому чиху, на проде — до упора
  • Команды-потребители апишки предоставляют свои тесты (т.е фичи апишки, которые они используют и которые им важны) команде-поставщику. Команда поставщик перед выкаткой новой версии прогоняет все тесты команд-потребителей, если что-то валится, то связывается с потребителем и синхронизируется, чтобы те подготовились к изменениям, добавили новые тесты и тд.
  • Автоматизировать smoke тесты на полном stage, либо делать их руками, либо автоматизировать интеграционные тесты.

5. Документирование

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

Я не видел чтобы это работало хотя бы раз на проектах, где больше 2-3 команд, потому что это ОЧЕНЬ трудоёмко.

Трамп согласен

Вот что написали коллеги:

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

6. Перестройка орг.структуры

Тут только одно предложение и оно очень интересное — организовать фича-тимы. Единственное предложение, которое пытается разобраться с причиной «А  почему КПП то вдруг стал обязательный?». Ожидается, что если бы мы собрали команду «КПП заполнителей» из участников всех команд и дали задание обеспечить честное заполнение КПП по всей организации, они бы не пропустили соседние системы и всё сделали четко.

Фича-тимы сами везде всё меняют, а не ставят задачки. Красавчики.

7. Техника

А здесь просто перечень технических решений, которые можно было бы применить:

  • Использовать поход contract-first.
  • Версионность API.
  • Использование protobuff.
  • Заставить 1С систему саму как-то найти КПП, а если не получается — кидать на ручной разбор и там уже ручками заполнять. (Заботливый подход о потребителе, мне нравится!)

8. Культурные изменения

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

  • Знали своих потребителей.
  • Заботились о них — писали им письма, объясняли почему будут происходить изменения и как именно их выполнить.
  • Адекватно выполняли требования на уровне организации( версионирование API, API lifecycle и т.д.)

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

 

А как там у них?

Netflix

Угорели по культуре — основная идея  «Свобода и ответственность» — там инженеры могут делать все что угодно с любым инструментарием. И , конечно, много тестирования и CI/CD. Люди, которые занимаются централизацией, у них тоже есть, но не всего подряд, а каких-то отдельных направлений. Вот, например, вакансия Release Manager.

Подробности в статье.

Google

В гугле придумали небольшой фреймфорк для Change Managment и через него прогоняются большие изменения:

Больше в статье. С техникой у них тоже всё в порядке, вот тоже самое, но для разработчиков и девопсов.

Вывод

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

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Комментарии

Вам так же понравится

 
Спасибо! Подписывайтесь на меня в соц.сетях, чтобы быстро получать новые материалы по BPMN, BPM, BPMS

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: