Nuggets of Wisdom

Nuggets Of Wisdom #

When a team builds a system primarily around reuse, they also incur a huge amount of coupling between components.

When an architect designs a system that favors reuse, they also favor coupling to achieve that reuse, either by inheritance or composition. However; if the architect’s goal requires high degrees of decoupling,then they favor duplication over reuse.

Don’t try to find the best design in software architecture; instead, strive for the least worst combination of trade-offs.

Data is a precious thing and will last longer than the systems themselves.

There are no right or wrong answers in architecture - only trade-offs

A second common style of definition for architecture is that it’s “the design decisions that need to be made early in a project”, but Ralph complained about this too, saying that it was more like the decisions you wish you could get right early in a project. His conclusion was that “Architecture is about the important stuff. Whatever that is” - (Martin fowler) Note that “what is important” means that (expert) developers decide what is important, a simple webapp, the DB could be important, but for a medical imaging app, a detail.

There are no wrong answers in architecture, only expensive ones

Developers are drawn to complexity like months to a flame, frequently with the same result.

  • Neal Ford

Since hindsight no longer leads to foresight after a shift in context, a corresponding change in management style may be called for.

Conway’s law suggest major gains from designing software architecture and team interactions together, since they are similar forces.

Promote software to a profit center, and demand strategic innovations as the only acceptable result.

TODO #

  • Nuggets of wisdom list
    • Don’t split services/domains on “entity”, entity driven design I call it. Cause where goes to the entity independent, or aggregate of enttities business logic?
    • Your thoughts on the DRY principle, and using the rule of 3. You want to apply DRY for code that changes at the same time, for the same actor/end user. (e.g. a logic for a user vs admin that seems similar at first).
    • Clean architecture book page 62
      • v1: A module should be responsible to one, and only one, user ornstakeholder
      • v2 (better): A module should be responsible to one, and only one, actor.
        • Note: module can be a small as a single source file, so maybe it is not really DRY specific, but more a guide.