2013년 6월 14일 금요일

10 Productivity tips for software developers

This article from there

이글을 쓴 저자는 Time Management에 관한 세미나와 책을 탐독한 후 10가지 규칙을 정하고 자기 삶에 적용해봤더니 너무 좋아서 모두와 공유하고 싶다고 한다. 10가지 항목중에는 당연하다고 생각되는 것도 있지만 반면 이건 아닌데 싶은 것도 있는데 그건 기업 문화와 근무 환경에 따라 차이가 있을것 같다. 예를 들자면 내 집중력에 가장 방해가 되는 요인은 "주변의 업무성 대화", "동료들의 발자국 소리", "코골며 조는 옆 자리 직원", "시끄러운 프린터 소리" 등은 어쩔 수 없고..

10 Tips

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.

Eliminate distractions

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.

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...