JP Morgan Chase JP Morgan Chase / Technical Craft

The Feature I Built Perfectly — For the Wrong Problem

Sometimes the highest-impact engineering decision is realizing that the best solution isn't more software—it's a better process.

The Fellowship6 min read
Illustration representing solving business problems

One of the earliest lessons I learned as an engineer had nothing to do with algorithms, system design, or writing cleaner code.

It was this:

A beautifully engineered solution to the wrong problem is still the wrong solution.

The frustrating part is that you rarely realize you’re solving the wrong problem while you’re building it. In fact, it usually feels like you’re doing exactly what a good engineer is supposed to do.

That was certainly true for me.


It Started With an Excel File

Early in my career, our business partners shared requirements with engineering through Excel files.

There wasn’t a strict template. Some sections were well structured, others weren’t. People inserted comments wherever they felt appropriate, columns changed over time, rows shifted, and occasionally an important business requirement was hidden inside a paragraph in a merged cell.

From an engineering perspective, it looked like chaos.

Naturally, my first thought wasn’t “Can we improve this process?”

It was:

“I can automate this.”

And honestly, it sounded like the perfect engineering problem.


The Solution Felt… Smart

I started building parsers that could read these Excel sheets and transform them into a cleaner, standardized document that engineering teams could work with comfortably.

The parser validated fields, rearranged sections, interpreted different layouts, and generated a document that looked far more organized than the original input.

At the time, I was genuinely proud of it.

It felt elegant.

It reduced manual work.

It automated something repetitive.

It was exactly the kind of project that makes engineers feel productive.


Then the Edge Cases Started Appearing

The first few Excel files worked well.

Then another team sent their version.

Then another.

And another.

Each one looked just different enough to break one of my assumptions.

A column had been renamed.

Someone inserted an extra row.

A requirement that usually appeared in one section suddenly appeared somewhere else.

Some teams merged cells. Others didn’t.

Every new file introduced another exception, another validation rule, another special case that had to be handled.

Before long, what started as a simple parser had quietly grown into something much larger.

I wasn’t maintaining a utility anymore.

I was maintaining a product.


The Real Problem Wasn’t Technical

Oddly enough, the growing complexity wasn’t what bothered me the most.

The code still worked.

The real issue was something I hadn’t considered when I started.

The moment my parser generated the “official” engineering document, it became responsible for interpreting the business requirements correctly.

If the parser misunderstood something because the Excel sheet was ambiguous, the mistake belonged to engineering.

If it accidentally skipped a requirement buried in an unexpected location, the mistake belonged to engineering.

If two teams interpreted the same template differently, the parser had to somehow choose the right interpretation.

In trying to simplify everyone’s work, I had unknowingly made myself accountable for every inconsistency in the input.

That wasn’t a technical burden.

It was a process burden.


I Had Optimized the Wrong Thing

Looking back, this is the part that stands out most to me.

I had spent weeks making an inconsistent input easier for engineering to consume.

But I had never stopped to ask a much simpler question.

Why is the input inconsistent in the first place?

It sounds obvious now.

It certainly wasn’t obvious then.

Like many young engineers, I had been trained to solve problems with software.

So I saw software everywhere.


The Better Solution Required Less Engineering

Eventually, we stepped back and looked at the process instead of the code.

Rather than making the parser increasingly intelligent, we redesigned the intake template itself.

We worked with the business teams to define mandatory fields, standardize sections, remove ambiguity, and ensure that everyone submitted requirements in the same format.

Almost overnight, the complexity disappeared.

The parser no longer needed to guess where information might be hiding.

There were far fewer edge cases because the process itself had become predictable.

Ironically, the engineering solution became much smaller.

Not because we had written better code.

Because we no longer needed so much code in the first place.


Engineers Naturally Reach for Code

I don’t think this mistake is uncommon.

Engineering education conditions us to think in terms of implementation.

We see something repetitive.

We automate it.

We see complexity.

We abstract it.

We see manual effort.

We write software.

Those instincts are incredibly valuable.

But they’re only valuable after we’ve correctly identified the problem we’re trying to solve.

Otherwise, we’re just becoming exceptionally good at solving the wrong thing.


One Question I Ask Myself Now

Whenever I catch myself designing an elaborate solution, I force myself to pause and ask a question that has saved me countless hours.

“If I wasn’t allowed to write any code, how would I solve this?”

Sometimes the answer is surprising.

Maybe the process needs to change.

Maybe the documentation is unclear.

Maybe two teams simply need to agree on a common template.

Maybe one meeting would eliminate weeks of engineering effort.

Those answers don’t feel particularly technical.

But they often create far more value than another thousand lines of code.


Something College Rarely Teaches

In college, the problem statement is fixed.

You aren’t expected to question it.

Your job is to implement the solution.

Industry is different.

Very often, the problem statement itself is incomplete, ambiguous, or based on assumptions that nobody has challenged.

Learning to ask “Are we solving the right problem?” is just as important as learning “How do we solve it?”

In fact, I’d argue it’s the more valuable skill.


Looking Back

I’m still proud of that parser.

It taught me a great deal about automation, edge cases, and designing reliable software.

But if I had to solve the same problem today, I probably wouldn’t begin by opening my IDE.

I’d begin by opening a conversation.

I’d sit down with the people sending those Excel files and understand why the process looked the way it did. I’d ask what information was genuinely essential, what caused confusion, and whether everyone could agree on a better intake format.

Only after that would I think about writing code.

Because experience has taught me something I didn’t appreciate as a young engineer.

The best engineers don’t just build great solutions.

They make sure they’re solving the right problem before they build anything at all.

Sometimes the highest-impact engineering decision is realizing that the best solution isn’t more software—it’s a better process.

We run sessions on exactly this — walking students through the various the mental model they should have for everyday industry problems, live.

Talk to us about bringing one to your campus →