Imagine you’ve never cut open a human body before. Nor seen a diagram drawn by someone who has. Back before anatomy textbooks, the organs and systems of the human body would not have been obvious.
I imagine asking, what are the parts that make up a person? and getting: head, arms, legs, hands, feet, chest, and soft belly. Maybe feelings come from the gut, wisdom from the chest, ideas from the hands, energy from the head.
These are parts of our bodies, but they don’t describe the body’s functioning. The useful subsystems of our bodies are: circulatory system, respiratory system, digestive system, etc.
Now imagine visiting a datacenter. There was a time, decades ago, when you could point to each computer and say “this is the point of sale server. This one runs reports. This one does accounting.”
Today, the lines are not so physical. Subsystems are divided among containers inside VMs scattered across physical servers.
Sometimes the obvious divisions aren’t the meaningful ones. When people slice up a system and call the parts subsystems, but these divisions aren’t useful for understanding the system, that’s the mereological ontological fallacy. Mereology is the examination of part-whole relations; ontology asks what entities exist. So they’ve divided the thing up into parts that don’t really exist (except for your cuts).
It reminds me of how we try to divide teams according to what people do. On software teams, that’s pointless. What does it matter who types what? It’s about who knows what, the accumulation and sharing of knowledge within the team.
Division of “labor” doesn’t help in knowledge work.
This is what DevOps (and DevSecOps) and multifunctional teams are about. Don’t divide people by what they do, passing artifacts between them. Get all the knowledge you need together; conceive and build and operate the software together. Define roles by what we increasingly know.