начинайте с устранения проблем в домене, затем вы можете отфильтровать требования к решению.чтобы удовлетворить их, выберите программный стек.Здесь вы должны учитывать ограничения (затраты / время) и ресурсы (компетенции команды), которые вы получили.этот процесс приведет к вашей архитектуре окончательного решения.
ex: -> требования -> подходящие решения -> ситуация -> фреймворк
- финансовая система -> дБ (MySQL, oracle)/ framework (NHibernate, Hibernate) -> клиенту нужна сертификация оракула и команда, компетентная в java -> Spring с Hibernate
- обновление устаревшей системы Java с меньшим количеством переписывания, используйте raw sql, как ORM -> MyBatis
- социальная сеть -> граф БД (neo4j, AWS-neptune) -> пользователи будут со всего мира -> AWS-neptune
- CMS -> db (MySQL, PostgreSQL) / framework (Flask-SqlAlchemy, Rails-ActiveRecord, Laravel-Eloquent, Wordpress) -> не может ждать, позволяет использовать существующий -> Wordpress
- хранить неструктурированные данные -> MongoDB, DynamoDB -> у нас так много разработчиков ruby, данныебольше json как вложенный -> Mongoid ORM
- Android-приложение -> sqlite, firebase -> необходимо синхронизировать в реальном времени -> firebase
- хранить кеш -> Redis, Memcached -> мы делаем golang microservices -> go-redis
- делать аналитические вещи -> PostgreSQL, spark, hive -> ...
надеюсь, что вы получили шаблон