The Inuit people have fifty words for snow, ostensibly because it’s snowy where they are, and being able to communicate the state of the environment with precision improves everyone’s life. (Or maybe the Inuit don’t actually have fifty words for snow...) But the idea stands: language grows more precise where more precision adds value.
But language hasn’t grown more precise in Software Engineering. At its core, Software Engineering is the art and science of managing complexity — identifying it, reducing it, organizing it, etc. — but there really aren’t more precise terms for complexity other than, well, complexity. What do you call the complexity inherent to a problem versus the incremental, unnecessary complexity introduced by the design of the solution? Maybe “complication”? (Be gentle. I was young when I wrote that, and the internet was a different, edgier place. Or maybe I was just young.) What about the complexity in a logical model versus the complexity in its implementation? How do you communicate the distribution of complexity throughout the application? If it's uneven, is the program “lumpy”?
The language situation for Software Architecture is no better. If Software Engineering is about managing complexity, then Software Architecture is about managing interdependency — eliminating it when possible, and surfacing it, labeling it, and documenting it everywhere else. So what do you call an unidentified implicit interdependency? A “time bomb,” certainly, but that’s hardly specific. What do you call an individual software module’s software dependencies (e.g., import requests
in Python) versus its dependencies in the environment (e.g., ffmpeg
must be installed)? The data dependency is well known, so we’ve got that going for us, linguistically, but it comes from compiler theory, not architecture!
I’m absolutely certain I’m not the first person to run into these nuances of concept and language. And I strongly suspect that some of the examples I’ve given have names, and I just haven’t heard them. But if they do have names, then I posit that the names are not commonly-known. And for every example that does have a name, I further posit that there are probably five that do not.
This is actually a problem. It’s really hard to talk about something if there’s no word for it. And if you buy into linguistic relativity, then the (non-)existence of vocabulary influences how we learn and think. For people whose job it is to think about and document these concepts, we’re doing a pretty lousy job of it.
We need more words for snow. (And complexity.) (And interdependency, too.)
Any ideas?