Remix.run Logo
orthoxerox 8 hours ago

The most common mistake I've seen is not agreeing on what arrows represent: control or data. Does A-(customer data)->B mean A asks B for data or A sends customer data to B?

Of course, sequence diagrams make it clear with two separate arrows when control and data flow in different directions, but a lot of diagrams are of the "plain old boxes and arrows" variety.

HotGarbage 7 hours ago | parent | next [-]

This is why the C4 Model insists on using verbs to label interactions. (e.g. “reads/writes data from”, “sends reports to”, etc).

Most of the article's diagrams are actually terrible in this regard.

kqr 4 hours ago | parent | next [-]

This is an older discoery than that. Expert systems back in the day often modeled knowledge as graphs with the arrows being labeled with the specific relationship between the things.

It works because (node, edge, node) triplets then form propositions, the fundamental units of knowledge

Come to think of it, expertise researchers still do this today to make rough sketches of domains of study. The result is called a concept map.

cenamus 6 hours ago | parent | prev [-]

C4 is great, even if I can't be bothered to model every layer

sly010 an hour ago | parent | prev | next [-]

There is in fact a 3rd: build time dependencies.

Control: Object/module/function A calls object/module/function B.

Data: The call can either push or pull data.

Build dependency: The call can be direct (A depends on B) or indirect through an interface/callback/etc (both A and B depends on the interface).

Ideally every design document includes all 3 as separate diagrams.

sly010 an hour ago | parent [-]

Then of course there is the whole fractal nature of software. As you add more detail, the arrows can flip flop around. Polling in a lower level of a stack can very much be used as a push mechanism. (e.g. USB interrupts are in fact the host polling the device)

This is why communicating architecture is often as hard if not harder than implementing it.

NalNezumi 6 hours ago | parent | prev | next [-]

The one solution that works for me is to color code each arrow and at the top left of the diagram add a legend that describe what each colored arrow represent.

This way sometimes the color can describe control, data, and sometimes even teams expected to implement this arrow by color coding teams.

The latter is very helpful for cross team meetings to make each group focus on the part of the diagram that will affect them the most, and give pointed feedback to assumptions and lack in specs

pepperoni_pizza 6 hours ago | parent | prev | next [-]

Yup, we had exactly those hangups when diagrams showed data flowing from restricted network system to data lake. The data is generated and owned by the system and the lake has a secondary copy, except the physical implementation is that the lake opens a connection and pulls. Somehow that is forbidden and we spent months fighting firewall people. Fortune 50 is fun.

zabzonk 7 hours ago | parent | prev [-]

In high-level diagrams, which I think is what is being discussed here, I like to think that A --> B means that A "uses" B in some way, and leave it at that.

growse 3 hours ago | parent | next [-]

I do similar, but frame it in terms of dependencies.

The database can live without the web server, but the web server doesn't work without the database.

Therefore webserver ---> database.

Key thing in that these deployment / context / container diagrams don't have a temporal axis. If you want to represent a flow, then you want a diagram where time has directionality, like a sequence diagram.

segmondy 7 hours ago | parent | prev [-]

yup, A interacts with B with the interaction originating from A.

chrisweekly 4 hours ago | parent [-]

related tangent (outside of diagrams) lt < and gt > symbols are often dangerously ambiguous; does

    A > B > C  
mean "A then B then C"? or "A is superior to B which is superior to C"?