The 42 Principles · Principle XXXVII

Solve Real Problems

Prioritization, scope, user needs, problem selection, opportunity cost, and refusing to optimize what does not matter.

Foundational Truth

Not every problem deserves a solution.

Some deserve observation.

Some deserve acceptance.

Some disappear on their own.

The discipline of engineering is not solving every problem you discover.

It is solving the problems that matter.

Time is finite.

Attention is limited.

Every hour spent solving the wrong problem is an hour unavailable for solving the right one.

The hardest engineering decision is often choosing what not to build.


Beware the Rabbit Hole

Engineers love puzzles.

It's part of what makes us good at what we do.

We enjoy understanding systems.

Finding edge cases.

Improving efficiency.

Optimizing performance.

The danger comes when curiosity quietly becomes distraction.

One small issue leads to another.

Then another.

Eventually you've spent three days solving a problem that almost nobody experiences.

Meanwhile...

The issue affecting every customer remains untouched.

Curiosity is valuable.

Discipline decides where curiosity belongs.


Scope Creep Begins with Good Intentions

Few projects begin by saying,

"Let's make this unnecessarily complicated."

Scope creep usually sounds much more reasonable.

"While we're here..."

"It shouldn't take long..."

"We might as well..."

"It could be useful someday..."

Every one of those sentences adds another requirement.

Another dependency.

Another test case.

Another support document.

Another maintenance responsibility.

Eventually the original problem becomes almost impossible to recognize.

The project didn't fail because the team lacked talent.

It failed because they forgot why they started.

Every new feature should earn its place by solving a real problem.


Ask Better Questions

Before solving any problem...

Ask yourself:

Who experiences this?

How often?

What happens if we do nothing?

Is this actually the root cause?

Does solving this improve the outcome in a meaningful way?

What problem are we really trying to solve?

Those questions often reveal something surprising.

The obvious problem isn't the real one.


Elegance Is Not the Goal

Engineers naturally appreciate elegant solutions.

Beautiful architectures.

Clever algorithms.

Perfect abstractions.

Those things have value.

Only if they solve the right problem.

The simplest solution that completely solves a meaningful problem will almost always outperform the most elegant solution to an insignificant one.

Customers rarely admire elegant code.

They appreciate products that improve their lives.

Never confuse technical beauty with customer value.


Measure Success by Outcomes

A feature shipped.

A dashboard built.

An API optimized.

None of those automatically represent success.

Success asks a different question.

Did someone's experience improve?

Did work become easier?

Did risk decrease?

Did understanding increase?

Did the customer accomplish something they couldn't before?

If the answer is no...

The problem may never have needed solving.


Closing Thought

Engineers possess a remarkable ability to solve difficult problems.

Wisdom determines which ones deserve that effort.

Stay curious.

Remain disciplined.

Never lose sight of the reason you began.

Don't become famous for solving problems nobody actually had. Become trusted for solving the ones that truly matter.

Protect the Problem You Came to Solve

Every project should begin with a clear problem.

Not a technology.

Not a feature.

Not an architecture.

A problem.

Something is too slow.

Something costs too much.

Something is unreliable.

Someone is performing unnecessary manual work.

A customer cannot accomplish something they need to accomplish.

That problem gives the project direction.

Once work begins, however, you will discover other things.

You always do.

Some will be important.

Some will be interesting.

Some will be genuinely broken.

That still does not mean they belong in this project.

Discovery identifies problems. Scope decides which ones you are solving.


Finding Something Does Not Create an Obligation to Fix It

This can be difficult for engineers.

We are naturally problem solvers.

If we see something broken...

We want to fix it.

If we find inefficient code...

We want to refactor it.

If we notice an old configuration...

We want to modernize it.

If we discover an architectural weakness...

We want to redesign it.

That instinct is valuable.

Uncontrolled, it is also one of the easiest ways to destroy a project's scope.

You were asked to replace a leaking faucet.

You discovered the plumbing is old.

Then you noticed the water heater could be more efficient.

While investigating that, you realized the electrical panel should probably be upgraded.

Three weeks later, the house is under renovation...

And the faucet is still leaking.

