How to Become an Effective Software Engineer?

Reynald
12 min readMar 7, 2021
Photo by Thought Catalog on Unsplash

As a software engineer, the question of what makes an effective software engineer has always been on my mind. I always thought working more hours would produce more value. The harder we worked, the more value we could produce, and the more likely it would make your company successful. I want to make a meaningful impact, but I couldn’t help but wonder, Was putting in 60- to 80-hour weeks really the most effective way of ensuring your company's success? The intentions were sound, but could we have worked smarter? Could we have reduced some of that effort and achieved the same impact, or possibly even more?

I’ve come to learn that working more hours isn’t the most effective way to increase output. In fact, working too many hours leads to decreased productivity and burnout. Output may even turn out to be negative when it’s necessary to repair the mistakes made by overworked and fatigued software engineers.

So what makes an effective software engineer? Intuitively there are some notions of which engineers we consider to be effective. In a nutshell they’re the people who get things done. They’re the ones who ship products that users love, launch features that customers pay for, build tools that boost team productivity, and deploy systems that help companies scale. Effective software engineers produce results, get things done efficiently, and they focus on value and impact — they know how to chose which results to deliver.

Mastering Effectiveness helps you determine where to focus your time and energy so that more of your effort translates into impact.

Most of the time effectiveness is always overlooked by software engineers. In fact, it was a pretty much high-level skill that difficult to master, and for some people being an effective software engineer is a determination point that distinguishes junior and senior software engineer. One effective software engineer can worth tenth times of an average software engineer. Each year a new wave of software engineer talent would come into the industry. If you don’t start mastering effectiveness you will be drowned with the new wave of talents.

Alright, we all know how valuable an effective software engineer is, but how can I start to become one? To be an effective software engineer first and foremost you have to Adopt The Right Mindset. With the right mindset you would fundamentally prepare yourself against anything. Throughout this article, I have written three key important takeaways that will help you become an effective software engineering and will be explained in detail further.

Focus On High Leverage Activities

What is Leverage in the first place?

Leverage is defined by this simple equation.

leverage equation

To put it another way, leverage is the return on investment (ROI) for the effort that’s you put in. An effective people aren’t the ones trying to get more things done by working more hours. They’re the ones who get things done efficiently — and who focus their limited time on the task that produces the most value. And therefore leverage is the measurable unit to determine how effective your activities are.

But why leverage is so important?

The answer is because time is your most limited resource. Unlike other resources, time cannot be stored, extended, or replaced regardless of your goals. No matter who you are, at some point in your career you’ll realize that there’s more work to be done than time available, and you’ll need to start prioritizing.

Another way to thinking about leverage is the infamous Pareto Law 80–20 Rule. 80% of the impact comes from 20% of the work. That 20% compromises the high leverage activities, activities that produce a disproportionately high impact for a relatively small time investment. An effective software engineer uses this simple equation as their central, guiding metric for determining how and where to spend their time. And focusing on high-leverage activities would amplify your limited time and effort to produce much more impact.

Based on the principle of leverage, it’s clear why a good engineering team would prioritize high-leverage activities. Pointing out a useful UNIX command could save minutes or hours on basic tasks. Reviewing code early and thoroughly to catch common errors could remove the need to re-address similar issues later and prevent bad habits from forming. Teaching new hires how to prioritize different projects to complete or skills to learn could easily increase their productivity. Planning good starter projects that teach core abstractions and fundamental concepts could improve her software designs and reduce further maintenance requirements.

How can I increase my leverage?

In essence, there are three questions you should ask yourself about any activity you’re working on:

  • 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 that I could spend my time on that would produce more value?

To increase your leverage ask yourself these questions, each of which leads to a different avenue of potential improvements. For example, if you have a one-hour meeting that you scheduled with your team to review your team progress on a project, you can increase your meeting leverage by:

  • 1) Defaulting to a half-hour meeting instead of a one-hour meeting to get the same amount done in less time.
  • 2) Preparing an agenda to set meeting goals and circulating them to attendees beforehand so that the meeting is focused and more productive.
  • 3) If an in-person discussion isn’t actually necessary, replacing the meeting with an email discussion and spending the time building an important feature instead.

As you can see in the example above, there are three approaches you can take to increase the leverage of your time spent. When you successfully shorten the time required for an activity, increase its impact, or shift to a higher-leverage activity, you become a more effective software engineer.

