The architecture is not all... The value is in the principles and details. - josuamanuel/softwareDevelopmentPrinciples GitHub Wiki
Sometimes we define an architecture as a collection of boxes connected by arrows. We are delightful to see how everything plays marvellous in our head.
Global architectures are a good way to start a software system but the final quality is determined by principles applied across any software component. The value of the software is hidden there. For example it is better to have a simple REST server well implemented to an Event driven system bad implemented. A monolith well implemented to a mesh of MicroServices. So mosts of the times it is better to do what you know how to do better instead of what looks more fancy.
Gold principles
-
Consistence to apply same pattern again and again
-
Separation of concerns Definition of concerns Clear distinction of responsabilities.
-
Estandarization: Data dictionary, semantic, response formats, Ubiquous language: A common language used by developers and users for common specification for the domain. Interoperability between multiple systems comes from standard interfaces in a semantic way, not from forcing to implement the same. Forcing rigid implementations we risk to create artificial abstractions.
-
Documentation
-
KISS (Keep It Simple, Stupid)
-
DRY (Don’t Repeat Yourself)
-
YAGNI (You Aren’t Gonna Need It)
https://www.callicoder.com/software-development-principles/ https://www.d.umn.edu/~gshute/softeng/principles.html https://trustbridge.github.io/intergov-docs/channels.html