Engineering projects can fail exactly the same way.


"While We're Here" Is Expensive

There are three words that should immediately make every project manager and engineer pay attention.

"While we're here..."

While we're here, let's upgrade the framework.

While we're here, let's redesign authentication.

While we're here, let's replace the database.

While we're here, let's rewrite that service.

While we're here, let's add another integration.

Every suggestion may be perfectly reasonable.

Together they can turn a two-week project into a six-month project.

Scope creep rarely arrives carrying a sign that says:

UNNECESSARY COMPLEXITY AHEAD.

It arrives disguised as opportunity.


Define What Done Means

One of the best defenses against scope creep is defining success before work begins.

What problem are we solving?

What outcome demonstrates that it has been solved?

What is explicitly outside the scope?

How will we measure success?

When can we confidently say,

"We're done"?

Without those answers, projects expand indefinitely because there is no boundary against which new ideas can be evaluated.

"Done" should not mean:

"We cannot think of anything else to improve."

There will always be something else to improve.

Done means:

The problem we agreed to solve has been solved to the standard we agreed upon.

That is enough.

Ship it.

Learn from it.

Then decide what deserves attention next.


Create a Parking Lot

Rejecting scope creep does not require ignoring good ideas.

Record them.

Create a backlog.

Open another issue.

Add the observation to the documentation.

Create a future improvement project.

I have discovered plenty of valuable problems while solving completely different ones.

The mistake would be believing I had only two choices:

Fix it immediately...

Or forget about it.

There is a third option.

Preserve the discovery without allowing it to interrupt the current mission.

That simple discipline protects both ideas.

The current project gets completed.

The new problem receives the attention it deserves later.


Severity Does Not Equal Relevance

Sometimes the problem you discover is more serious than the one you were originally solving.

That requires judgment.

If you discover an active security compromise while investigating printer performance...

The printer can wait.

Scope is not sacred when circumstances materially change.

But that should be an intentional decision.

Stop.

Evaluate.

Communicate.

Change the scope deliberately.

Do not allow the project to drift silently.

There is a tremendous difference between:

"We discovered a critical issue and intentionally changed priorities."

and:

"Somehow we ended up rebuilding half the environment."

The first is judgment.

The second is uncontrolled scope.


Do Not Invent Future Customers

Another source of unnecessary work begins with two dangerous words:

"What if..."

What if someday we need ten million users?

What if a customer wants to deploy this on six operating systems?

What if someone needs seventeen authentication providers?

What if we eventually expand internationally?

Some future planning is responsible engineering.

Designing entire systems around imaginary requirements is not.

Solve today's real problem while leaving reasonable room for tomorrow.

Do not build tomorrow's solution before tomorrow has told you what its problem actually is.

Design for change. Do not pretend you can predict every change.


Complexity Must Justify Itself

Every additional feature carries a cost.

Code.

Testing.

Documentation.

Security.

Support.

Dependencies.

Maintenance.

Training.

Every addition should therefore answer a simple question:

What real problem does this solve?

If nobody can answer clearly...

Stop.

Technical sophistication is not automatically value.

Sometimes the best architecture is boring.

Sometimes the best feature is the one you remove.

Sometimes the best code is the code you never write.


Curiosity Needs Boundaries

I never want engineers to stop exploring.

Curiosity is one of the qualities that makes great engineers great.

But professional engineering requires directing that curiosity toward an outcome.

Investigate enough to understand the problem.

Follow evidence far enough to identify the cause.

Then solve it.

You do not have to understand every strange thing you encounter along the way.

Some mysteries can remain mysteries.

If they do not affect the outcome...

They may not deserve today's time.


Know When to Stop

There is a point in every project where another hour of work produces almost no meaningful improvement.

Recognizing that point is a skill.

Perfection can become another form of scope creep.

One more optimization.

One more feature.

One more refactor.

One more test.

One more dashboard.

At some point, the system already solves the problem.

Let it.

Engineering resources are finite.

There is another real problem waiting somewhere else.


Closing Thought

Good engineers discover problems everywhere.

Great engineers know which ones deserve their attention now.

Protect the scope.

Record worthwhile discoveries.

