Ten levels of productivity

These ten things help me to get the most productivity out of myself as a programmer, and I would bet that most of these things also apply to almost every single programmer.

If you are my boss, colleague, head of R&D, CTO, head of HR, CEO, or anyone who is working with me or want me to work for you, these 10 things should be in order to maximize my productivity.

I like to think that my productivity decays exponentially every time when one of these things cannot be fulfilled. When three or more of these things are not true, my productivity drops to the level of an average programmer ;)

These are not in any particular order, because they are all really important and productivity cannot be accurately measured.

1. New or interesting technology

Every time I get a chance to work with new or interesting technology, I want to learn as much as possible about the technology as quickly as possible. Like many other developers, learning new things really motivates me. When working with a really interesting technology, programming does not feel like work at all. Simply put, I am really productive, when I don’t feel like that I am working.

Example : Once upon a time I got a chance to port a software for Sony PSP. There was nothing special in the software that was being ported, but the whole concept of making software for Sony PSP was so awesome that my productivity went through the roof.

2. Something to prove

I usually get some extra motivation, if I feel like I have something to prove. This might happen, when someone has underestimated me or I have heard that someone doesn’t think that our team has the necessary skills to get something done. I want to prove people wrong, and rub it in their face, and that gives me a huge boost in productivity.

Example : I wanted to prove that I actually know something about algorithms, so I made it to the TopCoder Open 2008 finals and placed 2nd in the competition.

3. Enough sleep

This is really important, because my brain does not work at full capacity, if I haven’t slept enough. I usually need to sleep at least eight hours to operate at full speed. If I have to get up early and go to some stupid meeting, I know the rest of the day will be a waste, because no matter how many energy drinks I consume, my productivity will not be at a high level.

4. No interruptions

Most people have heard of the flow, but not very many software companies enable programmers to get into the flow. I strongly believe that every programmer should have a room with a door. Most companies are not run by programmers and they have no idea what kind of negative effect noisy working environment has on productivity.

Before any agile zealots start bashing me that there must be constant communication inside the team, I agree that communication is crucial to the success of software projects, but good communication does not mean noisy offices and constant interruptions. There is a way to communicate and still get into the flow.

When I need to get things done, I usually hang around at the office after all the 9 to 5 geezers have gone home. It’s kind of sad that in most companies you have to work different hours to actually be productive.

5. No context switches

Even if the context switch is small, getting back into the flow might be impossible. In many companies most things are urgent and need someone’s immediate attention. This creates a situation where context switches are accepted and even expected, but this destroys the programmer’s productivity.

If you need to get things done, you cannot work on multiple completely different things at the same time and maximize your productivity. Organizations should understand that programming is not a clerical activity and it cannot be continued immediately with the same pace as it had before the context switch.

Meetings are the biggest productivity killers for programmers. One meeting in the morning and one in the afternoon, and I guarantee that most programmers get nothing done on those days. Most meetings, not all, are already a huge waste of time. Too many people get together without a clear agenda and no moderation, and usually nothing good comes out, in addition to killing the productivity.

6. No estimations

This is a bit controversial issue, but I am speaking from my own experience, and I have noticed that most programmers are more productive when there are no estimations for their tasks. This might not apply to everyone, but there is something common in programmers’ mind that slows them down when their tasks have estimates.

One obvious thing is that, when the task takes less time than the estimate, programmer might polish it until the estimated time has been reached. The programmer might also think that he has done something wrong, if he finishes early, and might refactor the code with all kinds of design patterns to make it look more professional.

I am not saying that no one should ever estimate anything, but estimation is always a guessing game at best, and programmers do not move from task to task at full speed when estimates are followed like bible.

7. Free reign

If I have the last word on all the design matters, I will be more productive, because I can’t spend my time complaining and whining about decisions made by others. I have to believe in the decisions I have made, and show that the design supports implementing features at a rapid pace.

This does not mean that I am dictator and never listen to anyone. It only means that I don’t want anyone to step over me and force me to do things I don’t like. If that happens, my productivity might take a dip, because I cannot work at full speed at something I don’t believe in.

It might sound like that I am a little princess and cannot work with other people, but that’s not true. I like to work with other people, as you will learn. All I am saying is that, if I am involved in making design decisions, I will be more productive as a coder.

8. Good available libraries

This is something that some programmers don’t like to do; they like to write everything from scratch themselves. I, on the other hand, like to leverage as much existing technology as possible. However, I don’t spend my days trying to find pieces of code that would do the work for me. Only in situations where it absolutely makes the most sense to use an existing library, I will use it.

I like to have good building blocks available, so I can build my software on top of those. If I have to implement most of the building blocks myself, my productivity won’t be as good, because it will take longer to get the job done.

In some situations the only reasonable way to get the job done, is to write everything from scratch. Fortunately, those situations are not that common anymore, because there is so much good software out there.

My personal favorite at the moment : Lua

9. No unnecessary bureaucracy

Bureaucratic things can get in the way of achieving maximum productivity. Organizations might be in such a bad shape that programmers cannot do their jobs properly, because they have to waste a lot of their time doing things that must be done before they can actually write any code.

Bureaucracy is also a motivation killer, which will easily drop the productivity to zero. If an organization makes programmers jump through loops and holes, they are not going to be very productive.

10. Brilliant coworkers

