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
"...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."
http://www.purl.org/stefan_ram/pub/doc_kay_oop_en http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/begriff_objektorientierte_programmierung_de Alan Kay coined the phrase Object-Oriented Programming, but this is not his fault. He has repeatedly said that to him, OOP is about encapsulation and message passing, not inheritance and ontologies of types. But like so many other Cargo Cults in Computer Programming culture, OOP and inheritance are enchained like ancient mariner and albatross
...it has to process many trades with low latency. The system is built on the JVM platform and centers on a Business Logic Processor that can handle 6 million orders per second on a single thread. The Business Logic Processor runs entirely in-memory using event sourcing. The Business Logic Processor is surrounded by Disruptors - a concurrency component that implements a network of queues that operate without needing locks.