Change direction deliberately when evidence requires it.

And never confuse something interesting with something important.

You do not owe every problem a solution. You owe the right problems your full attention.

Prioritization Is Judgment

Engineering is not only the ability to solve problems.

It is the ability to decide which problems deserve attention first.

That distinction becomes more important as responsibility grows.

A junior engineer may be given one issue.

A senior engineer may be balancing ten.

An architect may be weighing problems that affect entire systems, teams, customers, and budgets.

At that level, technical skill alone is not enough.

Judgment becomes the scarce resource.

The more problems you are capable of solving, the more important it becomes to choose the right ones.


Urgent Is Not Always Important

Some problems are loud.

Alerts fire.

Customers call.

Dashboards turn red.

Executives begin asking questions.

Those problems feel urgent.

Sometimes they are important too.

Sometimes they are simply noisy.

Other problems are quiet.

A backup has never been restored.

A certificate will expire in six months.

An undocumented dependency is slowly becoming critical.

A manual process consumes hundreds of hours every year.

Nobody is calling.

Nothing is flashing red.

The problem still matters.

Engineering judgment means learning to distinguish between urgency and importance.

If we only respond to what is loudest, the quiet risks eventually become emergencies.


Interesting Is Not the Same as Valuable

Engineers are naturally attracted to interesting problems.

A strange packet capture.

An obscure performance anomaly.

An undocumented API behavior.

A fascinating edge case.

Those investigations can teach us a tremendous amount.

But learning something interesting does not automatically create customer value.

Sometimes the right decision is to stop.

Record what you found.

Preserve enough information to return later.

Then go back to the problem that actually matters.

Curiosity should expand our understanding.

It should not quietly replace our priorities.


Possible Does Not Mean Necessary

Technology creates endless possibilities.

We can add another dashboard.

Another integration.

Another automation.

Another security layer.

Another feature.

Another abstraction.

The question is rarely whether something can be built.

Given enough time and money, almost anything can.

The better question is:

Should it exist?

Every new capability carries a lifetime of consequences.

Support.

Documentation.

Testing.

Security.

Training.

Maintenance.

Dependencies.

Upgrades.

Retirement.

Possibility is not justification.

Value must justify complexity.


Solve the Constraint

Sometimes organizations work incredibly hard without improving the outcome.

They optimize components that are already fast enough.

Automate tasks that were never significant.

Redesign interfaces nobody complained about.

Build features customers never requested.

Activity increases.

Progress does not.

This is where earlier Principles become important.

Measure What Matters.

Complexity Is a Cost.

Every Dependency Has a Price.

The same question connects them all:

What is actually limiting the outcome?

Solve that.

Then measure again.


Know the Cost of Delay

Prioritization is not only about the value of solving something.

It is also about the cost of waiting.

A cosmetic issue may remain harmless for months.

A security vulnerability may not.

A slow manual process may cost hundreds of hours over a year.

An unreliable backup may become catastrophic tomorrow.

Ask:

What happens if we do nothing today?

Tomorrow?

Six months from now?

The answer often reveals priority more clearly than the problem itself.

A problem's importance is sometimes best measured by the cost of leaving it unsolved.


Protect Finite Attention

Every team has limited capacity.

Every engineer has limited attention.

Every hour invested somewhere is unavailable somewhere else.

That makes prioritization an ethical responsibility as much as an operational one.

When leaders repeatedly send teams after low-value work, they are not merely wasting money.

They are consuming human attention that could have been used on something meaningful.

The opportunity cost is real.

Solve Real Problems means respecting that cost.


Avoid Solution Looking for a Problem

New technology creates excitement.

A new framework appears.

A new AI model launches.

A new cloud service promises remarkable capabilities.

Immediately someone asks:

"How can we use this?"

That is often the wrong first question.

Begin with the problem.

If the new technology genuinely provides a better solution, use it.

If not, admiration is not a business requirement.

Technology should serve the problem.

The problem should never be invented to justify the technology.

Do not build a problem around a solution you wanted to use.


Outcomes Define Priority

A useful way to rank work is to ask what changes when the work is complete.

Does reliability improve?

