Это не значит, что ее нельзя решить, хотя "решить" - это, вероятно, неправильный термин. ИМХО, лучше сказать "ею можно управлять", поскольку существует не одно решение, а лишь набор техник и практик, которые может применить ваша команда.
Не претендуя на исчерпывающую полноту:
Постарайтесь разделить вашу систему на отдельные, индивидуальные компоненты, каждый из которых имеет строго определенные вход и выход. Внедрите четкий поток данных между различными компонентами вашей системы. Визуализируйте этот поток с помощью диаграмм и точно смоделируйте, что входит в определенный расчет, и что выходит на выходе (включая предупреждающие сообщения).
Предупреждающие сообщения, которые предназначены только для регистрации, должны подаваться в отдельный поток или выходной канал, который не оказывает реального влияния на поток управления. Какой канал или каналы вам нужны, я не могу сказать вам с высоты 100 000 футов, для этого вы должны предоставить больше деталей.
Предупреждения или сообщения об ошибках в пакетном процессе, которые относятся к определенным входным записям, должны либо непосредственно включаться в выход для конкретной записи, либо сохранять машиночитаемую ссылку на их вход. Это позволит вам либо отсортировать эти записи, либо обработать их особым образом, либо обработать их позже.
Ваша команда должна накопить определенный опыт в функциональном программировании, неизменяемых структурах данных и таких методах, как map-reduce.
Это все, что пришло мне в голову прямо сейчас, возможно, я упустил несколько вещей, но я думаю, вы уловили общую идею - вашей команде нужен набор инструментов, а не только "одно кольцо, чтобы управлять ими всеми".
Прикрепляю к посту несколько видео по теме: