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