Rob Dominguez

If you want to learn more about me, check out these posts. I've also got all my social links available right here.

← Blog

Understanding Is the Bottleneck: Why Slowing Down Makes You a Faster Developer

There's this moment—usually late at night, usually alone—when you open a file you wrote a few weeks ago and realize you have no idea what it's doing. It works. It's live. But it’s a mess.

You scroll. You squint. You follow a trail of nested functions and conditionals. You mutter to yourself: "What the f*** was I thinking?"

It's not that the code is broken. It’s that it’s hard to understand. And that’s the real cost.

“The greatest limitation in writing software is our ability to understand the systems we are creating.”
A Philosophy of Software Design

Fast Code is Forgettable

We love to celebrate “speed” in engineering. Fast iterations, fast deploys, fast fixes. But the truth is, most of the pain in software doesn't come from moving slowly. It comes from moving blindly.

Complexity creeps in quietly: A tweak here, a workaround there. Soon, what once felt smooth becomes opaque. Every change feels risky. Every addition feels like defusing a bomb.

Software doesn't rot. It calcifies.

Design the End First

I recently built a productivity tool called wtf. It transforms frustration into structure by turning messy, context-heavy Slack threads into organized and pointed Linear tickets.

The first thing I wrote wasn't the backend logic or Slack integration. It was the README.

Why?

Because writing the README forced me to think about how it should feel to both use the tool and — more importantly for the content of this post — how to contribute to it:

  • What's the simplest way someone should invoke it?
  • What information would they need to provide?
  • How do we make that obvious?
  • How do we make it easy to contribute?

Instead of designing from the inside out, I designed from the outside in.

This wasn't just shipping a tool; it was shipping clarity:

  • A one-line trigger (@WTF engine)
  • A CLI with guided prompts for easy contributions
  • A single command to run the dev environment with all services spun up

None of that happened by accident. It happened because I slowed down early, so we could go faster later.

Code is for People

“Complexity is what a developer experiences when trying to achieve a particular goal.”

This is the central argument of A Philosophy of Software Design. Complexity isn't about technical depth...it's about human friction.

The worst kind? The unknown unknowns: The parts of the system that surprise you; that aren't obvious; that force you to pause and say, “Wait… what?”

That's where obscurity lives. And obscurity is a design problem, not just a documentation one.

Empathy is how we fight back:

  • We write for the next dev making a commit.
  • We reduce dependencies.
  • We name things clearly.
  • We design flows that make sense before we implement them.

Put Your Ego in the Right Place

It used to be that I wanted to impress people with how clever my code was; be it nested functions, one-liners, implicit context. All stuff that felt “clean” but really just made me feel smart.

But the real flex is in writing something so straightforward and obvious that someone else can step in, extend it, or fix it without needing to Slack you.

I'm still proud of my code. But these days, I'm more proud when someone else contributes to a project and says, “Oh, that was easy to follow.” That's a development-high that's hard to top.

That's not just personal growth. That’s organizational efficiency. Clarity scales. Obscurity clogs things up. If your team is spending fewer hours reverse-engineering what you meant, they’re spending more hours shipping real value.

Slow is Smooth, Smooth is Fast

NB: I loved this quotation before Brad Pitt started using it in F1, whose cinematography is amazing, btw!

Slowing down doesn't mean shipping slowly. It means designing with intention. It means:

  • Thinking through your interface before writing logic
  • Writing the README before the API
  • Building tools and scripts that make onboarding seamless
  • Making the right path the easiest path

Because when code is clear, your team moves faster. When systems are obvious, debugging is faster. When onboarding is smooth, velocity increases.

You don't get that by coding tactically. You get it by designing strategically.

And that time you “wasted” writing a great README? It pays off tenfold when your teammate doesn't need to ask you what to do.

Takeaways

  • Clarity beats cleverness. Write for the human, not the machine.
  • Start from the end. If you can't describe how it's used, don't start building it.
  • Invest in empathy. Your future teammates (and your future self) will thank you.
  • Simplify with pride. Let your ego take pride in how easy you've made it for others.

The next time you're tempted to hack it together and “clean it up later,” remember: working code isn't enough. Understanding is the bottleneck. And smooth is fast.