10 Productivity tips for software developers
After attending a few seminars on the topic of productivity and time management and reading a couple of books on the subject, I was introduced to some profound concepts and made some great realizations about the way I used to work. With this new knowledge, I completely redesigned my workflow framework something that lead in a tremendous boost of my productivity.
I would like to share with you the most important tips that will help you boost your productivity, increase your overall output and, perhaps most importantly, free you time to spend in other activities.
Note that the following tips can be applied to both personal and professional aspects, the principles are essentially the same.
So, let’s hit the road…
Never, ever, ever read e-mails first thing in the morning
If there is one thing to keep from this article, then this is it. Again, never read e-mails first thing in the morning. If you do, you will automatically be positioned in a reactive and passive mode instead of the active and creative mode we want to be.
Check and respond to e-mails only in predefined time windows within the day. Those should be before launch break, let’s say around 12.00-13.00, and then again at around 16.00, when your energy levels will be low anyway so you won’t lose any productive energy. Don’t worry, this “urgent” e-mail, is not really that urgent.
Avoid meetings if you can
Meetings are the number one productivity killers in the corporate environment. There I said it. You know it, I know it, everybody knows (but perhaps won’t admit).
“Meetings are an addictive, highly self-indulgent activity that corporations and other large organizations habitually engage in only because they cannot actually masturbate.” – Dave Barry
Yeap, this pretty much sums it up. What is most interesting is that a meeting kills the productivity of multiple people at the same time. Amazing. So, if it is not absolutely critical to attend, just skip it. Say that you have a lot in your hands (which is probably true) and arrange to check with a colleague after the meeting to fill you in about the important stuff.
If it is really important to hold a meeting (this should be rare actually), then keep these things in mind:
- Do it late in the afternoon when your productivity is down anyway.
- Always have an agenda of topics to be discussed. Don’t deviate from those.
- Set up a strict end time. Call the meeting off when this time comes.
- Don’t leave the room without clear, actionable next steps.
This is huge. The world in the information age is full of distractions coming in every possible way and keeping you from getting things done. I would classify distractions in two main categories: those that we create ourselves and those that are created by others.
Let’s start with the distractions that we create ourselves. This seems odd to think about, but the truth is that we manage to keep ourselves from being productive, even if we do not do this consciously. Examples are abundant: setting up our e-mail and social media accounts to “notify” us when something “important” happens, switching between different tasks like maniacs, getting a quick “fix” at Hacker News or Reddit and the list goes on.
The thing is that you should setup your work environment in a way that when you are actually on a task, there is nothing to distract you. Begin by switching off all your notifications, be it text messages on your mobile, Facebook updates etc. Next, exit your e-mail application or if you decide to leave it on, make sure that the automatic Send/Receive option is disabled. Then, eliminate access to any non productive sites that you usually hang like DZone, Hacker News etc. Note that I did not say “don’t use”, I used the phrase “eliminate access”. We are all geeks here so I trust you that you will find the technical way to accomplish this. You can use a low level approach of editing your machine’s “hosts” file to make facebook.com point to 127.0.0.1 or using a plugin to temporarily restrict access to those sites. I personally use the Blocksite plugin. With this setup, you will be in a position where you have eliminated the majority of the distractions that you essentially cause yourself.
Let’s move on to the distractions that other people cause. You could argue that some of the above distractions are caused by other people but the hard truth is that you cause them yourself since nobody forces you to check Twitter or Facebook. What I refer to here are “obtrusive” distractions. For example, how many times this scenario has happened to you? You get an e-mail by your manager and then he calls you to ask you if you got said e-mail. Talk about productivity. Or what about this: A colleague pokes you while you are debugging your code and asks you how something trivial is accomplished in Java and the first response that comes to your mind is “Google it, bitch!“.
In reality, those distractions are a bit tricky to defend yourself from because it is easy to go overboard and pass the limits of what is socially acceptable. Some ideas would be using headphones (though I have found that even this does not work sometimes), allowing the incoming calls to go to voice mail and checking them later, hanging a piece of paper on your PC that says “Do not disturb, coding in progress” etc. You will have to gauge what would be appropriate in your work establishment and proceed accordingly. The goal is to allow for an uninterrupted workflow.
Prepare a list of tasks to do the night before
The previous night you should make a clean list of tasks that is important to be accomplished the day that follows. I am not talking about huge lists of several items, this never works. Instead, pinpoint 2-3 important tasks, those that if performed, significant progress will occur in your projects. It should go like this: “If I only accomplish these two tasks today, will I feel productive about my day?“. If yes, jot them down.
Do the most important tasks first
As mentioned above, e-mails should never be the first thing to deal with. So, what would that be? The most important task in the list! You have identified the single most crucial task so, you sit down and deal with it without thinking about anything else. Ideally, you should finish this in “one seating”. Take a short break and then proceed with the second most major task in your list. I will talk in a later section about how to alternate work and breaks for optimal results.
Batching is not only for databases
I am sure that most of you are familiar with the concept of query batching. In short, you “batch” a lot of similar DB queries and send only one request in the database which allows for better performance. Optimization at its best. Guess what, you can use the same principles for your own tasks! WIth that way, you will minimize the activation costs and various overheads that come with certain tasks. Good examples of tasks that batching can be applied to are e-mail checking (notice a pattern here?), phone calls and generally any menial, repetitive work.
Automate like there is no tomorrow
Another thing to add to your productivity toolbox is the concept of automation. As programmers, we live essentially in quite an automated environment but yet I have seen several incidents where people resolve to manually performing a menial, mundane task which could easily be automated. Look, humans fail, are less reliable than machines and fail even more when the task at hand is boring and insignificant. Strive to automate as many of the tasks as possible. Examples would be performing a full application build with just one click, deploying to production servers using only one script etc. Seriously, do not lose mental and physical energy performing something that a machine would perform faster, more reliably and without your involvement.
Alternate “work” and “play” for maximum results
So, it is now time to talk about how to actually set up a work framework. What I would like to suggest is allocating specific time periods that would be earmarked as “work” and time periods that would be assigned as “break” or even better “play”.
For example, you would dedicate 45 minutes of continuous, focused work on a specific task and then, follow that up with a 15 minutes break where you can surf the internet, check your social media updates, read the latest Java Code Geeks articles etc. Make sure to move your eyes away from the screen during the break and definitely getting some mild physical action. Seriously, sitting can kill you, stand up and walk.
The concept is that, among other things, the “play” time period would serve as a reward to yourself for having the discipline to plow through the longer time period of working. Our minds are mysterious things but I can assure you that setting up a reward mechanism like this will help you accomplish more stuff and have some fun time as well.
On the technical side of accomplishing this, there are numerous timer applications and you can also experiment with the Pomodoro technique.
Jot everything down
What I refer to here is making the habit of noting everything down. Whether it is a new idea you have, a new approach you would like to follow for a problem you are trying to solve or a bill you have to pay tomorrow. You have to make sure that your brain’s capacity is not consumed by “remembering stuff” but on focusing on the specific goal you are trying to accomplish.
Think of your brain as a computer CPU. The “stuff” you assign to it is similar to launching several process in the background. It will eventually cause it to hang and not work properly. The process of jotting things down will offload your brain and allow it to perform in a more optimal way.
Make separate lists and categorize those thoughts you have. Lists could include “Potential Projects”, “Thing to buy”, “Development” etc., so that you can quickly scan through them later on.
Leverage “flow” – Working “in the zone”
This is the holy grail. This is what we are trying to achieve by properly designing our working framework. This is what all the aforementioned tips will allow you to achieve. I am sure you have experienced a state of “flow” or “being in the zone” as it is more commonly known among programmers. It is that time period when your mind is totally dedicated, laser focused to a particular task or problem and you essentially lose track of time. You code and code and code and nothing else exists. External stimuli do not even register with your brain and there is only you and your favorite IDE. I would dare to bet that 80% of all progress in our programming work is performed during “flow” incidents. Heck, I got in the zone while writing this article!
The bottom line here is that you have to put yourself in a position where you can get in “flow” easily and stay there as long as possible. This is the mode our brains have evolved to work in and this will skyrocket your productivity. I love being in the zone and I am sure you love it too, so why not give ourselves the chance to experience this more?
So, there you have it. A few simple tips for getting the most out of your time. Please, try those for a short period (say one or two weeks) and then let me know in the comments how it goes. You can even shoot me an e-mail, I would be happy to hear from you!
And as always, sharing is caring. If you found those tips helpful, share with a colleague, let’s make our work environment a little more optimized.
If you liked this article, join our Insiders Newsletter. It takes about 7 seconds to subscribe!
If you would like to take a deeper look at the principles mentioned in the article, check out the following books:
Mihaly Csikszentmihalyi – Flow: The Psychology of Optimal Experience
Stephen Covey – The 7 Habits of Highly Effective People
Timothy Ferriss – The 4-Hour Work Week: Escape the 9-5, Live Anywhere and Join the New Rich
David Allen – Getting Things Done: The Art of Stress-Free Productivity
10 neat tips. I loved Dave Barry’s quote. Thank you!
Hey man thanks for writing this. These tips will surely help me out.
Your first advice got me – and there’s truth to what you wrote here. Reading emails first thing in the morning is a time zapper. I’m not too sure about the 4-hour work week thing; it sounds too good to be true. Thanks for sharing the list though!
Really wonderful tips Ilias, i like that first tip reading emails at specific time and doing important tasks fist. But normally i will check mails first and then start doing work. From tomorrow onwards i will follow your tips…Thank you for sharing.
Really nice tips here! I try to apply some of these tips already in my workflow: basically I follow the pomodoro technique (1 hour work with 15 minutes breaks); I “automate” the checking email moments (have a script that launches my email app and closes it at specific moments of the day – it asks me to open and close)… still have the “bad habit” of checking the email first thing in the morning, will try to get that one out :p… furthermore I have an Evernote “template” called “diary”, where I write my “day goals” (the tasks you want… Read more »
The first tip made me guilty. ‘Automating like no tomorrow’ I’m glad I already do this. Thanks for the accurate article.
thank you for sharing! its nice!
Thank for share
Excellent tips to maximize productivity. Thanks a lot.
What a boring article. I haven’t read anything that was not obvious.
These tips will help software developers to improve their productivity and efficiency at the workplace. It will help beginners in software development too. Thanks for sharing an informative article.
I translated your article and am sharing with fellow Korean developers.
Thank you for translating the article. Nevertheless since Java Code Geeks forces a Attribution-ShareAlike licence you should clearly state and link back to the original post URL in your translated version. If you do not want to do so please delete your version of the article.
yes, I have included the link to this page and stated that it is from “http://www.javacodegeeks.com/”
another great productivity tip is: Start using time tracking software, which will help you to evaluate your work and have a clear overview.
Iam using primaERP / TIME TRACKING, which is free, intuitive, complex and web based.
Everyone can try it on primaerp.com
The only point that stood out for me in this article was the one that mentioned preparing a to-do list the night before. If we adopt the practice of creating a to-do list for next day, then we can work accordingly to a plan and thus have a better chance to finish the work in time. I think it’s a great point to highlight in order to increase productivity and save a lot of time.
Someone has been reading Rework…
I suggest you to try http://www.codealike.com which help developers to see and understand their behavior and choose wisely how to improve their performance.
Some of these tips are difficult when your developers are spread over multiple timezones.
This is good saying and following. But, where the work has frequent change of priorities of every 15 mins, how would we manage.
I am site support team, where I would involve adhoc issues, site issues, process follow ups, meeting attendance, KT discussions, high priority tickets, scheduled maintenance…like these so many which urges the SME knowledge and doing Rapid Response on any alert emails.
Thanks for the advice…Most of the tips are applicable to all the developers.
very good, thank you!