Skip to content

Edvins Antonovs

14 habits of highly productive developers book notes

I've recently finished re-reading this book written by Zeno Rocha for a second time. I enjoyed reading every chapter of this book. It's short, concise and straight to the point.

No matter of experience you have, I'm sure you will find something applicable to you. I wish I read it 8 years ago when I finished university.


1. Look for signal

Instead of FOMO (fear of missing out), we should practice JOMO (the joy of missing out), which is mostly about being happy and content with what you already know.

That’s why self-awareness is so important, you need to be able to identify what is the signal and what is just noise.

Accept the fact that you simply can’t learn everything. Remember, desires are endless; needs are limited. Accept the fact that newer is not always better. There are people working with ancient programming languages and still making a lot of money. Practice daily the subtle art of saying ‘no’. No to that newest library. No to that fancier platform. Say more ‘noes’ so you can say ‘yes’ to what really matters to you.

"Accept that you can’t learn everything, but you can learn enough to be effective. — Andy Osmani


2. Focus on fundamentals

“You can practice shooting eight hours a day, but if your technique is wrong, then all you become is very good at shooting the wrong way. Get the fundamentals down and the level of everything you do will rise.” ― Michael Jordan

If you want to become a painter, it’s essential that you learn some important fundamentals. Understanding colour theory will help you evoke different meanings, compositions, and moods. Understanding perspective will you with the placement of shadows and lightning. Understanding form will help you make objects appear three dimensional, giving them the illusion of volume. Understanding anatomy will help you draw characters with the right proportion and body structure. You don’t necessarily need all this knowledge to do your first painting, but I’m sure that you cannot become a great professional painter without knowing these topics.


3. Teaching equals learning

“Power comes not from knowledge kept but from knowledge shared.” ― Bill Gates

One way of truly knowing a concept or technology is trying to create a practical project. Another very effective method is when you try to explain it to someone else.


4. Be boring

Discipline. Consistency. Persistency. Those concepts are not sexy at all, but they are the key to playing infinite games.


5. Do it for your future self

Don’t try to be clever, try to code something to make your feel smarter, you don’t need to show off all the new tricks you learned. Just write readable code. Think about maintainability, and use meaningful names for your classes, functions, and variables. Next time you start developing, ask yourself this question: “Will the future me, understand the intention of this code?”.


6. Your 9-to-5 is not enough

“Don’t expect to be motivated every day to get out there and make things happen. You won’t be. Don’t count on motivation. Count on discipline.” — Jock Willink

Our regular jobs are probably not enough to show our full potential. What usually happens is that we are bound to the technology constraints of the company we work at. We have a determined set of languages, frameworks, and code styling we have to follow. Sometimes these technologies change and we have the opportunity to learn the new ones at work, but if you’re just starting your career, you’ll probably need to expand your horizon with other technologies free time.


7. Master the dark side

  1. Save time by better understanding the business.
  2. Prevent complex code. Don’t over-engineer.
  3. Better prioritise. Better business knowledge allows you to easier prioritise the micro-decisions you need to make when coding. You can anticipate which part is more important to spend time on. Besides, when you know what the most critical business functionalities are, you’ll be more likely to write high-quality code in that area, which will prevent future refactoring.

Remember, a person who knows how to code is power, a person who knows how to code and knows how business works is unstoppable.


8. Side projects

“Failure and invention are inseparable twins. To invent you have to experiment, and if you know in advance that it’s going to work, it’s not an experiment.” — Scott Galloway

  1. A side project means you will need to give up personal hours to work on the project, so the most important thing to ask yourself is: “Do I really enjoy this subject, field, type of work?”
  2. It takes time for a side project to gain traction, so the next thing you should ask yourself is: “Am I willing to spend at least 5 years working on this idea”?
  3. Having an idea is one thing, having the ability to execute that idea is completely different, so you should ask yourself: “Can I execute this idea fully by myself?”
  4. Saying “yes” to one idea, means saying “no” to a bunch of other ideas, so ask yourself: “Is this particular idea better than others I had in the past? Is there any other idea that could better use my time?”
  5. Understanding who you are building this solution for is vital. If you don’t know your audience, it’s highly unlikely that you will understand their needs, so ask yourself: “Do I personally experience this problem or am I solving it for someone else?”
  6. “Why am I excited about this idea now?”

