PlantUML
Если вы хоть чуть-чуть в сфере ИТ, вы точно встречали PlantUML диаграммы. Это такие схемки с пошаговым описанием действий в системе, или описанием структуры проекта (сервисы, базы, и тд). Визуализация это, конечно, прекрасно, но хорошая визуализация ещё лучше. А PlantUML предоставляет хорошую визуализацию только для одного уровня абстракции.
С4
В проекте всегда можно выделить несколько уровней абстракции, и именно про это модель C4. Четверка в названии означает уровни:
1. Диаграмма системы — что приносит пользу пользователю. Система состоит из контейнеров.
2. Диаграмма контейнера — наши программистские сущности: базы данных, s3, отдельные приложения и микросервисы, это всё контейнеры. И каждый контейнер состоит из компонентов.
3. Диаграмма компонента — это модули ПО. Например, микросервис состоит из нескольких компонентов: СУБД, контейнер с приложением, веб-сервер.
4. Диаграмма кода — каждый компонент как-то напрограммирован. Вот тут можно сделать описание модулей и классов (опускаться до этого уровня обычно не нужно).
Кто кого?
Ещё есть правило, что нужно указывать направленность взаимодействия. Например, код ходит в базу данных. Да, тут сразу понятно, кто к кому обращается, ведь БД сама не ходит к приложению.
Если взаимодействие с API, то указывать направленность очень важно: мы можем запрашивать данные с внешнего ресурса, а также ресурс может уведомлять наше приложение о новом событии. И при указании направленности мы ещё и подписываем стрелочку, уточняем, что именно тут происходит.
А самый кайф C4, что никому не нужно приближение дальше второго уровня, изредка третьего.
PlantUML всё ещё актуален для Sequence диаграмм — схем с последовательностью действий, например «пользователь запросил А, система вытащила данные из B, перепроверила через C и отдала пользователю». А вот если структура системы описана по C4, то это гораздо понятнее.
Кстати, что PlantUML, что C4 рисовать руками не нужно, используйте для этого текстовый формат: его легко версионировать и распространять. Есть свои языки для этого, а также реализации на привычных нам Python, JS и тд.