Common mistake in arch: Using functionality to id services ("Buying Stocks", "Selling Stocks", ...). Functional decomposition maximizes impact of change, is coupled to it. Better encapsulate change to insulate. Do not resonate with change. |
The conclusion is that you should never design against the requirements (or the features, or the use cases, or the user stories). What you must do instead is identify the smallest set of building blocks, call them microservices if you like, that you can put together to satisfy ANY requirement: present and future, known and unknown. There is a strong process angle of how you go about doing just that.
Identify areas of volatilities, and those you encapsulate in (micro)services. Then you implement the required behavior as the interaction between those services. A new requirement would simply mean a different services interaction, not a different decomposition, so now when the requirements change, your design does not.
https://www.infoq.com/news/2016/07/lowy-every-class-service?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global
an architecture and design journal focused on technological advances, sustainability, and innovative design for the 21st Century. Our objective is to promote and discuss the most avant-garde ideas generated in schools and professional studios around the world. It is a medium to explore the reality and future of design with up-to-date news, events, and projects.
"...a free web newsletter that is produced by the Software Usability Research Laboratory (SURL) at Wichita State University. The SURL team specializes in software/website user interface design, usability testing, and research in human-computer interaction."
"A sandbox for collecting search examples, patterns, and anti-patterns. [...] Over time, I hope to add patterns that illustrate user behavior and the information architecture of search."