DEV Community

Aris Georgatos
Aris Georgatos

Posted on

Engineering Is Communication (And We're All Terrible At It)

You know that feeling when a service times out at 3am and you're scrolling through logs muttering "why won't you just talk to me?"

Here's the thing: it is talking. You just don't speak the language yet.

Every system you've ever built is just structured conversation. APIs negotiate. Services gossip. Databases hold grudges about schema migrations. And your team? They're doing the exact same dance, just with more coffee and worse error messages.

The best engineers I've worked with aren't just good at code—they're translators. They speak fluent machine and fluent human. And honestly? The human part is usually harder.


🤝 API Contracts = Trust (and we're all one broken promise away from chaos)

An API contract is sacred: "Send me this payload, I'll give you a response. Break the contract, and the whole system falls apart."

Your relationships work the same way.

When you tell your teammate "I'll review this PR by EOD," that's a contract. When you ghost them because "something came up," you've introduced jitter into the system. Do it enough times, and they stop asking you for reviews. They route around you. You become the unreliable service that everyone avoids.

Here's what's scary: broken trust compounds like technical debt.

One missed deadline? That's recoverable. But five missed deadlines mean people start padding their estimates around you. They stop being honest. They build workarounds. Suddenly you're the legacy service everyone's afraid to touch.

The fix: Treat commitments like SLAs. If you can't hit the deadline, communicate before the timeout. "Hey, I'm underwater—can we push this to tomorrow?" is a 100x better than silence. Renegotiate the contract before you break it.

And if someone does miss a deadline? Ask why. Maybe they're drowning. Maybe they're blocked. Maybe they don't know how to say no. Systems thinking applies to people too—find the root cause, not just the symptom.


🐌 Latency = Loneliness in Disguise

When Service B takes 5 seconds to respond, Service A sits there burning cycles waiting. Users rage-quit. Metrics tank.

In teams, latency looks like this:

  • PRs sitting unreviewed for 3 days
  • Messages left on read
  • "Quick questions" that take a week to answer
  • Decisions that never get made

But here's what we don't talk about: latency is isolating.

When you're stuck waiting for a decision, for a review, for someone to just acknowledge your work exists, you start to feel invisible. You lose momentum. You lose confidence. You start wondering if anyone actually cares about what you're building.

I've seen brilliant engineers go quiet because they felt like they were shouting into the void. They'd ship beautiful code and hear... nothing. No feedback. No "nice work." Just silence and another ticket assignment.

The fix: Reduce human latency the same way you'd optimize a slow query.

  • Review PRs within 24 hours—even if it's just "I see this, will review properly tomorrow"
  • Answer questions fast. A quick "I don't know but I'll find out" beats silence.
  • Acknowledge people's work. A "this is really clean, nice job" costs you nothing and means everything.

Speed isn't just about efficiency. It's about making people feel seen.


📋 Vague Requirements = Anxiety as a Service

You know what's worse than no documentation? Bad documentation that makes you feel stupid for not understanding it.

// TODO: make this work better
function doTheThing(data: any): any {
  // ???
}
Enter fullscreen mode Exit fullscreen mode

Vague requirements do the same thing to your brain:

  • "Make it more intuitive"
  • "Users should feel secure"
  • "Add some polish"

These aren't specs. They're Rorschach tests. And when you build something based on a vague requirement, you're not just guessing about the code—you're guessing about whether you're doing a good job.

This is where imposter syndrome breeds. When the target keeps moving because it was never defined, you can never hit it. You ship something. It's "not quite right." You iterate. Still not right. Eventually you start wondering if you're the problem.

The fix: Demand clarity, but do it kindly.

Ask: "What does done look like? What's the specific behavior we want?"

Not because you're being difficult, but because you're trying to build the right thing. And if the person giving requirements can't answer? That's not your failure—the requirement isn't ready yet.

Here's a radical idea: unclear requirements should block work the same way broken tests block deploys. Don't write code against any. Don't accept ambiguity as a starting point.

And if you're the one writing requirements? Be specific. Draw the picture. Show the flow. Your team isn't telepathic. Help them see what you see.


🛡️ Fault Tolerance = Creating Space for Human Beings to Be Human

A resilient system doesn't crash when one service fails. It retries. It logs. It degrades gracefully and keeps running.

A resilient team doesn't implode when someone makes a mistake.

But here's what actually happens on a lot of teams:

  1. Someone ships a bug
  2. The post-mortem feels like a trial
  3. The person stops taking risks
  4. Innovation dies quietly in a corner

We talk about "blameless post-mortems" but then someone says "how did this even get past code review?" and suddenly it's not so blameless anymore.

Here's what fault tolerance really means for teams:

  • Junior devs can ask "dumb" questions without getting laughed at
  • Senior devs can say "I don't know" without losing respect
  • Anyone can say "I messed up" and get support instead of shame
  • Failure becomes data, not a character judgment

I once worked with an engineer who refused to touch a critical service because they'd broken it once, two years prior. The system was fine—it had circuit breakers, alerts, rollback procedures. But the person had no fault tolerance. One failure, one public shaming, and they never recovered.

The fix: Build psychological safety like you build monitoring.

  • Celebrate failures that teach something valuable
  • Ask "what can we learn?" before "who did this?"
  • Make it normal to say "I need help"
  • Praise people for catching their own mistakes—that's a good circuit breaker

The teams that ship the fastest aren't the ones that never fail. They're the ones where failure doesn't feel like the end of the world.


💡 The Real Punchline: Engineering Is a Social Problem Disguised as a Technical One

I spent the first five years of my career thinking the hard part was the code.

Algorithms. Data structures. System design. Kubernetes. Microservices. Distributed consensus. All of it mattered.

But here's what actually made or broke every project I worked on:

  • Could we talk to each other honestly?
  • Did people feel safe admitting when they were stuck?
  • Were commitments honored or ignored?
  • Did anyone feel like their work mattered?

The systems we build reflect the teams that build them.

Show me a codebase with terrible abstractions and I'll show you a team that doesn't communicate. Show me a system with no monitoring and I'll show you a team that's afraid to look at failures. Show me a monolith that everyone's terrified to touch and I'll show you a culture where mistakes are punished.

Conway's Law isn't just about org charts—it's about trust, communication, and psychological safety encoded into every line of code.

The engineers who level up fastest? They learn both languages. They write code that communicates clearly. They talk to humans with the same precision they bring to their APIs. They understand that:

  • High latency kills systems and morale. Speed up responses.
  • Broken contracts kill trust. Keep your promises or renegotiate.
  • Vague schemas kill confidence. Define the spec clearly.
  • No fault tolerance kills culture. Make it safe to fail.

💬 Your turn:

What's the worst "human API failure" you've seen?

The PR that sat for two weeks? The requirement that changed five times? The time you felt completely invisible?

Drop it in the comments. Let's debug our teams the same way we debug our systems.


Want more posts on engineering culture and team dynamics? Follow me here on DEV!

Top comments (1)

Collapse
 
xwero profile image
david duymelinck

I like the message of the post, but the narration got tiresome pretty fast, so most of the post I just scanned through.
Try to find your own style, instead of copying the text form AI.