If you have someone really smart to bounce ideas with, you will come up with solutions that are better and take less time to implement. In the best situation, there is a little bit of competition, and it will push the productivity to higher levels, because not many people want to be to be outperformed by others. There is also a risk, if the competition takes over, the quality might suffer, because the software was done too quickly. Coworkers should actually push each others to write high quality code.

The opposite will result in a loss of productivity. If you have no one to share ideas with or you have to baby-sit other programmers, there is no way that productivity will reach its full potential. The best situation is when there is always someone a bit smarter and more experienced than you, so that you can always learn new things and push yourself to your limits.

  • Share/Bookmark

19 Comments

  1. 1. The key thing is that there is something new to learn. New, by definition is unknown and very often interesting. There’s also the challenge of mastering new things! I like that very, very much.

    2. It is true that having something to prove can make one work harder. This isn’t my favourite type of challenge, though. I am most effective and creative in the happy-zone, especially if there’s some good collaboration going on. YMMV, though.

    3. Sleep is always important. I find that it’s most important when you’re trying to crack some really hard problems. I can work a lot better somewhat sleep-deprived than I used to. This is because when you get more experienced you won’t always need 100% of your capacity to be able to do most things.

    4. Interruptions can really hurt. It depends again on the other factors. If you have a really hard problem, a tight schedule and you’re a bit sleep-deprived, being interrupted from your flow you have worked so hard to achieve can really ruin your day.

    If you’re interrupted when you should have taken a break already, it can actually be a good thing, but this is rare. Also, I think that you can get better at dealing w/interruptions even though it’s certainly not optimal.

    5. Meeting are probably worse than most of the other things combined to me. A useless meeting can really suck the life out of me in a way that other disruptions really cannot. Ad-hoc (design) workshops are wonderful, however – you know those things where you’re actually solving a problem or a design issue.

    6. Almost all programmers hate estimation, because it’s an inexact guessing game, or so it appears. Best thing to do is to compare to other similar projects, their actual spent working hours. I don’t like schedules myself all that much, but the way business is run it’s very hard to convince relevant parties otherwise.

    If you have slack in your schedule and you can use it to improve quality, just enjoy it. It’s not like that happens too often. Also, I find that sufficient slack is important in promoting creativity, quality and morale.

    7. This is a hard one. It’s certainly a case of ‘no ownership – no buy-in’, but at the same time it’s not good when people start “owning” the code in the wrong way. I’ve seen some pretty bad examples of this, repeatedly.

    8. I guess most of us spend a few years re-inventing the wheels. At some point you just grow so weary of it that you’d do most anything not to have to do it any more. Then again at some point you may have your own libraries, but it might not always be easy to have them always at hand, if you change jobs.

    9. This is never good, but you will learn to work around it, if you need to.

    10. It’s not only co-workers, you should really build a network of these brilliant people you can collaborate w/.

  2. Thanks Susanna, very good comments. About number seven : there is a really fine line between owning code too much and just the right amount. I like to think that every team member can and should improve each other’s code, but if someone e.g., makes my code unreadable in any way, there will be hell to pay :)

  3. gwenhwyfaer says:

    Minor minor point: it’s actually “free rein” originally, although “free reign” has understandably become the more commonly-used form – I guess most people relate the term’s meaning better to kings than to jockeys.

  4. Nice post! I would add one item though,

    11. Enough exercise

    Try biking to work or just running/walking every once in a while. For me that’s a huge productivity booster. If I get tired of coding, a bit of exercise is enough to get refreshed and reset the brain to get into another coding binge.

  5. @Juho Good point. I agree that exercise can boost your productivity. Also a proper diet helps; Eating 10 slices at Pizza Hut buffer for lunch does not help with coding.

  6. Mike Finney says:

    Wow! That’s worth reading twice!

  7. Vesa Suontama says:

    Man, you surprise me again: You have started a blog, and you write well.
    Added your site to my google reader, so keep the good stuff coming.

  8. Thanks, and Vesa there will be even more surprises coming up later…

  9. Marcelo L says:

    @Tuomas: And I even agree with some of your views about my colleagues ( managers, development leads ) who simply don’t “get it”. Keep it coming.

  10. Bubby says:

    Zm6IZ9 Very true! Makes a cnhage to see someone spell it out like that. :)

  11. Hi! This post could not be written any better! Reading through this post reminds me of
    my good old room mate! He always kept chatting about this.
    I will forward this write-up to him. Pretty sure he will have a good read.
    Thanks for sharing!

  12. You need to be a part of a contest for one of the best sites on the web.
    I most certainly will recommend this site!

  13. As the civil unrest waned, people gradually filed back into their
    own homes and communities. So to get crystal clear audio,
    it’s just not going to happen. The following is great fitness
    equipment that you can buy so that you stay fit and healthy even while at home.

  14. One is if your cat spends a great deal of time in the litter pan – either at one time or entering
    it repeatedly. With the Law of Attraction, it’s all about matching your vibration to your mood or feeling.
    If you are scoping the cause, and the vibration changes or disappears as
    speed is increased, you can eliminate RPM as the problem.

  15. Ridiculous quest there. What occurred after? Take care!

    My blog: Organisational Change

Trackbacks / Pingbacks

  1. uberVU - social comments
  2. Tweets that mention Ten levels of productivity | Rants and Apps -- Topsy.com
  3. Ten levels of productivity » Raphael Michel
  4. >Ten levels of Productivity | Meteora

Leave a Reply