by Luis Santiago

How to become an effective software engineer

When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on enterprise projects. There are many moving targets throughout the execution of a plan.

Clean code, tests, security, config files, performance, deployments, and many more variables commonly form part of the mental load required for successful completion of a project.

I was contemplating a paradox I have seen many engineers face: trying to stay up to date with the latest trends in this ever-changing software industry while delivering great value to the company I work for.

I was craving time outside Jira stories to dedicate effort to my growth.

And then I started seeking tools that could help me add tremendous value to my organization, maintain growth, and become effective.

Awareness About What Matters

My main source was mentorship from people in the technology industry. Especially, mentorship in book formats from authors like Gary Vaynerchuk, Cal Newport, and Edmund Lau.

I identified a pattern in their advice. It was awareness — deeply understand what matters and execute towards that goal. The identification of clear goals gives us opportunities to measure them. Self-awareness allows us to recognize the things we do best and also see our weaknesses.

“Accept your shortcomings, and strive to become more conscious of who you really are.” — Gary Vaynerchuk


In the book The Effective Engineer, Edmund Lau suggests leverage as a yardstick for effectiveness. Leverage is the return on investment for the effort that is put in. I see this as a generic definition of leverage. Combining Edmund Lau’s equation of leverage gives me a whole new perspective of its definition:

Edmund Lau’s definition of leverage.

Looking at the equation above I make sense of the parameters that influence the outcome of leverage.

Before I start developing code, I commonly have an idea of how the product implementation will produce impact to the business. Even after implementation, I can measure its true impact by tracking logs, usage, and adoption rate. This numerator, impact produced, is indirectly given to us.

The denominator is the parameter we have the most trackability over. Time invested is the value we can measure, before, during, and after execution. Putting in effort to keep this parameter to a minimum yields a higher leverage. This means higher return on investment (ROI).

In the case of software engineers, ROI could mean improving trust with business partners, higher rate of adoption, or reducing the time it takes to perform a certain task.

To achieve this, we have to get good at getting things done efficiently.

“Effective engineers are not the ones trying to get more things done by working more hours. They are the ones who get things done efficiently — and who focus their limited time on the tasks that produce the most value.” — Edmund Lau

In the book High Output Management, ex-CEO of Intel Andrew Grove shares three ways to increase leverage:

  1. Reduce the time it takes to complete a certain task
  2. Increase the output of an activity
  3. Shift to higher-leverage activities

And Edmund Lau complements them with three questions:

  1. How can I complete this activity in a shorter amount of time?
  2. How can I increase the value produced by this activity?
  3. Is there something else I could spend my time on that would produce more value?

I sometimes get laser-focused on a specific coding task. However, I find it beneficial to stop once in a while and ask myself these three questions. I see them as a pulse check for effectiveness.


The perspective of our own intelligence, character, and ability deeply affects how we lead our lives.

The adoption of a growth mindset is one of the most impactful concepts I have come across. Mostly because it is an effective tool for developing our confidence. There come times in which we feel the famous imposter syndrome creeping in. We might feel like our skills don’t line up with what “they” are looking for.

But when you adopt a growth mindset, you tell your story. You tell who you are, what skills you’ve built, what you are excited about doing next and why. Consciously recognizing areas of improvement and actively executing a plan of self-betterment. It means taking responsibility for each aspect of a situation that you can change.

Learning, just like invested money, also compounds:

  1. Knowledge gives you a foundation to gain more knowledge.
  2. The earlier you optimize for learning the more time your learning has to compound.
  3. Even small deltas in your learning rate can make a big difference in the long run.

Limit the Amount of Work in Progress

Checklists can improve outcomes. They are a tool used to reduce errors in many fields. Keeping a checklist helps me transfer all the effort of remembering what I have to do next from my mind to another place. This allows me to focus my brain power on problem solving and development.

Avoid context switching. Focus your undivided attention to one task at a time.

Any form of distraction, including working on multiple tasks at the same time, takes away from my ability to become effective. When possible, I apply deep work, a skill I learned from Cal Newport’s book Deep Work. I make a conscious effort to shut off all distractions and work on developing mastery.

Cal Newport defines Deep Work as:

“Professional activities performed in a state of distraction-free concentration that push your cognitive capabilities to their limit. These efforts create new value, improve your skill, and are hard to replicate.” — Cal Newport

Wrapping up

The practice of adopting a growth mindset toward new skills makes us better learners and more willing to stretch beyond our comfort zone.

Many times, I have felt excited about a new project idea. I think about the amount of value its implementation could add. Then I also think about all the things that could go wrong. I think about failure. I feel fear. I stop.

But with a growth mindset, I understand I must reach beyond that thinking cycle. I understand I am always learning. Just like a product in beta, always in progress. Always in a constant iteration. Then I keep moving onwards along my journey to effectiveness.