In my time in the tech field, I have learned that it really doesn’t matter what tools or languages you know. During your tenure in the field, you will pick up and discard multiple tools/languages. The things that will stay with you throughout your journey is:

  • the lessons you learned along the way
  • your perspective
  • your approach

These three things are some of the things that make experienced engineers so desirable. We have all heard the saying, “If all you have is a hammer, everything looks like a nail.” The same logic applies to being an engineer.

You can pick up a new language or tool without issue, but knowing the right tool for the job is a lot harder.

With that in mind, I wanted to share some of the important things I have learned in over 10 years that can help accelerate your growth as an engineer.

Establish patterns

What does “establish patterns” mean? It means don’t just fix today’s problem, fix tomorrow’s too. I briefly searched the internet and here is how Wikipedia describes it:

In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context

Before we explain this further, lets give a real world example:

“I am having issues running code on my laptop/workstation because X isn’t installed or the right version.”

I can imagine we have all have had this happen at some point or another. Maybe:

  • a coworker is using a different version of a library/binary
  • a new dependency was added and you forgot to install it
  • you are a new hire and trying to figure out how to get an application working.

The “common sense” solution would be to install or upgrade whatever is throwing an error right?

That approach would only fix the immediate problem. Perhaps, other dependencies are missing on your laptop. Even if the problem is fixed for today, there are no guarantees it won’t happen the next time someone updates the code base. Every time you hire a new engineer, they’ll have to go through the same pain as well.

Instead, what could you do that would fix the problem permanently? Something that wouldn’t only address the immediate problem but prevent it from happening to you or anyone else.

You could build a runner or docker image that would automatically install all of your dependencies/tools/scripts etc… Every time you run the container, you will get a consistent experience. If your coworker adds a new dependency, it will get installed automatically. If you hire a new engineer, they can download the container and immediately start adding value. We have not even mentioned the fact that code can run differently based on your OS. With a container, everyone is using the same OS. If this container is an application, it also means that everyone is developing on the same image that will ultimately run in Production!


This example seems really easy and straight forward once you are presented with the answer, but many people today are still running npm install or brew install X on their local machines.

#code #engineering #devops #programming

How to Think Like an Engineer
1.25 GEEK