Just as a lever lets you apply a small amount of force over a long distance to generate a much larger force, so too do many high-leverage activities require consistent applications of effort over long time periods to achive high impact.

— Edmond Lau

Learn How to Optimize Your Learning

Adopt a Growth Mindset

Believe it or not, how we view our own intelligence, character, and abilities profoundly affect how we lead our lives. It largely determines whether we remain stuck in our current situations or achieve what we value. That’s what Stanford psychologist Carol Dweck concludes in her book Mindset, written after 20 years of researching people’s self-perceptions and beliefs.

People with fixed mindset believe that “human qualities are carved in stone” and that they’re born with a predetermined amount of intelligence — either they’re smart or they’re not. They tend to give up early and easily, on the other hand, those with a growth mindset believe that they can cultivate and grow their intelligence and skills through effort. They may initially lack aptitude in certain areas, but they view challenges and failures as opportunities to learn. As a result, they’re much less likely to give up on their paths to success.

Invest in your rate of learning

Learning works the same as interest, the rate of learning also compounds. The more you learn, the easier it is to apply prior insights and lessons to learn new things. Here the three takeaways for learning :

  • 1) Learning follows an exponential growth curve. Knowledge gives you a foundation, enabling you to gain more knowledge even faster. For example, an understanding of recursion provides the basis for many other concepts, like trees, and graph searches, which in turn are necessary for understanding compilers and network topologies.
  • 2) The earlier that you optimize for learning, the more time your learning has to compound. A good first job, for example, makes it easier to get a better second job, which then affects future career opportunities.
  • 3) Due to compounding, even small deltas in your own learning rate make a big difference over the long run.

What will you learn today to improve yourself by 1%? That 1% is a high leverage investment to develop the skills and the knowledge to make use of future opportunities. Mutual funds and bank accounts build your financial capital, but learning builds your human and career capital. You would rather invest your financial assets in accounts that pay high-interest rates, not low ones. So why would you treat your time — your most limited asset — any differently? Invest your time in activities with the highest learning rate.

Seek Work Environments Conducive to Learning

Because we spend so much of our time at work, one of the most powerful leverage points for increasing your learning rate is our choice of work environment. Some work environments are more conducive than others for supporting a high personal and professional growth rate. Here are six major factors to consider when choosing a new job or team :

  • Fast Growth
    At fast-growing teams and companies, the number of problems to solve exceeds available resources, providing ample opportunities to make a big impact and to increase your responsibilities. It also makes it easier to attract strong talent and build a strong team, which feeds back to generate even more growth. A lack of growth, on the other hand, leads to stagnation and politics. Employees might squabble over limited opportunities, and it becomes harder to find and retain talent.
  • Training
    Strong onboarding programs demonstrate that the organization prioritizes training new employees. Any team that understands the value of ramping up new hires as quickly as possible will invest in creating an onboarding program. Similarly, a solid mentorship program also indicates that the team prioritizes professional growth.
  • Openness
    A growing organization can continuously learn and adapt from past mistakes. Look for culture of curiosity, where everyone is encouraged to ask questions, coupled with a culture of openness, where feedback and information are shared proactively.
  • Pace
    A work environment that iterates quickly provides a faster feedback cycle and enables you to learn at a faster rate. Lengthy release cycles, formalized product approvals, and indecisive leadership slow down iteration speed, automation tools, and willingness to experiment accelerate progress. At startups, aggressive risk-taking and oftentimes longer hours can contribute to an increased learning rate — as long as you don’t burn out. Do push yourself, but also find a pace that’s sustainable for you in the long run.
  • People
    Surrounding yourself with people who are smarter, more talented, and more creative than you means surrounding yourself with potential teachers and mentors. Who you work with can matter more than what you actually do, in terms of your career growth and work happiness.
  • Autonomy
    The freedom to choose what to work on and how to do it drives our ability to learn — as long as we have the support that we need to use that freedom effectively. At established companies, employees tend to work on specialized projects, but they also have access to more coaching and structure. At smaller companies, you’ll end up wielding significantly more autonomy over the total surface area of product features, and responsibilities, but you’ll also need to take more ownership of your own learning and growth.

These factors vary from company to company and from team to team, and their importance to you will also change during the course of your career. Onboarding and mentoring are more important earlier in your career, and autonomy matters more later on. When switching teams or jobs, make sure you consider these factors and find out if they are a good fit, and offer you ample learning opportunities.

Dedicate Time on the Job to Develop New Skills

