If you like this, you’ll probably also like <a href="https://seilevel.com/business-analyst-resources/rml-book/" rel="nofollow">https://seilevel.com/business-analyst-resources/rml-book/</a> and various videos and webinars from Seilevel on YouTube which I added to a playlist (not in any particular order so please scroll through it): <a href="https://www.youtube.com/playlist?list=PL2miG2CzrxakbZswQH-O43G5VnJ0_CB8C&feature=share" rel="nofollow">https://www.youtube.com/playlist?list=PL2miG2CzrxakbZswQH-O4...</a><p>Also relevant, the Design Structure Matrix (DSM): <a href="https://dsmweb.org/" rel="nofollow">https://dsmweb.org/</a> and <a href="https://mitpress.mit.edu/books/design-structure-matrix-methods-and-applications" rel="nofollow">https://mitpress.mit.edu/books/design-structure-matrix-metho...</a> (mostly learning by example, not all software-relevant, available as an e-Textbook on Amazon) If you code in Java, IntelliJ has this diagram included.<p>Finally if you’re looking on advice on how to break software into modules based on making your API surfaces easier to use for yourself and other programmers, have a look at A Philosophy of Software Design. It’s not comprehensive, but it’s concise and relatively easy to read: <a href="https://books.google.ca/books/about/A_Philosophy_of_Software_Design.html?id=pD6-swEACAAJ&source=kp_cover&redir_esc=y" rel="nofollow">https://books.google.ca/books/about/A_Philosophy_of_Software...</a>
<i>> An unfortunate and unintended side effect of the Manifesto for Agile Software Development is that many teams have stopped or scaled back their diagramming and documentation efforts</i><p>This is tragic and too common, in my experience.<p>It's like code should document itself but it rarely does. And then we're back to transmitting oral knowledge to every new hire.
Too complex. Architecture descriptions should make sense to everyone on the project. It should not require you to learn a new design language or notation to use.<p>Here's an example of a complex system that's easy to get your head around - <a href="https://www.wittenburg.co.uk/Design.aspx" rel="nofollow">https://www.wittenburg.co.uk/Design.aspx</a><p>Unfortunately it won't do much for an architect's ego but, if the same simplistic approach to diagrams is applied to all levels of abstraction, it just may provide a thing all stakeholders can reason about and agree to.
In case, like me, the headline makes you think it's related, this is not the same as Pieter Hintjen's C4 development process, the "Collective Code Construction Contract":<p><a href="https://rfc.zeromq.org/spec:42/C4/" rel="nofollow">https://rfc.zeromq.org/spec:42/C4/</a>
UML for the last level does not seem particularly adapted for functional languages or languages with a sophisticated module system though. Anyone knows of some conventional description language that would be a better fit, or is this a case where the code (higher level functions, often times forming some DSL, or the higher level module interfaces) is legitimately the actual description then?
From everything that I have seen, any software architecture modeling model that relegates dynamic behavior to a 'supplementary' status is suboptimal. One of the ways that waterfall fails is that the architects come up with an imposing, apparently comprehensive static structure that overlooks various issues that arise when it is put in motion. These points of contention often do not become apparent until one is trying to integrate the parts into a coherent system.<p>Software design is always an interation between static and dynamic matters -- use informs structure, and structure informs use.
<i>UML - I know next to nothing about UML - but what I do know is the language was invented first and then people came around and tried to give semantics to the language. Well, in other words what that means is that the language was invented first and it really didn't mean anything. And then, later on, people came around to try to figure out what it meant. Well, that's not the way to design a specification language. The importance of a specification language is to specify something precisely, and therefore what you write - the specification you write - has to have a precise, rigorous meaning.</i> - Leslie Lamport<p><i>UML: a language that was invented first and then people came around to try to get semantics.</i> - Leslie Lamport<p><i>UML: fuzzy pictures of boxes and arrows.</i> - Leslie Lamport<p><i>People use UML, things like UML, to model programs, but it's not clear how to translate them in to sequences of states, for concurrency. If you cannot translate them in to sequences of states, it means you don't understand them, and it may mean that there's nothing there. You know, there are lots of people selling snake-oil, drawing boxes and arrows that make you feel good, but ultimately have no real meaning. If something is really meaningful you should be able to express it in mathematics.</i> - Leslie Lamport<p><i>UML - Unnecessary Management Lingo.</i> - @iamdevloper<p>... via <a href="https://github.com/globalcitizen/taoup" rel="nofollow">https://github.com/globalcitizen/taoup</a>
When I see C4 I still connect that moniker with the „Collective Code Construction Contract“ [1] by the late Pieter Hintjens.<p>I find it a bit unpleasant how this project thinks it’s OK to redefine that term without giving at least a nod to Pieter.<p>[1] <a href="https://rfc.zeromq.org/spec:42/C4/" rel="nofollow">https://rfc.zeromq.org/spec:42/C4/</a>
On of the tools that are built to combine the excellent PlatUML and the C4 model and achieve diagrams as code is <a href="https://github.com/RicardoNiepel/C4-PlantUML" rel="nofollow">https://github.com/RicardoNiepel/C4-PlantUML</a><p>Definitely adding this to my toolbox <insert happy nerd laugh>
I'm a big fan of this model - I've changed all my work architecture models to C4 and they make sense instantly to other engineers. The plugin for draw.io is really easy to use as well.
Nice approach but it seems to be rather focused on that modern web or mobile app. How about a system with redundancies? Is a DB replication group a single container? Or do I have to know exactly the number of DB nodes?