Why Human Systems Need Both Clear Boundaries and Messy Inner Lives
Hatched by tfc
May 29, 2026
11 min read
2 views
84%
The strange problem with designing anything that behaves like a human
What if the most important thing a system can do is not to be efficient, but to behave like it has a body, a mood, and a memory of closeness?
That sounds almost absurd if you come from software design. Good systems are supposed to be clean, decomposed, and easy to reason about. A function should do one thing. A module should have one responsibility. If you need words like “then” or “and” to explain what it does, something is probably wrong. Yet if you want to understand human behavior, that same obsession with purity becomes a trap. People are not single-purpose functions. They are organisms running on hunger, fatigue, emotions, habits, and social bonds, all of which interfere with one another constantly.
This is the deeper tension that connects architecture and human simulation: the more behavior matters, the less it looks like a neat pipeline. The more realistic you want a system to be, the more you have to admit that action emerges from competing pressures rather than isolated logic. That does not mean structure is useless. It means structure has to be designed for entanglement.
A message bus and a human-like agent may seem like opposite topics, one technical, one psychological. But they meet at a surprisingly fertile idea: coordination does not require a central commander, only a well-shaped field of signals and constraints. The challenge is to build systems that are modular enough to evolve, but rich enough to produce believable behavior.
The myth of the single responsibility mind
The Single Responsibility Principle is often treated as a universal ideal, but it is only half a truth. It works beautifully when you are building a library, a payment service, or a function that parses dates. It becomes less satisfying when you try to model a person, a team, or a city. Real behavior is not usually triggered by one cause. It is the result of an internal negotiation among needs, memories, and social context.
Think about why you skip lunch and become irritable at 3 p.m. The explanation is not just “hunger caused a decision.” Hunger changes your attention, your patience, your willingness to answer messages, and your sensitivity to disagreement. Add a strained relationship with a coworker, and the same inbox suddenly feels heavier. Add poor sleep, and a minor problem becomes a major one. Human action is layered, not atomic.
This is where many simulations and many organizations fail. They model the visible action while ignoring the invisible state that produced it. A robot vacuum can obey a route. A human being cannot be understood by route alone. If you want agents to feel alive, or teams to behave intelligently, you need to represent the forces that continually deform decision making.
A realistic system is not one that always chooses the right action. It is one that has reasons for choosing differently at different times.
That insight changes the design problem. Instead of asking, “What is the correct behavior?” we start asking, “What are the pressures that make different behaviors plausible?” In other words, the unit of design shifts from action to condition.
Message buses are not just plumbing, they are social worlds
A message bus is often introduced as infrastructure, a way to let parts of a system talk without direct coupling. But that framing undersells it. A message bus is closer to a city square, a crowded kitchen, or a busy newsroom than to a wire. It creates a place where signals arrive, get noticed, and trigger responses. Components do not call one another in a tight chain. They listen, react, and sometimes ignore.
That matters because reactive systems mirror something fundamental about intelligence: no one has to know everything for the whole system to act coherently. In an actor framework or event loop, each part watches for relevant events and updates itself. The system becomes a network of partial perspectives. This is how real groups behave too. A hospital does not function because one person understands the entire hospital. It works because radiology, nursing, billing, triage, and administration each react to local signals under shared constraints.
The same is true in human-like agents. If an agent’s life is reduced to a single planner that always picks the highest-value next action, it may be efficient, but it will feel dead. Real people are interrupted by notifications, by hunger, by social obligations, by emotion, by the memory of an unresolved conversation. They are not one clean stream of purpose. They are an event loop under pressure.
This gives us a useful design model: humans are not best simulated as one large decision tree, but as a bus of competing events passing through a body of constraints. Some events are internal, such as tiredness or anxiety. Some are social, such as praise or rejection. Some are environmental, such as rain or noise. Behavior emerges when these events collide with habits, priorities, and relationships.
A well-designed bus does not force every message through the same logic. It preserves distinctiveness. Likewise, a believable human simulation should not flatten hunger, emotion, and closeness into one abstract score too early. Each needs to retain its own texture until the moment of action.
The missing ingredients of realism: body, mood, and bond
The most compelling idea in human-like agent design is not that agents should be smarter. It is that they should be more situated. Three elements do much of the work: basic needs, emotion, and closeness in relationships.
1. Basic needs create the body’s veto power
Hunger, energy, and health are not just background variables. They are vetoes. A hungry person can still work, but not in the same way. A tired person can still speak, but not with the same patience. In a simulation, this matters because basic needs explain why “optimal” choices are often overridden.
Imagine an office agent who plans to attend a meeting, write a report, and follow up with a colleague. If energy is low, the report gets delayed. If health is poor, even a brief social interaction may feel costly. This is not noise, it is structure. Basic needs make behavior nonstationary. They ensure the same prompt can lead to different choices at different times.
2. Emotion gives events temperature
Without emotion, a world is informational but not experiential. An agent can know that a message arrived, but not care. Emotion changes the salience of events. It makes some signals louder and others quieter. A minor criticism after a success may be shrugged off. The same criticism after failure may feel devastating.
This is important because emotion is often misunderstood as irrational excess. In practice, it is a prioritization mechanism. It helps a system allocate attention when everything cannot be processed equally. Human conversations feel alive because emotional state reshapes what is noticed, remembered, and how quickly a response forms.
3. Closeness determines which signals matter at all
Not all messages are equal. A text from a close friend changes your day differently from the same text from a stranger. That is not just preference, it is a routing rule. Relationship closeness filters interpretation. It changes whether a remark feels supportive, invasive, neutral, or threatening.
In agent design, this is the difference between generic interaction and social life. A system that tracks closeness can decide whether an invitation is accepted, whether advice is trusted, whether a conflict escalates, or whether silence is interpreted as harmless or ominous. This creates continuity across interactions, which is essential if you want a simulated world to accumulate history.
Together, these elements produce a richer model of agency: the body limits, the mood colors, and the relationship routes. Remove any one of them and the behavior becomes less human.
A better mental model: humans as constrained event processors
The deepest connection between these ideas is not just “events are important.” It is that both software systems and human systems become clearer when you model them as constraint-driven event processors.
Here is the framework:
- Events arrive: a message, a hunger pang, a task request, a social cue.
- State filters the event: energy, emotion, history, and relationship alter its meaning.
- Multiple responders compete: habits, goals, and norms each propose an action.
- A local decision happens: not necessarily optimal, but plausible under current conditions.
- The response becomes a new event: it changes the environment and the agent’s future state.
This is a loop, not a line. And that is the crucial lesson.
Linear models are seductive because they promise comprehension. If A then B then C, the world seems manageable. But real behavior, whether in software or in people, is recursive. The output of one moment becomes the input of the next. The system is always revising itself based on what just happened.
This explains why event-driven architectures often feel more natural than tightly coupled procedures when the problem is dynamic. They are built for environments where the sequence is not fully known in advance. Human life is exactly that kind of environment. You do not wake up in the same state every morning, and you do not receive the same message the same way twice.
Believability comes from internal friction. A system that never hesitates, never reconsiders, and never feels pulled in two directions will always look synthetic.
That does not mean the system must become complicated everywhere. In fact, the lesson of good architecture still applies: separate the concerns, but do not pretend the concerns are independent. Keep hunger separate from emotion, emotion separate from closeness, and each of those separate from action selection. Then allow them to interact through events and rules. This preserves clarity without erasing realism.
What this means for builders, designers, and modelers
If you are building simulations, games, assistants, training environments, or even organizational processes, the temptation is to over-optimize the visible path. You make the action selection elegant. You make the API clean. You make the workflow fast. But if the underlying state is flat, the result will still feel hollow.
The more interesting approach is to model friction with purpose. Ask what makes a choice harder, what makes one cue louder than another, and what creates delayed reactions. A believable agent does not merely choose among actions. It carries unresolved tension. It may be hungry, mildly annoyed, emotionally attached, and socially cautious all at once. Those tensions explain why the same situation can produce different outcomes on different days.
This also applies to organizations. A team is not a spreadsheet with decision rights. It is a bus of signals. Slack messages, deadlines, meetings, interpersonal trust, and fatigue all act like events. If you want the team to behave well, do not only clarify roles. Shape the event environment. Reduce unnecessary interrupts. Make emotional load visible. Strengthen relational trust. Improve the quality of the signals that travel through the system.
In practice, that means good design often works at two levels simultaneously:
- Clean interfaces so components, people, or agents can respond locally
- Rich state so responses can vary in human ways under changing conditions
That pairing is easy to miss because these goals seem opposed. One says simplify. The other says deepen. But they are actually complementary. Simplicity belongs to interaction surfaces. Depth belongs to the states that the surfaces reveal.
A system becomes believable when its parts are simple enough to compose and rich enough to surprise.
Key Takeaways
- Do not model behavior only as choice. Model the conditions that make a choice plausible, delayed, or impossible.
- Separate internal drivers without flattening them. Keep basic needs, emotion, and relationships distinct until the moment they shape action.
- Think in events, not just states. A system becomes alive when signals change future behavior through feedback loops.
- Use constraints to create realism. Hunger, fatigue, trust, and mood are not bugs in behavior, they are the grammar of behavior.
- Design for local responses, not central omniscience. Whether in software or organizations, systems scale better when parts react to relevant signals rather than waiting for a master controller.
The real lesson: intelligence is organized contradiction
We usually think intelligence is about removing noise, reducing ambiguity, and making the right move more often. But human intelligence is stranger than that. It often depends on preserving multiple realities at once: I am tired, but I still care. I am angry, but I still trust you. I want to work, but I also need to eat. These contradictions do not merely complicate behavior. They generate it.
That is why the most useful systems, whether digital or social, are not the ones that eliminate tension. They are the ones that give tension a form. A message bus gives events a form. Basic needs give embodiment a form. Emotion gives salience a form. Closeness gives history a form. Together, they produce something that cannot be captured by a single rule or a single responsibility.
So perhaps the best way to think about human-like systems is not as machines that mimic people, but as environments where competing forces can speak to one another without collapsing into a single voice. That is where believable behavior begins.
And once you see that, the old boundary between architecture and psychology starts to dissolve. Both are really about the same question: how do many partial signals become one coherent moment of action? The answer is not purity. It is orchestration.
Sources
Hatch New Ideas with Glasp AI 🐣
Glasp AI allows you to hatch new ideas based on your curated content. Let's curate and create with Glasp AI :)
Start Hatching 🐣