@lttrung97Blog
Thanh Trung Le

The Illusion of Shared Language

Why the same word can point to different worlds: lessons from moving between support and software engineering

Thanh Trung Le
Thanh Trung Le · 5 min read
“The single biggest problem in communication is the illusion that it has taken place.” — George Bernard Shaw
George Bernard Shaw’s observation points to a subtle friction in daily life: we tend to assume that speaking the same language guarantees shared understanding. In reality, it seems each of us constructs a subjective mental model of the world, causing our internal language systems—our idiosyncratic mental lexicons—to naturally diverge. In a globalized workspace, collaboration routinely spans diverse cultural and environmental backgrounds. Consequently, even when two interlocutors share a language and phonology, they often appear to operate from distinct semantic frameworks shaped by regional vernacular, cultural nuance, and prior experience. Two people might utter the exact same signifier while referencing entirely different referents.

A dependency chain made of people

Transitioning from customer support into technical support and software engineering made me notice how much this semantic divergence seems to play out in daily problem-solving. From my perspective, delivering a functional system appears to resemble a sequential dependency chain—spanning architecture, code execution, and human communication—where a single point of failure can halt the entire pipeline.
Early on, whenever someone used a term that conflicted with my lexicon, my reflex was to prescribe the industry-standard definition immediately. Over time, though, I noticed that front-loading a pedantic correction usually just derailed troubleshooting. What seemed to serve as a far more effective heuristic was trying to identify the underlying reality they were gesturing toward first, ephemerally adopting their terminology to align our comprehension.

“Your server is down”

A classic example from my support days occurred whenever a customer reported, “Your server is down.”
In an engineer’s lexicon, “the server is down” typically suggests an unreachable Kubernetes cluster, a dead ingress controller, or nodes failing health checks. Yet when I inspected our telemetry, the pods looked healthy and traffic flowed normally. Back when I was dogmatic about terminology, my knee-jerk reaction was to inform them the server wasn't down—which understandably left them feeling dismissed while their workflow remained broken.

What “the server is down” means
The customer
“I can’t get my work done right now.”
The engineer
Unreachable cluster, dead ingress controller, nodes failing health checks.
The telemetry
Pods healthy, traffic flowing normally.
Instead of debating the definition of “down,” I tried temporarily mirroring their phrasing and translating it into observable system behavior to see if our mental models matched: “I see the system is blocking you right now—when it goes down on your end, is the whole dashboard failing to load, or does it throw a 504 Gateway Timeout right after you trigger a heavy bulk export?”
Most of the time, they could authenticate and browse without issue, but a single worker pod was getting OOMKilled while processing their massive payload, causing the reverse proxy to drop that specific connection. Once we resolved the bottleneck, I learned to gauge their cognitive bandwidth. If the customer was simply rushing through a busy workday, correcting their nomenclature seemed counterproductive. However, if they appeared relieved and genuinely inquisitive, that felt like a good moment to gently bridge the lexical gap—explaining how an isolated worker exhausted its memory while the core infrastructure remained online, allowing our shared vocabulary to evolve organically.

Ambiguity cuts both ways

At the same time, this semantic ambiguity seems to cut both ways. Recognizing the fallibility of my own memory, I almost always default to questioning my own assumptions first. It is entirely plausible that my internal dictionary is flawed, or that both parties are applying equally valid definitions across different domains of discourse.

Same word, different layers

Consider a polysemous term like “endpoint.” In API development, when I say “endpoint,” I typically conceptualize a specific URI route and HTTP verb—such as POST /v1/orders—designating a target resource. Yet to a network or security engineer, their lexicon might define an “endpoint” as the physical host, virtual machine, or client device terminating a network connection. It seems neither interpretation is erroneous; the exact same lexical label simply appears to map to different layers of the abstraction stack.

Stakeholders and interviews

This same dynamic seems to surface with stakeholders and in technical interviews. A manager requesting “real-time data sync” between an order system and a warehouse platform might prompt an engineer to envision Kafka streams, webhooks, and sub-second latency—whereas the stakeholder might merely be picturing an automated 15-minute cron job to eliminate manual CSV uploads. Similarly, an interviewer asking about “microservices” could be referencing dozens of isolated containers communicating over an event bus, or perhaps just three separate Go or Node.js repositories sharing a monolithic PostgreSQL database. Disambiguating their context upfront seems to help avoid spending twenty minutes answering an unintended question.
They say
One person pictures
Another person pictures
“Real-time data sync”
Kafka streams, webhooks, sub-second latency
A 15-minute cron job that ends manual CSV uploads
“Microservices”
Dozens of isolated containers on an event bus
Three Go or Node.js repositories sharing one PostgreSQL database
“The server is down”
An unreachable cluster
One export that times out
“Endpoint”
POST /v1/orders
A laptop terminating a connection

Collaboration as distributed computing

In many ways, human collaboration feels akin to distributed computing. As the adage goes, “If you want to go fast, go alone; if you want to go far, go together.” While no single processor can outpace a cluster, Amdahl’s Law suggests that four networked cores rarely achieve the theoretical throughput of four isolated cores pre-loaded with complete state. Because human teams don't seem to possess pre-loaded shared context upfront, it feels like we have to construct it dynamically—meaning we often spend substantial bandwidth on state synchronization and lexical alignment rather than pure execution.
S(N)=1(1−p)+pNS(N) = \frac{1}{(1 - p) + \dfrac{p}{N}}
What the formula says, in team terms
S(N) is the speed-up a team of N people can reach, and p is the share of the work that can truly run in parallel. Everything else—syncing context, aligning on words, waiting on each other—is the serial part (1 − p).
With p = 0.8 and four people, the ceiling is 1 / (0.2 + 0.8 / 4) = 2.5×, not 4×. Shrinking the coordination share raises the ceiling far more than adding another person does.

Still learning

Minimizing that coordination overhead—and remembering to audit my own assumptions before correcting others—is something I am still learning day by day. I stumbled onto this friction years ago in support, and I feel I am still nowhere near mastering it, just constantly trying to refine how to align with people a little faster and more empathetically.
No ratings yet

0 comments

More from Thanh Trung Le

All posts