Boundaries are important.
Knowing what you won’t do, what you can’t do, is often more important than knowing what you can.
The Romans understood this. They worshipped Terminus, a god who looked over and protected boundary makers.
In software, at the level of abstraction we most of us deal with, drawing boundaries is essentially what we do.
Where should one function end and another begin?
How do these components work together?
Is it time to break this service up into smaller microservices?
Where should this data live?
The answer to these questions is usually human.
Human, because the boundaries we draw are to help ourselves and others understand our system.
Human, because the system we’re describing with code should align with the real people, processes and language that operate the system.
Human, because just like humans, any distinction we make and boundary we draw is necessarily imperfect and compromised in some way.
So next time you’re sweating over what to name that class, or how to map your architecture to real team dynamics, remember: you’re doing god’s work.
May Terminus smile on you today.