Hey — I offer hands-on AI coaching for dev teams. I spend a day or two pairing with your engineers in your codebase, teaching them Cursor, Claude, Copilot, and the workflows that actually stick. No slides, no theory — just real work on real code. Your team leaves confident and shipping faster. Let's chat
Published
3 min read

Trevor I. Lasn

Builder, founder, based in Tartu, Estonia. Been coding for over a decade, led engineering teams, writing since 2015.

Make It Work First Before Optimizing

Users don't care how elegant your code is. They care if it solves their problem.

I once worked on a project where we spent days optimizing our database queries. We shaved milliseconds off response times. Our code was a thing of beauty. There was just one tiny problem: The core feature didn’t actually work.

Oops.

We’d gotten so caught up in making things fast that we forgot to make sure they worked in the first place. It’s a classic rookie mistake, but I’ve seen senior devs fall into this trap too.

So let’s talk about why you should focus on making your code work before worrying about making it fast.

The Siren Song of Optimization

Look, I get it. Optimization is sexy. There’s something deeply satisfying about seeing those performance metrics improve. It feels like real engineering.

Imagine walking into a meeting and saying, “I improved our algorithm efficiency by 400%.” Sounds a lot sexier than, “I made sure the ‘Submit’ button actually submits things.”

But here’s where it gets tricky:

  • Premature optimization is a time sink: I once spent three days optimizing a function, only to realize later that it was called maybe once a week. Total time saved? Microseconds. Time wasted? Days.
  • It can introduce new bugs: In my quest for speed, I’ve accidentally broken working code more times than I care to admit. Optimization often means making code more complex, and complexity breeds bugs.
  • It can mask bigger issues: Focusing on making things fast can distract you from asking if you’re building the right thing in the first place.

Don’t get me wrong - optimization is important. But it’s like a turbocharger for your car. Really cool, but utterly useless if the engine doesn’t run in the first place.

A Tale of Two Developers

Meet Alice and Bob. They’re both tasked with building a new feature for their company’s app.

Alice dives right in. She writes messy, unoptimized code, but within a day, she has a working prototype. It’s slow, it’s clunky, but it works.

Bob, meanwhile, spends that first day researching the most efficient algorithms for the task. He meticulously plans out his data structures. His code is a marvel of efficiency… but after a week, the feature still isn’t functional.

Who do you think their boss is happier with?

The Power of Working Code

Here’s why Alice’s approach is often better:

  1. Faster feedback: With a working prototype, Alice can get user feedback immediately. Maybe the feature isn’t even needed!
  2. Easier debugging: It’s simpler to fix bugs in simple, straightforward code.
  3. Clearer optimization targets: Once the code works, Alice can profile it to see where optimization is actually needed.
  4. Motivation boost: Nothing kills motivation like spending weeks on something with no visible progress.

But What About Technical Debt?

I can hear some of you screaming, “But what about technical debt? Won’t we just have to rewrite everything later?”

Maybe. But here’s the thing: You don’t know what parts of your code will need optimization until you have a working system. Premature optimization isn’t just the root of all evil - it’s a waste of time.

This ties into a broader question: when should you actually worry about technical debt?


Found this article helpful? You might enjoy my free newsletter. I share dev tips and insights to help you grow your coding skills and advance your tech career.


Check out these related articles that might be useful for you. They cover similar topics and provide additional insights.

Reflections
3 min read

Good Enough Is a Strategy

Your competitors will eat your lunch while you refactor

Nov 19, 2025
Read article
Reflections
3 min read

Take Your Writing Seriously

It’s not just about getting the message across; it’s about doing so in a way that’s easy for others to follow. Good writing shows respect for your team and your work.

Sep 19, 2024
Read article
Reflections
5 min read

Advice to New Engineering Managers

Tips for being an effective engineering leader and how to avoid common pitfalls

Feb 15, 2025
Read article
Reflections
7 min read

Evolve or Become Irrelevant

Why staying relevant in tech means constantly adapting to new technologies and trends

Sep 15, 2024
Read article
Reflections
4 min read

Why I Value Firebreak Sprints for Managing Technical Debt

How scheduled developer freedom weeks can revolutionize your codebase and team morale

Apr 8, 2025
Read article
Reflections
6 min read

High Performing Engineer Teams = motivation + enthusiasm + autonomy

Create the conditions where engineers want to excel and they'll surpass your expectations

Mar 7, 2025
Read article
Reflections
2 min read

Don't bullshit

Be the authentic voice in a world of manufactured personas

Feb 12, 2025
Read article
Reflections
3 min read

When Tasked with a Problem, Start with the Bigger Picture

When faced with a challenge, I always step back to see the whole picture first. It's like pausing a complex strategy game to study the map. You might lose a few seconds of play time, but you gain a crucial understanding of the battlefield.

Oct 3, 2024
Read article
Reflections
4 min read

Build Your Army

If you want to do great things, you'll need people with skills that complement yours. You can't do everything yourself. You need a team. You need an army. You need to build your army.

Oct 4, 2024
Read article

This article was originally published on https://www.trevorlasn.com/blog/make-it-work-first-before-you-optimize. It was written by a human and polished using grammar tools for clarity.