Reader Settings

Font Size20px
20px

Blog Post

Before the Code

Vishesh Yadav
7/6/2026
5 min read
Before the Code

A keyboard is a strange object. Every key is ready to answer. None of them knows the question. That is also true of software engineering. We often believe that the difficult part is finding the answer, because answers have names. Binary search has a name. Dynamic programming has a name. Breadth-first search has a name. We can practice them. We can measure how quickly they arrive. We can compare one solution with another. But the question that deserves those answers usually arrives without a name. It appears quietly. It sits in a support ticket that nobody reads twice. It hides in a spreadsheet that someone updates every Friday. It waits in the extra click that thousands of users have stopped noticing because they have repeated it for years.

Learning data structures and algorithms trains the hands. The hands become confident. They know how to arrange memory, reduce complexity, and move through a graph without getting lost. This confidence is valuable. It saves time. It prevents waste. It gives shape to ideas. But hands can only build what the eyes have already seen. If the eyes miss the crack in the wall, the finest tools will repair the wrong place.

There are two kinds of satisfaction in engineering. One comes from making a solution elegant. The other comes from discovering that the solution was never needed. The first is visible in code reviews. The second is often invisible. Nobody celebrates the feature that was wisely never built. Nobody counts the bugs that disappeared because unnecessary software did not exist. Yet those decisions quietly shape the systems that survive.

Observation is a slower skill than programming. It does not improve by solving another hundred coding problems. It improves by noticing. By asking why a customer repeats a sentence in every meeting. By wondering why an experienced employee keeps a notebook beside an application that was supposed to simplify work. By watching where people hesitate before clicking a button. These moments are ordinary. They do not look like engineering. They are.

A programming problem usually begins after someone has described the problem. Development begins much earlier, when that description is still incomplete. The work is not to argue with the solution but to become suspicious of the question. Sometimes the question is too small. Sometimes it belongs to yesterday. Sometimes it is answering the needs of a process instead of the needs of a person. A fast solution cannot rescue a misplaced question.

This is why experience often changes the rhythm of an engineer. Early in a career, there is a desire to write. Later, there is a willingness to wait. Not because writing has become difficult, but because understanding has become more important. A few hours spent observing can remove weeks of implementation. Good code saves computation. Good observation saves construction.

Data structures and algorithms teach precision. Observation teaches direction. Precision without direction is capable of building remarkable things that nobody needs. Direction without precision leaves good ideas unfinished. Software asks for both. One mind learns to solve. The other learns to see. The second is quieter. It receives fewer certificates. It has no online judge, no score, no accepted submission. Its proof appears much later, when a product feels obvious to the people who use it.

Perhaps that is the real difference. The problem-solving mind measures the distance between a question and its answer. The development mind measures the distance between reality and the question itself. Most engineering effort happens in the first distance. Most engineering value begins in the second.