
I went to see a talk by Simon Brown organized by the Amsterdam Java Users Group (JUG) in the (quite awesome, to be honest) facilities of Miro in Amsterdam. (YouTube)
Simon Brown has a new book out, "The C4 Model", published by O'Reilly. It will be available for purchase in the next few days. The animal on the cover is supposed to be a Western Tree Hyrax.
Simon said that when O'Reilly contacted him about writing a book he told them that he did not have much material, so it would necessarily be a small book. O'Reilly replied that it's okay, times have changed, people do not actually like big books nowadays, they prefer small books. (I guess this is one more way, in the already long list of ways, in which we are witnessing the demise of humankind.)
Since I do not often travel to Amsterdam, I suffered from a bit of anxiety to be there on time, and as a result I arrived there very early. So, I had the opportunity to have a chat with the very friendly organizer Geertjan Wielenga, who then introduced me to Simon, so I had the chance to have a chat with him too, one-on-one, for a decent length of time, which is something that I was completely unprepared for.
I admire Simon brown for caring about the same things that I care about, and for having skill and charisma in talking about those things, but the truth of the matter is that we disagree in just about everything. (-:=
He believes that software architecture should be strictly descriptive (suggestive), I believe it should be prescriptive (authoritative). I mentioned to him that as things stand today, there is nothing to guarantee to me, the architect, that the programmers and the devops folk have implemented the system exactly as I designed it. Furthermore, as the system evolves, there is nothing to guarantee that the design still matches the implementation. I brought electronic design as an example of what we should ideally have, where a schematic diagram can be sent to a manufacturing shop that will turn it into a functioning electronic board with close to zero human intervention, and he indicated that he was fully familiar with the paradigm.
He said that in software we do not need authoritative architecture because we have the code. (He did not say that this was his opinion, he said that some people would argue that.) I counter-argued that this is equivalent to saying that the design of a one-million-line-of-source-code software system is the million lines of source code that make up that system, which is as preposterous as saying that the design of the Great Wall of China is a listing of all the bricks that make up the Great Wall of China. Simon said that model driven architecture was tried in the beginning of the 2000s and it was not a success. He mentioned that the failed attempts invariably involved code generation. I think we both agreed that code generation as a central feature of a software architecture methodology is a bad idea.
Nonetheless, Simon Brown believes that code is one of the concerns of software architecture. (That's what the fourth "C" stands for in C4.) I believe that architecture need not, and should not, be concerned with code.
Moving on above the level of code, Simon Brown is quite insistent in his C4 model that we need exactly three more layers, with fixed responsibilities: Components, Containers, and Context. He himself mentions that people have brought to his attention that this is quite unmanageable when we have dozens or even hundreds of components inside a container, and his answer to this is that in this case, we should choose to visualize the components as little circles instead of boxes, which is essentially saying "well, draw them smaller!". In contrast, I favor the notion of Hierarchical System Composition, which means that any component can in turn be a container, to an arbitrary level of nesting. Also, a container can act as "context" for its constituent components, so we do not need context as a separate layer, either.
So, when I wrote that we disagree in just about everything, I meant it. (-:= But I still like him, he is a cool guy.
Among other take-aways from Simon Brown's talk, A.I. does not seem to (currently?) fare particularly well either with building C4 designs by examining source code bases, or with writing source code from C4 designs.