Does risk decrease?

Does the customer save meaningful time?

Does revenue increase?

Does support become easier?

Does someone gain a capability they genuinely need?

If the outcome is difficult to describe, the work may be difficult to justify.

Technical activity is easy to measure.

Meaningful impact is harder.

Measure the impact anyway.


Saying No Is Part of Engineering

Good engineers learn how to build.

Experienced engineers learn when not to.

Sometimes the most valuable contribution you can make is:

"No."

Not because the idea is bad.

Because it is not important enough right now.

Not because the feature has no value.

Because another problem has greater value.

Not because the technology isn't interesting.

Because curiosity alone does not define the mission.

Saying no protects the team's ability to say yes to what truly matters.


Questions to Ask Yourself

  • What problem are we actually solving?
  • Who experiences it?
  • How often does it occur?
  • What happens if we do nothing?
  • Is this urgent, important, interesting, or merely possible?
  • What more valuable work will be delayed if we pursue this?
  • Are we solving a constraint or decorating the system?
  • Are we introducing technology because it helps, or because we want to use it?
  • What measurable outcome changes when this work is complete?
  • Is this still the problem we originally agreed to solve?

Closing Thought

Engineering capacity is precious.

Spend it deliberately.

Solve the problems that materially improve outcomes.

Preserve interesting discoveries without letting them hijack the mission.

Say no when necessary.

Change priorities when evidence demands it.

And remember that the ability to solve everything does not create an obligation to try.

Maturity is not solving every problem you can find. It is knowing which problems are worth solving at all.

Founder's Commentary

The Rabbit Hole Will Always Be There

I have gone down more technical rabbit holes than I could possibly count.

Sometimes they were necessary.

Sometimes they uncovered something important.

Sometimes I learned something valuable that helped me years later.

And sometimes...

I spent hours solving a problem nobody actually had.

That is one of the dangers of being curious.

Engineers are trained to notice things that don't look right.

A strange log entry.

An unexpected route.

A process using more memory than expected.

An old configuration nobody remembers creating.

A database query that could probably be faster.

Something catches your attention and you think,

"That's odd."

Those two words have probably consumed more engineering hours than anyone will ever calculate.

Because once I know something doesn't make sense...

I want to understand why.

That instinct has served me extremely well throughout my career.

It has also taken me down some very long roads.

Experience has taught me that curiosity needs a partner.

Discipline.


The Problem Can Change Without Anyone Noticing

Scope creep doesn't always happen because someone keeps adding requirements.

Sometimes the engineer does it to themselves.

You start troubleshooting one problem.

During the investigation, you discover something else.

The second issue is interesting, so you investigate it.

That exposes a third.

The third leads to an old configuration.

The old configuration points toward another system.

Several hours later, you suddenly realize something important.

You aren't working on the original problem anymore.

Nobody changed the scope.

There wasn't another meeting.

Nobody approved additional work.

The problem simply changed while you were following the evidence.

I've done it.

Most experienced engineers probably have.

The important lesson isn't that you should never follow an unexpected clue.

Sometimes that clue is exactly what leads to the root cause.

The lesson is to periodically stop and ask:

Am I still solving the problem I came here to solve?

That question has saved me from plenty of unnecessary work.


Not Every Broken Thing Is Your Current Problem

This was difficult for me to learn.

If I find something broken, my instinct is to fix it.

That sounds responsible.

Sometimes it is.

But large environments contain thousands of things that could be improved.

Old configurations.

Technical debt.

Outdated documentation.

Inefficient processes.

Temporary solutions that somehow became permanent.

If every discovery becomes part of the current project, nothing ever gets finished.

Eventually I learned to separate two thoughts:

"This should be fixed."

and:

"I should fix this right now."

Those are not the same statement.

A problem can be completely legitimate and still belong in another project.

Document it.

Create the ticket.

Tell the appropriate person.

Preserve what you discovered.

Then return to the mission.

Recognizing a problem does not automatically make it the problem you are responsible for solving today.


Don't Invent Problems to Justify Solutions

Technology makes this particularly tempting.

Engineers love new tools.

I do too.

A new cloud service appears.

