Theater with a UML stencil

I’m studying for a software engineering exam, for my Bachelor’s in CS, which means re-learning UML again. I’ve known it for 25 years and used it professionally for 15, ever since a former automotive employer sent me on an Enterprise Architect course.

I still remember who was excited about it: the EA trainers, whose paycheck depended on me loving the tool (or rather, my boss loving it), and a particular kind of architect: the ones quietly promoted away from coding because they weren’t great at it, and who then turned out to be exactly as great at architecture. UML gave them something the codebase never did: a deliverable nobody could falsify. Code gets tested. Code ships or doesn’t. A diagram just sits there looking like work.

For 15 years my honest experience has been that formal UML created more friction than value. One of the few exceptions is the sequence diagram. Ours live as PlantUML, text in the repo, versioned and diffable like everything else. That’s UML as communication, not as a model you’re doomed to keep in sync. The moment a diagram claims to be the source of truth, it starts lying, because it drifts from the code faster than anyone wants to maintain it.

Here’s the part that hits me NOW, studying for it: I still work in automotive, and we’re proudly ASPICE compliant. The industry that turned formal modeling into a religion. And yet. Compliance does not require formal modeling. ASPICE asks for outcomes: requirements, architecture, design, and above all bidirectional traceability between them. It does not ask for UML, SysML, or Enterprise Architect. A competent assessor checks whether the outcomes hold and whether traceability survives, not whether you picked the “right” notation.

So here’s what we actually do. Our entire software engineering documentation lives in Sphinx, in the repo. Traceability is enforced by scripts in CI/CD. A pull request does not merge if traceability is broken. That’s the whole point. We didn’t make traceability something you inspect before an audit. We made it an invariant maintained by construction. The cost of keeping the links honest lands on whoever changes the code, when they change it, with context still fresh, instead of a quality engineer doing archaeology months later. More rigorous than hand-maintaining matrices inside EA, precisely because it’s executable code instead of a diagram to contemplate.

The architects who couldn’t program couldn’t have built this. It takes treating compliance as an engineering problem, not a documentation problem. And the architects I have now are excellent programmers first.

Re-studying UML reminded me how lucky I am to be on the team I’m on now. Not because the theory is wrong, the need it addresses is real. But because this team kept the 5% that communicates and threw away the 95% that just performs rigor for an audience. I don’t take it for granted.

If your “model” only exists to be shown to an assessor, it’s not engineering. It’s theater with a UML stencil.

Originally posted on LinkedIn.


Last modified on 2026-06-16