Статья про типизацию прошела весьма неплохо, поэтому я хотел бы закончить эту историю и рассказать о проблеме, от которой я к этому начал идти. И как многие, наверное, догадались, это проблема интеграций. Она остро стоит между фронт (web/mobile) и бэк, а еще хуже дела обстоят с межкомандными интеграциями.
Проблема интеграций
Классическая проблема заключается в том, что никто заранее не фиксирует форматы взаимодействия, а на интеграции мы получаем два нестыкующихся куска. Происходят бурные трения и выяснения, потом в несколько итераций все это соединяется. Если речь идет о межкомандных историях, то это уже занимает ощутимое время, но и внутри команд по сути время и нервы уходят впустую.
Начинаем решать проблему
Мы конечно же учимся на своих ошибках и говорим, что теперь мы на старте задач по интеграции согласуем формат. Отлично, с горем пополам согласовали и записали. Пришли к моменту интеграции - не стыкуется. На практике часто всплывают всякие вещи и часто можно услышать подобные объяснения: "ой тут было не додумано, не придумано, я поправил". Поправил и не сказал, собственно проблема интеграции на этом этапе сохранилась.
Идем дальше и учимся коммуницировать. Становится лучше, но проблем все равно с этим связанных остается много.
Как сделать еще лучше
Какой шаг можно рассмотреть следующим? Берем, на пример, gRPC, и, на этапе постановки задач на интеграции, фиксируем протокол общения. Раздаем сгенерированные под языки файлы и стыкуемся. Конечно поправить их может каждый и сказать, что так и надо было. Тут появляется новый ответственный за конкретную интеграцию, в задачи которого входит принимать и согласовывать изменения по формату и рассылать всем новые варианты. Чем больше команд будет вовлечено, тем сильнее необходимость в таком человеке, а не в саморегулирующемся процессе. Для очередей можно просто взять Protobuf.
Для меня следующий шаг в улучшении процесса интеграций и уменьшение издержек на него стоит потраченного времени на внедрение и поддержку gRPC и Protobuf. Конечно не каждому это нужно и это точно не решение без минусов. Но оно нацелено на улучшение ситуации в процессах интеграций и, при правильном подходе, улучшит и упростит ситуацию.