Most of the time as a software engineer we feel overwhelmed by how much you need to get done at work. They feel that their task list keeps growing and growing and that they’re falling further and further behind. They spend all their energy trying to catch up and don’t devote enough time to developing the skill that could actually help them work more effectively.

One of the good examples is to borrow a lesson from Google 20% Innovation Policy. If you didn’t know, Google pioneered an idea where engineers spend the equivalent of one day a week on a side project to make the company better. At first, 20% time was a controversial proposal; people doubted it would improve the company. In fact, the investment empowered engineers to create and launch products like Gmail, Google News, and AdSense — which now comprise three of Google’s core offerings. Furthermore, many companies like Atlassian also starting to adopt similar innovation policies.

If your company does have this kind of policy, you should carve out your 20% time on one or two-hour chunks each day rather than in one full day each week, make it a daily habit to improve your skill. Your productivity may decrease at first or may not change much, but the goal is to make investments that will make you more effective in the long run.

But what should I do with that 20% time? Here are some suggestions to take advantage of the resources available to you at work

  • Study code for core abstractions written by the best engineers at your company
    Read through your company codebase of the core libraries written by your early engineer. Ask yourself if you would’ve written a similar code and how you might learn from their examples. Understand why certain choices were made and how they were implemented.
  • Write more code
    If you feel that programming is your week point, try to leverage other activities like meetings and product design, and spend more of it building and coding. Since actively programming expends more effort than passively reading code, you’ll find that practicing the craft is a high-leverage activity for improving your programming skill.
  • Go through any technical, educational material available internally
    If your company has resources you can learn like codelabs, documentation, learning material, tech talk, etc. Make use of them as learning opportunities.
  • Master the programming languages, that you use
    Read a good book or two on them. Focus on developing a solid grasp of the advanced concepts in that language, and gain familiarity with core language libraries. Make sure that at least one of your languages is a scripting language you can use as your Swiss army knife for quick tasks.
  • Send your code reviews to the harshest critics
    Optimize for getting good and thoughtful feedback rather than for lowering the barrier to getting your work checked in. Ask for a more detailed review on those implementations you’re not as confident about. Discuss software designs with your company’s best designers in order to avoid writing great code for a design that doesn’t work well.
  • Enroll in classes on areas where you want to improve
    These could be courses offered by your company, a nearby university, or through online educational initiatives. Many of the larger companies will even pay for your classes.
  • Work on a diversity of projects
    It’s going to be hard to pick up new skills when you working on similar tasks using similar methods. Interleaving different projects can teach you what problems are common across projects and what might just be artifacts of your current one. Moreover, it will make you prepared to tackle unfamiliar problems.
  • Jump fearlessly into code you don’t know
    Fear by failure often holds us back, causing us to give up before we even try. But the practice of digging things you didn’t know would make you better at programming.

Locate learning opportunities outside of the workplace

Learning isn’t limited to the workplace. Some skills we learn outside of work could be cross-functional and help our engineering work. Some might not translate directly into engineering benefits, but the practice of adopting a growth mindset toward them still makes us better learners and more willing to stretch beyond our comfort zone. This itself is a high-leverage investment. Research shows continual learning is inextricably linked with increased happiness.

There are many ways to learn and grow in whatever you love to do. Here is some example to help inspire a habit of learning outside of the workplace:

  • Learn new programming languages and frameworks
  • Invest in skills that are in high demand.
  • Read books
  • Join a discussion group
  • Attend talks, conferences, and meetups
  • Build and maintain a strong network of relationships
  • Follow figures who teach
  • Write to teach
  • Tinker on side projects
  • Pursue what you love

More importantly than any of these individual suggestions, is embracing a growth mindset in which you’re motivated to learn about the things that excite you. By adopting a growth mindset and optimizing for learning, you’ll be prepared to make the most of whatever opportunities do come your way.

Being an effective software engineer was never a run, it was a marathon. Having knowledge of leverage and optimizing learning doesn’t necessarily make you an effective software engineer in one night. The practice requires consistent applications of effort over long time periods to achieve high-impact. I hope this writing can help you become an effective software engineer.

This post was a few chapter summaries from a book named “Effective Engineer” written by Edmond Lau. What I wrote here only 1/5 of the book, and there are much more takeaways you can get from the book. As a software engineer myself, I encourage you to read the book.

--

--

Reynald

I am a fullstack web developer from Indonesia.