## 13 May 2005

### Self management - part 0

I have a lot of part 0' posts in my blog. Every detail tells you something about a person; and I don't like what this detail is saying about me. So it's time to take another look at how I spend my time. (Actually it's not that bad: this article should be the third in a series after this and this.)

I do more in batch mode. I get distracted too easily and in the process of multitasking I lose an enormous amount of time context switching. This is where a PhD will come in handy. It would be a great opportunity to help me focus. One reason is that work=pleasure' will definitely be more true than it is now. Another reason is that work=personal development' will also become true. Or at least I sincerely believe so. In the meantime I have to manage as efficiently as possible what I already have. Since I have identified context switching and lack of focus as one of the primary waste baskets of my resources I need to make an effort to correct the situation.

Let's start with a few instances of the problem and specific solutions.

First of all I lose a lot of time on the Internet. It is an ideal environment for context switching. It is as easy as clicking. In fact, almost every link click is a context switch. When a keyword triggers a memory I open a new tab and google for that keyword. Now I have links and browser tabs to help me switch contexts. It becomes so easy to do it that it's hard not to. The Dark side of the Force seduces the weak mind (please indulge me: I have just watched episode 4 of Star Wars).

A solution is to limit the time spent on the Internet. The Internet is a Great resource. One may think I am nuts to cut my access! But no. If I say that I'll use the Internet only a limited time then I'll be forced to look only at stuff that is really useful. So let's sketch a possible schedule.

The main uses of the Internet are:

• communications with other people
• reference source of informations
• bug fixing
• source of problems to solve

For Internet communications I'll use half an hour every two evenings. In that timeframe I will:

2. read mailing lists and forums I watch -- no more than a few at a time;
3. scan the subjects of new mailing lists messages and of new forum threads move the really interesting ones to the watched' list;
4. read blog posts with interesting subjects.

Anything that does not fit in half an hour is discarded. Notice that instant messaging is not included as a good use of the Internet.

I'll use the Internet as a source of information every Saturday evening for one hour. During the week I'll write down things I intend to search for. After I finish looking these up, if there is time, I will browse for interesting articles (magazine or research). The interesting informations I find will be printed (or saved localy) so that I can read them completely at my own pace during the next week.

Whenever I need to fix a bug (e.g. a gentoo package is not emerged correctly) there is no need to waste time to solve it myself: use the Internet right away. Be careful: this only applies for bugs that involve raw uninteresting work. Some bugs are well worth your time because you learn from the experience of tracking them down. But most of the bugs you will not teach you something really useful (e.g. I'm not that keen on finding out every detail of how a Linux distribution works).

The usage of Internet for finding problems, provided that I try to solve them -- not only read them, is unrestricted. This includes participation in TopCoder SRMs, solving problems on USACO or SPOJ, participating in programming competitions like those of Al Zimmerman.

That's all about Internet for now.

Another problem is how I spend my time at work. I feel I can do better. In The Mytical Man-Month Fred Brooks says that many schedules are off by a factor of two because they don't take into account the time a software developer really spends designing and writing software. Its not 8h per day but rather 4h per day. And this is entirely normal. The rest of the time is not wasted. It is spent in meetings, communicating (useful information) through email, talking with clients, or resting one's head. Sometimes I work more than 4h but sometimes (especially lately) less! I'd like to set a target of 4h per day. If I do something else in the morning it is easy to drift away. So from now on no tennis table or TopCoder practice in the morning. The interval 8:30-12:30 is reserved for design and coding. The rest of the time I can spend on emails, meetings, presentations, and... improving myself in those areas that can benefit the company (since I do use company time). Examples of good things to do after I finish designing and programming:

1. read software engineering books or articles;
2. practice on TopCoder/USACO/SPOJ problems
3. read code written by good coders (e.g. SGB by Knuth, OCaml compiler by Leroy)
4. read methodology essays (e.g. Dijkstra's EWDs)

Now that I have discussed a few particular examples it's time for more general considerations.

I seem to function better when I have a rather strict daily schedule. The main problem when I don't have a daily schedule is that I can't make up my mind to discard what am I doing when no progress is made. In such a case it's better to let it rest for a while and get back to it another day. This kind of letting go is what I find hard to do without a schedule. More serious is when I don't let go to a time eater: e.g. Internet pseudo-random browser. So a schedule is a must to make me let go and focus.

Focus works better on mid-term. A few hours of focus is great. But if you want to solve a a problem you have to let it go and come back to it. That's how I got the idea of defining TODO categories. Each TODO category serves as a main focus point for two weeks. After that you switch to the next TODO category. When the list is done you reconsider the period attached to each category, maybe even reconsider the content of the list and then start again. The list for now is:

• Write article, work on research problems.