The 8 habits of highly-effective developers

The 8 habits of highly-effective developers

Purpose

I’ve been in software development for more than 8 years, and have never been taught how to be an effective developer. My only hope was to somehow become a tech guru, but as I started to grow as a developer I also had to deal with clients, projects, epics, complex features, estimations, and that implied more than just understanding the technology I was working on.

The main purpose of this article is to share some of my learnings regarding best practices when it comes to becoming more effective as a developer.

We’ll go through the understanding of:

  • How we usually behave as developers.
  • Why focusing only on those habits is not enough.
  • The 8 desired habits to be more effective at developing solutions

Common habits of developers — The baseline

When people start building solutions for clients, I have seen a pattern in their habits, especially when they are less experienced:

  • Code and deliver fast. Not only must you code, but you have to do it as fast as possible.
  • Be as independent as possible. You should prove to the client they are dealing with the right person who knows how to do the work. "I have to be able to do it alone!".
  • Do what the client tells me. No questions asked. My clients needs to be heard, so everything he tells me should be done.

But, are those habits enough? Let's say your client wants to build the next Uber app in two weeks. Should we tell him 'yes' and start working as fast as possible? (We know how Uber works! It can’t be that hard). Or should we first be curious about why is he asking us that? Is it a good move? Are we able to do it on our own in two weeks? What should I tell him? It doesn’t look like an easy thing, nor a good move to me at a first glance.

From experience, if you only focus on those habits you may end up:

  • Feeling lost. No clear north.
  • Not being part of the project.
  • Disorganized.
  • Misaligned with the client.
  • Demotivated.
  • Leading to incorrect solutions.
  • Anxious and stressed.

The good news is, we can change! These three habits are fine, but they may need to be mixed with others to be closer to effectiveness.


The 8 habits explained

We are always so focused on delivering that we sometimes lose focus on solving things effectively. The following 8 habits are the ones that have helped me the most to become a more effective developer.

  1. Understand the values — Ask 'why'

When introduced to a problem to be solved (a project, an epic, feature, etc.), asking why will give you a better understanding about the big picture of what you will be working on and what for, so you can realize what things are important and what is not.

  • Why do you feel X is important?
  • What is the motivation behind ...?
  1. Ask questions

Sometimes not even the client knows what they want. Or perhaps our interpretation isn’t that aligned with the client’s expectations. Asking questions is vital to have a better understanding of what we’ll be working on, and to be more aligned with it. It also shows interest and engagement.

  • What are the deadlines for this feature/project?
  • What are the most valuable things about this feature/project?
  • What do you mean when you say that ...?
  • Can you be more detailed about ...?
  1. Give your point of view

We are developers. We were taught to be excellent at solving technical issues, and clients perhaps have no tech background. Make the client feel you know what you are doing by giving your point of view. This might grow with experience and time but is really important to show that you have a voice in this and you aren’t just a robot.

  • I feel this will be better if we do it this way, because ...
  • From my experience, this may be an issue when ... I suggest to ...
  • I like that idea of ...
  • What if we ...?
  1. Say no — Negotiate (if applies)

We tend to take the client’s needs as the source of truth, but sometimes, clients want to build software with bricks or build an app in a few days. So think smart, argue, understand the limits, and try not to overcommit. Do not rush to just say yes.

  • I feel that this work is risky given the timeframe because ... What if we ...
  • I believe doing X by hand will take too much time for the value that it adds. What if we use Y instead?
  • We won’t be able to commit to doing X given that tight timeframe. What if we focus on the most valuable first? Let’s ...
  • Let me think about that and get back to you.
  1. Understand the (coding) context of what I’ll be working on

Sometimes, as we are so committed to delivering fast, we forget about the context of the problem we need to solve. What’s already there? Make sure you understand the big picture and context to plan accordingly. And of course, ask questions if you need more clarification!

  1. Divide, order, and conquer!

Sometimes we might get overwhelmed with a big feature or project. Divide work into smaller tasks, focusing on one thing at a time, and order the tasks from most priority to least. You need to understand what adds more value and put it on top.

  1. Practice edge-case-thinking

We all know features are not that linear. At this point, having a good sense of the context, and the value of what we’ll be working on is always good to also open our minds and pay attention to details, thinking what other things can happen, what edge cases can we experience.

  1. Ask for help

Leave the ego/fear behind! Not looking for help usually blocks you or leads you to incorrect assumptions. You should be focused, and be as unblocked as possible to reach your goal.

  • Do you have one minute to help me with this?
  • Can you give me your point of view about ...?
  • I don’t understand this. Can you help me to figure it out?

Conclusion

Experience, practice, and will to improve are the key values to get to be an effective developer. So, you should be really involved in what you are trying to solve: understand it, make it as clear and organized as possible, and start with the most valuable pieces first. That implies having a bunch of conversations with your client and/or team: Devs, POs, PMs, etc.

Becoming an effective developer goes beyond becoming a tech guru, it also involves developing communication and planning skills.

I encourage you to practice these habits and explore others. This comes from my experience. What comes from yours?