Microservices
I really like microservices architecture and for building medium or large size complex systems it's the way to go. The key here is to define clear boundaries for each microservice and to build up the right organisational structure and culture to support the technical environment. I think it is well said by Andy Wo:
"A system with the microservice architecture offers a great deal of benefits, for example independent deployment, strong subsystem boundaries, and technology diversity. However, it does come with a price tag of increased complexity related to distributed application development (e.g., independent data models, resilient communication between microservices, eventual consistency, and operational complexity). These aspects will contribute to a higher level of complexity than a traditional monolithic application. Even with proper tooling and design, developing and running a multitude of distributed services at scale is not an easy task, and certainly one that you should only embark on after careful consideration."*