This note is about productivity and specifically productivity in software development.
Programming is a creative process. Many non-developers have a mind set that programmers create code like a factory. But you cannot just work for longer hours and expect same quality output.
Avoid extending your working hours. It makes programmers tired, frustrated and more prone to making errors. In most cases, you should aim to reduce your working hours and optimize how you work.
Care about your work. If you do not want to be productive you will not become productive. Accept that development is your work, not only something you do for fun.
Overcome overconfidence when working. Developers give themselves free time based on good productivity when it really should be used to make up inaccurate estimates.
You complete an one day task in two hours. Then you give yourself a mini-vacation, relaxing for 30 minutes. Then you get stuck in Facebook, Google+, Twitter, Reddit-loop. You do nothing else on that day, poof, productivity gain lost.
Overcome overconfidence when estimating. People are really bad at estimating development time. The truth is that unexpected things screw you the hardest.
Development environment update takes days because you need to install new compiler, the install fails and you have to recover multiple times. Then you notice that the platform you are implementing does not give same API help than the previous platforms gave and compiler gives "Internal Compile Error 2033". The bug takes a whole week to trace and fix.
Minimize uncertainty. Minimize uncertainty by making it clear what you are going to do each day. Get something done every day, no matter how long it takes. Avoid thinking that you will finish stuff "tomorrow".
Create list of 9 items every morning: 1 major thing, 3 medium things, 5 minor things. Start a day by completing one of the minor things and follow up with the major thing. Other minor things should be last on your list.
If your mind is getting blocked, get started with something simple. Force yourself to write code for 15 minutes using a timer. Even the simplest task, like changing visual layout, will do. I can guarantee it gets you onto a working streak.
But still, use downtime for your advantage. Reality is that people are not productive all the time. It is not abnormal to have only around 20% effective working time at office. Short breaks do reduce burnouts in the long term.
- Use downtime for socializing with co-workers that are also on downtime.
- Use downtime to play some pool, hockey, ping pong, jogging, w/e.
- Go home, take a nap and work later in the evening.
- YouTube/Facebook/Reddit are the worst way to spend downtime.
Benchmark your productivity. If you do not admit you have a problem you will never solve it. On Fridays, check your commits history and analyze it.