Hacking productivity for software developers

As developers, usually we actually have limited time for coding. As part of the process of building and architecting software, we have to attend meetings, interact with other team members, read and write documentation, reply to emails or slack messages. And, at the end of the day, we still have to ship the code.

It comes down to us to manage our time and stay as productive as possible. Productivity is just another way to use your time efficiently for different reasons:

  • Get more stuff done in a short period of time

  • Make more money

  • Spend more time with friends and family

  • Have time for hobbies

  • Meet deadlines

1. Focus

There are hundreds books on productivity and how to get more done in less time. The big secret is: just sit down, focus and do the work. If you don’t have time to focus on what you’re doing, it’s hard to get anything done. And writing software specifically requires a lot of focus and attention. That is why developers are notorious for wearing headphones all the time while working and being somewhat anti-social in the work environment. We’re actually trying to get work done ;)

staying focused takes some effort

I recommend using the pomodoro technique. I set my timer to 25 minutes when I’m coding so I can stop checking Facebook, Twitter and emails every 10 to 15 minutes. It’s a habit many of us have. Set aside 30 minutes after lunch or after dinner to check social media, news and silly cat videos when you’re going to be the least productive.

Stop multitasking. It doesn’t work. If your goal is to be productive and to focus on what you’re doing, you can’t switch between two or more tasks. You can’t code while talking to someone else, you can’t text and drive, and you can’t exercise and reply to emails. Some people still do all of the above, but it’s not the way to be productive.

Be present in the moment. Focus on what you’re doing and you’ll be not only productive but happier too. Even if it’s a boring meeting, try to concentrate and really be involved in the conversation. It requires changing your mindset, but it’s worth it. Being present and not daydreaming has a huge upside for everything you do, not just work.

2. Breaks and rest

While it’s important to focus on work, it’s as important to focus on your rest. It’s scary to think about working non-stop all day, that’s why many people procrastinate and turn to phones as a “comfort blanket”.

Make sure to take frequent breaks. The pomodoro technique has your back again. Every focus session should have at least a 5 to 10-minute break. Take this time to stretch, get water, reply to slack messages and send urgent emails. Take longer breaks (4 to 5 days) few times a year. That’s what vacations are for.

Rest from work means you have to exercise. Sitting at your desk is not good for your body and mind. Going to gym or yoga 3 to 4 times a week is a must if you want to stay healthy and recharge your brain. Lifting heavy weights is not necessary but stretching, running, and body weight exercises should be a minimum.

3. Planning

After the basics are covered (focus and rest), we can talk about organizing the work. Having a good project management tool is crucial for productivity, not only for your individual productivity but for the productivity of your team. Some people prefer simple to-do lists, like Wunderlist or Trello, some prefer old school pen and paper and some use more sophisticated tools, like JIRA, Pivotal Tracker or Asana.

In addition to task management, it’s important to invest in the process. Having a strict process like scrum (agile) in place creates a discipline on the individual and team level. I like the scrum process because it makes the whole process transparent to everybody involved. Even though it may seem like there are more meetings, it helps the team stay in synch and track the progress.

Working by yourself is dangerous, despite the comforting feeling that you’re moving fast with no one bothering you. Imagine if you were moving fast in the wrong direction or there was an easier way to build a feature and someone could help you!

“Work expands so as to fill the time available for its completion.” (Parkinson’s Law)

Set clear goals and deadlines and then schedule your work. You need to have a clear picture of what needs to be done in a certain period. Right now, I have a goal of 10 to 15 “pomodoris” a day, depending on my meetings and I have specific tasks waiting for me with specific deadlines. So, the guesswork is completely eliminated when I sit down to work. I try to schedule my week on Sundays. Of course, it doesn’t always work out but that’s ok.

4. Invest in your hardware.

Photo Credit https://unsplash.com/@craftedbygc

Buy the most expensive hardware you can afford. Not the fancy gaming computer but the equipment that makes you the most productive developer you can be. If you are wasting time switching between IDE and a browser or requirements all the time or waiting while the computer re-compiles the code, you’re losing money. For example, I like to have a big screen 27 iMac with 24 GB of RAM and fast SSD or the latest MacBook Pro with an external 34-inch monitor. It will pay for itself in a few months or even weeks.

Invest in your software, not just hardware. Don’t cut corners when it comes to good tools, like text editors (web storm, sublime) or paying for github or hosting providers like heroku, that save so much time when deploying your code. Having the best equipment and tools will give you time and opportunity to concentrate on what you are best at and make you more productive.

5. Know your tools

Having the best tools available is not enough. You have to know how to use them to make the best out of it. For example, know how to use your IDE really well. By knowing it, I mean master it. Take the time and learn all the shortcuts, hidden commands, etc. Install plug-ins, code highlighters and add-ons for the frameworks and libraries you work the most with.

For example, I have JSX, React and ES6 plugins installed in my atom. Optimize the font size and color palette to make it truly yours. Once you master the IDE, you will have to spend less time switching between tabs, looking for that menu you saw once, or manually try to perform a task that the IDE can do in half a second. The same goes for any tools you use for work: computer OS, terminal shortcuts, testing suits, and deployment commands. The more you have it memorized and automated, the more time you’ll have for work.

6. Know your framework (master one framework)

There are many programming languages out there, and even more frameworks and libraries. While it’s good to know more than one or two, it’s hard to really master many languages and frameworks and keep up with their rapid evolution. That’s why it’s important to specialize in one area.

Yes, you may be a full stack developer, knowing your way around Java/Node.js/Rails but specialize in React.js. However, if you master React.js (and its ecosystem) and keep it as your go-to framework for all the projects, you will be way more productive than a person who keeps switching between Angular, Ember and then goes to build Ruby on Rails app. By the time you finish the Ember app, the new Angular version will come out and you’ll have to re-learn it.

This especially applies if you are building prototypes often. Knowing one framework really well allows you to get a new app out in no time. Currently, I’m trying to master React.js + Firebase for rapid prototyping and React + GraphQL + Express for production apps. As you can see these are all JavaScript. I am not trying to master something completely different, like Rails, even though I’m able to build Rails apps.

7. Enjoy what you’re doing

You will only be productive as long as you enjoy the work you are doing. Make sure you add a fun factor to your work. It’s different for everyone. For some, it could be a new challenge in every project, for others it could be seeing the app being used by users and getting feedback fast and for some, it could be money or a promotion.

Another thing that helps me be productive on any project is actually knowing what the end result is and understanding the big picture. Taking the time before and during the project development and learning what is the end goal is worth the effort. The deep understanding of the goal will give you a sense of ownership and excitement at the same time. You will want to finish it as soon as possible just to see the project succeed.

Conclusion (TL;DR)

Productivity is an exhausted topic. There is so much advice out there on how to improve your productivity. Everyone wants to be productive and get as much done as humanly possible. After reading many books, blogs and experimenting with my own time, I came to a simple conclusion of what is the secret. The secret is… there is no secret. You just have to do the actual work.

I consider myself a productive developer. In the past 2 to 3 years, I’ve successfully built complex projects in short periods of time. So, here I just outlined what worked for me.

Having dedicated time and space, where you can focus on one thing at a time, without distractions, is all you need to accomplish your goal. Whatever your goal is, if you measure the progress, you’ll be able to improve it.