9. Mario or Sonic?

Mario is always jumping from one place to the other. Mario is confident and strong, but most of the time he’s really just avoiding dangerous situations.

On the other hand, Sonic is always willing to face the biggest challenges he can encounter. If he was a programmer, he would be always looking for complex problems to solve and for the most cutting edge technologies to work with.

At the beginning of your career, it’s ok to switch jobs frequently. You probably want to work in many different places in order to have new experiences. However, there’s a side effect to this. The less time you spend on a project, the more superficial you’ll be as a professional. In contrast, the more time you spend on a project, the more opportunities you’ll have for long-term impact.


10. Active listening

“Everyone you meet is fighting a battle you know nothing about. Be kind. Always.” ― Robin Williams

Regardless of the conversation that you’re having, practice the habit of active listening. Not just listening in order to reply, I mean truly listening, like truly trying to understand what point the other person is trying to convey.


11. Don’t underestimate

“It’s only going to take 5 minutes.” ― Every Developer Ever

Reasons why we fail to estimate things correctly:

  1. We want to impress others.
  2. We forget that’s not all about coding.
  3. We don’t focus on one thing.
  4. We think everyone is the same.
  5. We can’t handle the pressure.

First, we must admit that it’s impossible to be 100% accurate with estimates. Unexpected problems will always occur, hidden bugs will always show up, team members will leave the company. We must also understand that we’ll never have the full picture in front of us. Business requirements won’t be fully documented, acceptance criteria won’t be always complete, and new information is going to appear in the middle of the development process.

“If there are so many variables to consider, and it’s impossible to provide accurate estimates, why even try?” The answer is that you will get closer and closer to it every time you do it.


12. Specialist vs. Generalist

Specialist — Pros

You can achieve very good compensation in that specific field. You can typically gain a lot of technical authority in a particular subject. You need to keep up to date in only one platform/language. Companies are always searching for specialist people in that specific field.

Specialist — Cons

It can be hard to find a position if your specialisation is too narrow. If the chosen technology has a risk of becoming obsolete, it will be hard to start from the bottom again. It’s possible that your knowledge may be too company-dependent, which will make it difficult to apply the same skills somewhere else. If there’s an urgent need to use another technology, there’s a chance you will take longer to complete a certain task.

Specialist — Work opportunities

Senior positions, especially at big companies. Research projects at universities. Contractor or freelancer in a specific field.

Generalist — Pros

You are used to learning new technologies fast. There’s a wide variety of opportunities that you can pursue in different industries. If you need a new job, you are flexible and easy to transition. If you need to switch context to a different type of task, there’s a chance you will find a solution faster than others.

Generalist — Cons

It’s hard to stay updated in a lot of different languages and technologies. It’s possible that you’ll take a long time to solve very complex and technology-specific problems. It’s difficult to reach a leadership position if you’re changing fields constantly. Even though it’s easier to find a new position, it may be arduous to show that you’re the best candidate.

Generalist — Work opportunities

Startups and early-stage companies. Consultancy opportunities. Start your own business.


13. Control your variables

As software engineers, we’re used to writing code, creating functions, and managing different variables. These variables can be made of different types, such as integers, strings, boolean, etc. In computing, we have the power to change these variables’ values at any time. In life, there are trillions of variables that are constantly being created and changed by others. We have absolutely zero control over these variables, but still, they affect our lives. The way we respond to those changes is what determines our character.

Variables that you can control:

  • Your thoughts
  • Who you are friends are
  • What you eat and drink
  • How you spend your money
  • What you do with your time
  • How you treat your body
  • How much you appreciate the things you already have

Variables that you cannot control:

  • The weather
  • The economy
  • The public health
  • How people treat you
  • What people think of you
  • What people like or dislike
  • What happened in the past

14. Stop waiting

“We suffer more often in imagination than in reality.” — Seneca

One characteristic that is present in absolutely all human beings is the fact that we’re never satisfied with life.

The fact is, most people have the ability to recognise what bothers them, but only a few people have the courage and determination to face those challenges.

The only thing that prevents you from achieving something is yourself.

© 2024 by Edvins Antonovs. All rights reserved.