Skip to content
Go back

Before implementing, understand the problem

A solution can work and still solve the wrong problem. Notes on context, reference projects, and engineering judgment before implementation.

Some tasks seem clear as soon as they arrive.

Build a pipeline. Automate a process. Deploy a few resources with Terraform.

You have done something similar before. There is code you can use as a reference, and you know the tools. So you open the repository and get started.

I have done it too.

The problem is that recognizing a task does not always mean understanding what it needs.

Similar execution, different purpose

On one occasion, I needed to automate an internal process.

Other processes ran in a similar way, so I followed the existing pattern. It seemed reasonable: use what we already had, stay consistent, and avoid inventing another way to do the same thing.

During review, something came up that I had not considered.

The processes I had used as a reference were part of the application’s operation. The new automation served a different purpose and needed to stay separate.

Technically, they looked alike. Architecturally, they had different responsibilities.

I had chosen where to put the solution before clarifying where it belonged in the system.

That changed the approach.

The code could work and still be in the wrong place.

An example carries decisions too

Reusing an existing solution can save a lot of work.

But that code ended up that way for a reason. It may serve a different scale, security constraints, several teams deploying to shared infrastructure, or problems our project does not have yet.

When we copy the code, we can carry those decisions with it.

A Terraform pipeline might include multiple environments, approvals, matrices, and dependencies between projects. All of that may make sense where it was built. In a different context, maintaining it can cost more than the problem we were trying to solve.

The opposite can happen too: simplifying something without understanding which protection we are removing.

So when I use a project as a reference, I try to understand what problem each part solved and which of those conditions apply to the new project.

Sometimes I end up with almost the same implementation. But now I know why.

Sometimes you need to step further back

Over time, I have also been asked to fix things and ended up asking why we still needed them.

The requirement seemed concrete: this is failing; fix it.

But after looking at its purpose, who used it, and what had changed around it, another option appeared: remove it.

We had started by looking for a way to maintain a piece that no longer needed to exist.

That work can be hard to show. There is no big implementation or new tool. The outcome might be less code and one fewer operational responsibility.

To me, that is also part of DevOps in practice: understanding the system well enough to decide what is worth maintaining.

Aligning on the approach is work too

After experiences like these, I have tried to make the approach explicit before investing too much in implementation.

What we want to achieve. Which constraints we have. Where the solution belongs. What it will be responsible for and who will own it.

Often, a short message and a concrete proposal are enough. When a decision affects other people, I would rather discuss it while changing direction is still easy.

That also means learning a different way of working.

The person who needs to review the approach may be busy. A response can take days. Work still needs to move forward in the meantime.

I can investigate an open question, validate an assumption, run a small experiment, or pick up another task. What I try to watch is how much work I build on a decision that is still open.

It also takes judgment to know when that conversation is necessary. A small, familiar, reversible change usually does not need the same alignment as introducing a dependency or changing how we deploy.

Understanding the purpose opens up options

When I only see the task, my options tend to stay within it.

If someone asks for a script, I think about how to write it. If I understand what they need to achieve with that script, I can consider other solutions: use something that already exists, change the workflow, reduce the scope, or remove the need altogether.

That is where I feel experience starts to matter.

Knowing the tools helps with execution. Understanding the purpose helps us choose what to execute and explain our decisions.

I think part of growing as an engineer is taking on that responsibility. Being able to propose a path, recognize what we still do not know, and seek context before committing the team to a solution.

I still have to remind myself sometimes, especially when a task looks a lot like something I have already solved.

That familiarity helps us get started quickly.

But before writing the first line, it is worth checking that we understand what we are trying to solve.

Practice the decisions

Related field notes


Newsletter

Get the next posts in your inbox.

Occasional notes on DevOps, platforms, reliability, and the real work behind production. No noise, only when there is something useful to share.

Unsubscribe whenever you want. I will not share your email.



Previous post
Not Every Timeout Needs Another Retry