This article was automatically translated from the original Turkish version.
In the software systems we build, understanding the user’s expectations from the system and the interdependencies among integrated systems can be difficult. In this article, we will attempt to understand the set of systems in communication.
Rather than starting directly with software, let us first try to understand the concept by relating it to a real-life situation. Imagine two people in a conversation: one speaks, the other listens. The listener sometimes nods, sometimes narrows their eyes, and sometimes says “hmm” even without fully understanding. Real communication is not limited to speaking the same language; the essential point is sharing the same meaning.
Software systems are just like people. Each performs its own task but must interact with other systems. For example, can an order system exist without interacting with a shipping system? Can user data truly gain meaning without the services surrounding it?
In human relationships, “dependency” usually indicates an unhealthy state. The same applies to software systems. If one module is tightly coupled to another, when the first changes, the second breaks. But complete disconnection is also impossible. Important is to remain connected but not dependent.
Two people may speak the same language but mean the same thing? The same holds true in software. Systems do not merely exchange data; the context, type, timing, and purpose of that data are critically important.
Perhaps the most overlooked element in designing relational software systems is empathy. Empathy requires anticipating the needs, constraints, and workload of another system before designing your own.

A representative image showing human communication alongside software algorithms. (Generated by artificial intelligence.)
Software systems are more than machine-to-machine communication. They are structures designed by humans, operated for humans, and thinking like humans. Building healthy relationships, sending meaningful messages, and designing with empathy extend the lifespan of software and nourish the developer’s spirit. Understanding relational systems is not just about writing better code—it is about learning to build better relationships.
Now let us interpret these concepts technically across different levels of relational systems.
Scenario: Consider three services in an e-commerce system:
Coupling:
Communication:
Semantics:
This is an example of semantic interoperability.
Scenario: Separate modules exist within the same codebase:
Coupling:
Communication:
Semantics:
Scenario: There are users and posts tables.
Coupling:
Communication:
Semantics:
Scenario: A frontend application and a backend API.
Coupling:
Communication:
Semantics:
Scenario: A banking system
Coupling:
Communication:
Semantics:
Understanding relational systems in software is not only about how systems are connected, but also about understanding how these connections carry meaning. Loose coupling, well-defined interfaces, event-driven thinking, and semantic alignment are the foundational stones of sustainable and scalable systems.
Thank you for reading.
Beck, Kent. “Software Design Is Human Relationships: Part 1 of 3: Perspective.” Medium, March 9, 2019.https://medium.com/@kentbeck_7670/software-design-is-human-relationships-part-1-of-3-perspective-1bcd53855557. Accessed April 22, 2025.
Connected Systems: The Anatomy of a Conversation
Dependency and Independence: Building Healthy Relationships
Meaningful Communication: To Be Heard or To Be Understood?
Empathy in System Design
A Human Perspective on Software Architecture
1. Interaction Between Microservices
2. Interaction Between Modules in a Modular Monolith
3. Relationship at the Database Level
4. API-Based Systems
5. Event-Driven Architecture (EDA)