[Book] Software Architecture The Hard Parts
Дочитал книгу Software Architecture: The Hard Parts. Мне понравилось, кажется, вместе с книгой Fundamentals of Software Architecture от тех же авторов, ее можно рекомендовать как базовый курс архитектуры для синьор разработчиков. Обе, кстати, изданы на русском языке.
Все повествование книги строится на основе выдуманной истории распила на сервисы большого легаси приложения с кучей проблем. В каждой главе описывается как архитекторы анализировали и решали те или иные проблемы, которые с этим связаны. В общем, 8 Мартинов Фаулеров из 10
На мой взгляд, самое главное, чему пытаются научить авторы, это использовать подход trade-offs analysis при построении архитектуры, вместо попыток найти серебренную пулю. Ведь любые общие советы по архитектуре по большей части бесполезны, так как они не учитывают ваш контекст.
Например, вам в системе нужно где-то хранить аватарки пользователей. За предложение хранить их блобом прямо в БД вас могут закидать камнями. Вам начнут рассказывать, что тут же нужно взять Amazon S3 в облаке, или на худой конец поднять локально MinIO. Но что если у вас стартап с одним админом и 1к пользователей? Будет ли уместно просить админа поднимать кластер MinIO на 4ех нодах в отказоустойчивой конфигурации ради 1000 аватарок?
Или, например, священное правило, что два сервиса никогда не должны использовать одну БД. Да, это плохо, и может привести к проблемам. Но что если все остальные варианты еще хуже?
Дальше приведу цитаты собранные из предисловия книги:
… настоящая работа архитектора заключается в его способности объективно определить возможные компромиссы, оценить их и выбрать хорошее решение. Мы не говорим «лучшее решение» (ни в этой книге, ни в реальной жизни), поскольку «лучшее» подразумевает, что архитектору удалось максимально использовать все конкурирующие факторы в проекте. Вместо этого мы шутливо советуем:
Не пытайтесь найти лучшее решение в архитектуре программного обеспечения; стремитесь к наименее худшему сочетанию компромиссов.
Напрашивается вопрос: «Как архитектор должен искать наименее худшую комбинацию компромиссов (и эффективно документировать их)?» Эта книга в первую очередь посвящена принятию решений и учит архитекторов делать наиболее эффективный выбор в новых ситуациях.
Также могу посоветовать youtube канал одного из авторов этой книги Mark Richards
Кстати, авторы книги Neal Ford и Mark Richards совместно с издательством O’Reilly переодически устраивают соревнования между группами архитекторов. Они дают задание спроектировать систему по заданному описанию и потом оценивают презентацию, качество архитектурной документации и архитектуру самого решения.
Работы финалистов разных лет можно посмотреть, например, тут: O’Reilly Software Architecture Kata Entries. Пригодится как источник вдохновения или если захочется подсмотреть какие-нибудь новые для себя подходы к презентации архитектурной документации.