A new automation platform.

A new framework.

A new AI capability.

A new security product.

And immediately our minds begin imagining what we could build with it.

There is nothing wrong with exploring technology.

Exploration is how we learn.

But production engineering should begin somewhere else.

With a real problem.

I don't want to invent a business requirement because I found an interesting technology.

I want to understand the business requirement and then determine which technology solves it best.

Those approaches may eventually arrive at the same tool.

But the reasoning matters.

One begins with value.

The other begins with fascination.

I have learned to ask myself:

"Would I still recommend this solution if I weren't excited about the technology?"

If the answer is no...

I probably need to think about it again.


Sometimes Good Enough Really Is Good Enough

Engineers don't always like that phrase.

"Good enough" can sound like lowering standards.

That isn't what I mean.

A system should be reliable enough.

Secure enough.

Fast enough.

Recoverable enough.

Documented enough.

Tested enough.

Enough must be defined by the actual requirement.

If a database query completes in 200 milliseconds and the application requires anything below one second, spending three days reducing it to 80 milliseconds may accomplish absolutely nothing meaningful.

Technically, I improved it.

Operationally, nothing changed.

The customer cannot tell.

The business cannot tell.

The application cannot tell.

I simply made a number smaller.

There may be circumstances where those 120 milliseconds matter.

If they do, optimize them.

If they don't...

There is probably another problem somewhere that deserves those three days more.

That isn't laziness.

That is prioritization.


Critical Discoveries Are Different

There is an important exception.

Sometimes the rabbit hole contains a dragon.

You begin investigating one problem and discover something materially more serious.

A security compromise.

A failing storage system.

A broken backup strategy.

A data integrity issue.

Something capable of causing significant harm.

At that point, continuing with the original scope simply because "that was the ticket" would be ridiculous.

Stop.

Communicate.

Evaluate the risk.

Change priorities deliberately.

The important word is deliberately.

I don't object to changing scope.

I object to allowing scope to change without anyone realizing it happened.

There should be a moment where someone can say:

"We discovered new information. Based on that information, this is now the more important problem."

That's engineering judgment.


Finish Something

There is another reason I have learned to protect scope.

Finishing matters.

A half-finished brilliant solution provides less value than a completed practical one.

Organizations accumulate unfinished projects surprisingly easily.

Each started with good intentions.

Each acquired another requirement.

Then another dependency.

Then another improvement.

Eventually the project became too expensive, too complicated, or too difficult to complete.

I've learned to respect the power of a clearly defined finish line.

Solve the problem.

Validate the outcome.

Document what matters.

Deliver it.

Then move on to the next problem.

There will always be another one.

I promise.


Curiosity Is Still One of My Greatest Tools

None of this has made me less curious.

I hope it never does.

Curiosity has been responsible for some of the most important things I've learned throughout my career.

It has helped me understand systems nobody could explain.

Find root causes buried several layers beneath the obvious symptom.

Discover technologies I later depended upon.

And ask questions other people weren't asking.

I don't want to eliminate rabbit holes.

I simply want to know why I'm entering one.

Sometimes I enter because the evidence says the answer is down there.

Sometimes because the potential risk justifies the investigation.

Sometimes because I deliberately want to learn.

Those are all good reasons.

But I no longer want to emerge three days later carrying the perfect solution to a problem nobody asked me to solve.


Solve What Matters

As engineers become more capable, an interesting thing happens.

The number of problems we can solve becomes much larger than the number of problems we have time to solve.

That means technical ability eventually stops being the primary constraint.

Judgment becomes the constraint.

Where should I spend my time?

What matters most?

What happens if I don't fix this?

Who benefits if I do?

What am I delaying by choosing this instead?

Those questions have become more important to me with every year I've spent in technology.

Because there will never be enough time to fix everything.

There will never be enough money to build everything.

And there will never be enough engineers to investigate every mystery.

So choose carefully.

Stay curious.

Follow evidence.

Change direction when reality demands it.

But remember why you started.

A great engineer can solve difficult problems. A wise engineer makes sure they are the right problems first.


Related Principles

Continue the idea.

These Principles share themes with Principle XXXVII.