February 7, 2022

Метаданные и BPMN: нас просят сделать космодром, а потом не превращать задачи в космолёт

Помните слова Германа Грефа о том что "программисты не нужны" и последующую статью о том как программистов пытались заменить на BPMN (Business Process Model and Notation)? Почитайте, интересная история.

Мой рассказ не такой красочный, но в нем тоже есть боль, страдания, принятие и отторжение. Выводом может быть фраза "делай проще!".

Пример BPMN-системы.

В компании в которой я работал, решили переложить часть разработки бизнес-логики с программистов на аналитиков.

Сначала это были безобидные правки тарифов по ставкам. Потом решили сделать аля-BPMN, когда в визуальной среде стрелочками рисуется бизнес-логика, а потом из этого генерируется код на C# использующий под капотом процессную модель Windows Workflow Foundation.

И началось.

  • Постоянные конфликты JSON-конфигураций на базе которых генерировались визуальные схемы.
  • Усложнение обратной совместимости на бекенде, потому что в кэше хранились процессы предыдущих версий. Формат контрактов так же ограничен особенностями схемы.
  • Вместо понятного SQL или C# мы писали JSON-метаданые в кастомном формате, из которых потом генерировались Entity, DTO, ViewModel, DDL-скрипты. О релевантности такого опыта на рынке даже говорить не хочется.
  • Каждая новая фича давалась кровью и потом, а сроки исполнения задач росли в геометрической прогрессии. Чем естественно расстраивали менеджеров, ориентирующихся на потрясающие метрики вроде time to market, cycle time, etc.
  • И еще миллион проблем!

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

Ссылка на легендарный пример

Также из-за того что весь проект был завязан на WWF была невозможна миграция на .NET Core (смотрели форки типа CoreWF, но не взлетело).

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

К примеру, я работал над одним багом три месяца и на каждом дейли говорил "я в процессе, распутываю клубок". Баг был в том что при нажатии на ссылку после покупки инвалидировались данные в корзине и пользователь видел ошибку. Звучит просто? Три месяца, сынок.

P.S. Некоторые проекты в компании отказались от использования "ядра" и начали делать простые круды с формочками на фронте. Стоит ли говорить что за несколько месяцев разработки их time-to-market уменьшился в несколько раз по сравнению с предыдущими годами?

P.P.S. Мой друг из крупного китайского ритейлера написал что они отказываются от метаданных. Победа здравого смысла!