You Are Not Paid to Write Code. You Are Paid to Solve Problems.

by Eric Hanson, Backend Developer at Clean Systems Consulting

The Reframe That Changes Everything

Your team spent two weeks building a sophisticated caching layer with Redis Cluster, cache warming logic, and a custom eviction policy. The page load went from 800ms to 180ms. Engineering was proud of it. Then someone asked: what was the user complaint we were solving? Turns out users were abandoning a checkout flow — but not because of page load. They were confused by the address form. Conversion didn't move.

Two weeks of solid engineering work, zero business impact.

This is not a story about wasted effort. It is a story about what the job actually is. You are not paid to write elegant code. You are paid to change outcomes. Code is the tool, not the product.

Why This Distinction Gets Blurry

Most engineering organizations reward visible, measurable technical output: features shipped, PRs merged, velocity maintained. The feedback loop between "what did we build" and "did it matter" is often weeks or months long. So engineers optimize for what gets measured and recognized in the short term — code quality, architectural decisions, technical sophistication.

This isn't malicious. It's rational. But it creates a subtle drift where engineers become focused on the craft of software to the exclusion of the purpose of software.

The drift shows up in a few recognizable patterns:

  • Spending a sprint refactoring code that no user will ever notice because it offended your sense of design
  • Building a generic, extensible system to solve a problem that only has one known use case
  • Choosing a technology because it's interesting to work with rather than because it's the right fit
  • Arguing over whether to use gRPC or REST when the actual bottleneck is the database query taking 4 seconds

None of these are bad in isolation. All of them are problematic when the underlying problem — the one a real user or business process depends on — hasn't been solved yet.

What Problem-First Thinking Looks Like in Practice

Before writing a line of code, the question to answer is: what changes in the world if this works perfectly?

This sounds abstract but it's very concrete in practice. For a given ticket or project:

  • What user behavior is this expected to change?
  • What business metric does success move?
  • How will we know, in two weeks, whether this worked?

If you can't answer these questions, the requirements are not ready and you should not be writing code yet. This is not the product manager's problem to solve alone — this is your problem too, because you're the one who will build the wrong thing if the question isn't answered.

The Simplest Solution Is Often Not Code

Some of the highest-leverage interventions an engineer can make involve not writing code at all:

  • Discovering that a "feature request" is actually a workaround for a bug that already exists and can be fixed in twenty lines
  • Recognizing that a proposed microservice decomposition will add distributed systems complexity to a problem that a SQL query with a proper index already solves
  • Pointing out that a scheduled job that processes data nightly could be replaced by a database trigger, eliminating an entire service
-- Proposed solution: a Python service that polls for unpaid invoices
-- every 5 minutes, updates status, sends notifications.
-- Actual solution that doesn't require deploying or maintaining anything:

CREATE EVENT update_overdue_invoices
ON SCHEDULE EVERY 5 MINUTE
DO
  UPDATE invoices
  SET status = 'overdue'
  WHERE due_date < NOW() AND status = 'pending';

The engineer who proposes the SQL event is not doing less work — they're doing better work. They solved the problem with the minimum surface area necessary.

The Trap of Technical Elegance

There is a real tension here. Code quality matters. Architecture matters. Technical debt is real and has real costs. None of that is wrong.

The trap is treating technical quality as the goal rather than a constraint. Good engineers hold both: they solve the actual problem and they solve it in a way that doesn't create a mess for the next person. But when forced to choose between a beautiful solution that ships late and a messy solution that ships on time, the correct default is to ask whether the problem is urgent enough to warrant shipping the messy solution now and cleaning it up later — with a specific plan for when "later" is.

What is never correct is shipping a beautiful solution to the wrong problem.

The Practical Takeaway

Before you start your next significant piece of work, write one sentence that describes what changes in the world — not in the codebase — if you succeed. Keep it somewhere visible while you're working. When you're three days in and arguing about whether to use an abstract factory or a builder pattern, read that sentence. Ask whether the argument you're having affects the outcome in that sentence.

If it doesn't, make the simpler choice and get back to the problem.

Scale Your Backend - Need an Experienced Backend Developer?

We provide backend engineers who join your team as contractors to help build, improve, and scale your backend systems.

We focus on clean backend design, clear documentation, and systems that remain reliable as products grow. Our goal is to strengthen your team and deliver backend systems that are easy to operate and maintain.

We work from our own development environments and support teams across US, EU, and APAC timezones. Our workflow emphasizes documentation and asynchronous collaboration to keep development efficient and focused.

  • Production Backend Experience. Experience building and maintaining backend systems, APIs, and databases used in production.
  • Scalable Architecture. Design backend systems that stay reliable as your product and traffic grow.
  • Contractor Friendly. Flexible engagement for short projects, long-term support, or extra help during releases.
  • Focus on Backend Reliability. Improve API performance, database stability, and overall backend reliability.
  • Documentation-Driven Development. Development guided by clear documentation so teams stay aligned and work efficiently.
  • Domain-Driven Design. Design backend systems around real business processes and product needs.

Tell us about your project

Our offices

  • Copenhagen
    1 Carlsberg Gate
    1260, København, Denmark
  • Magelang
    12 Jalan Bligo
    56485, Magelang, Indonesia

More articles

How to Build Trust With a Client You Have Never Met in Person

Remote work removes the in-person trust-building signals that most professional relationships rely on. The contractors who succeed at distance learn to replace those signals with something better.

Read more

Metrics and Alerts in Microservices: What You Should Actually Be Watching

Most microservices monitoring setups track the wrong things: CPU and memory dashboards while missing error rate spikes and latency degradations that users are experiencing right now. Here is what actually matters and how to alert on it.

Read more

How to Avoid Misunderstandings With Remote Clients

Remote work can make communication tricky. Here’s how to keep your projects clear and clients on the same page.

Read more

How to Spot a Failing Software Project Before It Begins

“We haven’t even started yet… so why does this feel risky?” That gut feeling is often your first — and best — warning sign.

Read more