About 40 to 45 percent of what we programmers do every day is something we do on autopilot: brushing our teeth, getting a cup of coffee in the morning, opening our emails the moment we sit at our work desk, and many other things. These habits save us a lot of time and energy in our day-to-day lives and are very important for the overall quality and achievement of our daily tasks.
Facebook CEO Mark Zuckerberg has the habit of wearing the same clothes to work every day, as he notices it helps him save up energy. “I’m in this really lucky position, where I get to wake up every day and help serve more than a billion people. And I feel like I’m not doing my job if I spend any of my energy on things that are silly or frivolous about my life.”
Microsoft founder Bill Gates does the dishes every night, as this habit can reduce stress, boost creativity, and help the brain to wander and engage in creative problem-solving.
Stephen Covey wrote a book called The 7 Habits of Highly Effective People, which has sold over 25 million copies. This book is about developing the core set of values and ideas that help you solve personal and professional problems with an integrated and principle-centered approach. It is a classic book that has helped many people improve their lives, and I believe software developers can also benefit from it. Software developers are employed and in high demand because of their ability to turn ideas into reality and solve real-life problems.
The following habits can further enhance that ability and make it a lot more effective.
1) Be Proactive
There are many events that happen in everyone’s lives. There are things that you cannot control and cannot do much about.
You may live in a country where you are not allowed to go abroad to make use of a very compelling job offer because of visa issues. The company that you work for might go bankrupt. Your manager could get angry easily, so you are always scared to express your thoughts about important issues on your team. You may not be allowed to use test-driven development because your team leader thinks it takes too much time, though you try your best to convince them that it is a very effective long-term strategy.
If you want to be an effective programmer, you should not focus on things that are out of your control. Rather than blaming society and hating your job, you should take a proactive approach. Invest your energy and effort in things you can control.
You should show up to work on time so you don’t have to feel guilty the rest of the day for missing the daily scrum meeting with other team members. You should learn new concepts and technologies, instead of spending countless hours on mindless browsing when you do not have any tasks assigned. You need to read new books, watch tutorials, and participate in developer conferences. You should write blog posts and contribute to open source projects in your free time to help others.
You need to be in the pursuit of continuous learning and improvement. In the words of Henry David Thoreau, “I know of no more encouraging fact than the unquestionable ability of man to elevate his life by conscious endeavor.”
You should not let things that are out of your control take most of your attention. You need to focus on things that are within your influence. You need to be proactive to form new great habits.
2) Begin with the End in Mind
Effective programmers usually have very compelling goals in mind about their future selves.
Gates and his business partner Paul Allen set the goal to put a computer in every home. Zuckerberg said he wanted to use Facebook to make the world more open. John Sonmez set the goal of retiring at the age of 35.
Imagine if you were at your funeral, where your family, friends, and teammates praised you with emotional speeches. What would you want them to say about you? How would you like to be remembered? What contribution or legacy do you want to leave?
These questions can remind you about your core values, which can help you understand what is really valuable and important to you.
Be proactive about your life. Program your life.
Envision your future self and the things that you want to have in your life. You cannot hit a target you cannot see. It is imperative for you to set clear goals of where you are headed toward and what you really want in your life. Compelling goals inspire massive action.
Try to reverse engineer and set goals and milestones that you think will move you toward that end.
Set yearly goals that really inspire you to work toward them—goals that are in alignment with your values. Make them measurable and break them down into quarterly, monthly, and weekly goals. Do weekly reviews about where you currently are and where you need to be to hit your goals. Identify what is working and what needs to be improved. Be honest with yourself and ruthlessly cut off activities, routines, or relationships that are holding you back. Keep planning, executing, and reviewing.
3) Put First Things First
We live in the time of distractions, where it is very hard to resist the countless emails or Facebook and Slack messages that we receive on a regular basis. They may represent an important part of our work, as we need to understand the requirements before we start with the implementation.
Still, there may be occasions where our attention and energy is depleted by unnecessary interruptions, which will not only take us a lot of time but also increase our levels of guilt and stress. We may then start to wonder why we were not able to finish what we were supposed to do.
You may have many tasks to work on, and as times goes by, new ones may pop up out of nowhere. While you’re working on an important feature that needs to be implemented, all of a sudden there is a critical bug on production.
You are thus in a constant battle between choosing what to work on and what trade-offs to make. Covey said it clearly that, “Most of us spend too much time on what is urgent and not enough time on what is important.” He further explained, “The key is not to prioritize what’s on your schedule but to schedule your priorities.”
Obviously, not every task has the same type of importance and urgency. Covey mentioned the order that we should follow to be the most effective:
1) Important and Urgent
2) Important and Not Urgent
3) Not Important and Urgent
4) Not Important and Not Urgent
If you want to be an effective programmer, you need to make the most of your time by putting first things first on your agenda. You need to become a leader and manage your agenda according to the above ordering schema.
As Covey said, “The main thing is to keep the main thing the main thing.”
There are many books and articles that mention “time management.” In reality, you cannot manage time. You can manage only your priorities.
Prioritizing can seem difficult, as you may be afraid of missing out on other things. However, once you are used to doing it consistently and see the benefits and the emotional rewards that it brings, it gets easier and very pleasurable.
4) Think Win-Win
Whether or not you are the only developer working on a project, you must not let your ego cause you to think only of yourself. For developers, ego is the worst enemy.
Some developers tend to think win-lose, in which others have to lose for someone to win. You think you are going to get promoted or get a raise if your colleagues look bad in front of your manager. As a result, you will orient your actions toward showing off as much as you can, taking credit without merit, or belittling your colleagues, all to represent yourself as more superior.
This will not only give you a superficial type of contentment (as you are continuously trying to belittle your colleagues), it’ll also probably damage your team productivity as a whole, as you and your colleagues will not be willing to work together at all.
If you want to be an effective developer, you need to set yourself apart from what the majority of people are doing. In every situation, you should try to reach the best alternative for the whole team.
You should think about mutually beneficial solutions that will ultimately lead to a better long-term resolution, rather than if only one person in the situation gets their way.
Cultivate the habit of asking yourself questions like: “What’s in it for them that I can also benefit from? How can we both get some portions of what we want without damaging our relationship?”
You may sometimes have misunderstandings and short tempers with your colleagues, but this does not mean that the harmony and the relationships you have will be destroyed. Your ability to deal with people is one of the key areas in your life.
Avoid arguments as much as you can and focus on long-term benefits. When you begin with the end in mind, you do not want to be alone, even if you reach your biggest goals.
5) Seek First to Understand, Then to Be Understood
Communication is one of the most important skills that we need to have. We spend most of our time communicating.
We communicate with our family before we go to work. We communicate with our neighbors on the street while traveling. We communicate with our teammates, clients, and customers more than we write code.
We read technical books and learn how to use Docker and develop Graph Application Programming Interfaces (APIs), but hardly anybody has even mentioned to us the importance of listening to and understanding others. If we want to have healthy team collaboration, then we need to understand our fellow team members.
We usually look more at our smartphones than in the face of our colleagues who have been dealing with a problem for a very long period of time.
If we want to be effective programmers that lift up each other, we need to use empathic listening and genuinely understand our colleagues. This compels others to reciprocate the listening and be willing to be influenced by you.
Remind yourself that you are not capable of finishing great projects, and building your own products that can impact millions of people, on your own. Do not ignore your teammates. Be the person who helps them consistently, whether that is with a work task or a soft skill. When you try to explain a concept to someone else, or help them solve a problem, you actually learn it better yourself. Teaching helps your learning.
This, as a result, will not only make you and others feel good and important, as your words and listening matter to others, but it will also create an atmosphere for caring and helping each other. Empathy can be a software developer’s superpower.
There is no doubt that large projects are developed by a lot of people that work as a team.
Gates started Microsoft with Allen, who even came up with the name Microsoft. Elon Musk created his first IT company Zip2 with his brother Kimbal, and he then sold the company to AltaVista for $307 million in cash and $34 million in securities. Instagram was initially started by Kevin Systrom and Mike Krieger.
Amazon has about 341,000 employees. Microsoft has more than 120,000 employees. Google, after tons of research on building the perfect team, has found that some of the most productive teams were the ones with an environment that cultivated synergy and embraced psychological safety.
Harvard Business School Professor Amy Edmondson describes psychological safety as “a sense of confidence that the team will not embarrass, reject, or punish someone for speaking up.” Everyone has the freedom to contribute, collaborate, and get involved in everything they want.
Whenever you find yourself part of an argument with a colleague, try to understand their core interest. Address them so that they become reciprocally beneficial and productive.
In this way, your team can be a lot more productive by taking advantage of the strengths of every member. Teamwork is greater than the sum of its parts.
If you want to be an effective programmer, try to help your team become more synergetic. That can be done by valuing every teammate’s freedom and helping them feel very comfortable expressing different points of view without the fear of embarrassment. Allow everyone to contribute to and collaborate on everything they find interesting and worth contributing and paying attention to.
7) Sharpen the Saw
Imagine you look at a colleague who is stuck and stressed out, because they are not able to finish a task and have not slept in the past two days. They do not have a deadline, but they are just very eager to finish their work, so they aren’t prioritizing sleep. You advise them to take some rest because you feel sorry for them. “I am too busy with programming,” they may respond.
This may be an exaggeration, but it isn’t that far from the truth. More often than not, we get so caught up in the day-in and day-out business of life that we rarely step back and ponder about our lives. We are trapped in the “busyness” so much that we do not even try to find any time to sharpen the saw.
According to Covey, sharpening the saw means renewing ourselves, in all four aspects of our nature. These dimensions are physical, mental, social/emotional, and spiritual.
We need to work out and eat healthy to improve ourselves physically. Sonmez, the best-selling author of two programmer-related books, has two-hour workout sessions three times a week.
We must master the fundamentals such as data structures, algorithms, and design patterns; code challenging tasks; read other people’s code, new books, and blog posts; and contribute to open source projects to improve ourselves mentally. My mentor, Dain Miller, even suggests reading more books rather than writing more code.
We need to be helpful and feel empathy for our colleagues and cultivate the synergic spirit to improve ourselves socially and emotionally.
We need to grow and contribute to renew ourselves spiritually. These represent some of the rarest needs that we need to meet. We need to grow personally and professionally. Jeff Kaufman (who works at Google), together with his wife, donate up to 50 percent of their annual income to effective charities. We do not need to work at Google to give, and giving does not mean only by financial means. Contributing to open source projects or teaching others by writing articles are other examples of giving.
We must try to always keep a balance between all these aspects because an imbalance might otherwise be created. We may pretend that any imbalance is not that painful, but it can be in the long run.
Covey suggested targeting one hour per day for focusing on sharpening the saw. We must remind ourselves that sharpening the saw represents a marathon, not a sprint. As Abraham Lincoln said, “Give me six hours to chop down a tree and I will spend the first four sharpening the axe.”
Establish Effective Habits
Many developers who are really good at their craft share some common habits that we can all learn from. I believe success leaves clues, and that we can all get a lot better when we have something that can be emulated and that has proven to be effective.
If you want to become an effective programmer, first you have to decide to do so. As Covey said, “I am not a product of my circumstances. I am a product of my decisions.” Excellence is not accidental but comes as a result of careful planning, hard work, and devoted dedication. As Aristotle said, “We are what we repeatedly do. Excellence, then, is not an act but a habit.”
Start to practice any of these habits and see for yourself how it goes.