Harnessing Chaos: A Framework for Team Management

Programming is a misunderstood art. Unfortunately many commercial ventures treat programming like a science and managers treat programmers as engineers. Engineers build things based on repeatable technologies and designs. Programmers craft code, a process more akin to the unpredictable and unrepeatable production of art like writing. Companies get in trouble when they try to apply engineering best practises such as enforcing strict requirements, and tight predictable deadlines. A far better approach works by treating programming as an art, and applying artistic best practises.

The Problem of Creativity
One problem with creativity, is that is hard to predict and control. Creativity comes and goes, at a whim. Since artists work in a creative manner, they need a great degree of freedom in their work. Unfortunately the real world treats art in the same way as it does engineering. The real world expects predictable work schedules and techniques.

This becomes problematic when programmers work on a project as a team. The team needs to balance creativity with reliability. So artists and programmers need to build predictability into their projects. One way to create repeatable and scheduleable for creative work is to use a framework.

Team Frameworks
I am an extremely individualistic person. Yet, I will admit many projects simply take too long for a single person to do. Teams naturally alleviate this problem, by throwing more people at a task. But like Fred Brooks mentions in his The Mythical Man-Month, throwing more people at a team does not guarantee faster completion.

One of the reasons, I dislike teams is the problem of expectations. Before starting on a team project, I find it best to lay out “ground rules”. The rules include:

  1. Quality Expectations
  2. Communication
  3. Scheduling
  4. Individual Talents
  5. Work Synchronization
  6. Task and Job Division

It is important to work out these rules early on in a long term project. Without getting into specifics of each pint, I think everyone on the team needs to know what is expected of them. This saves the trouble of anguished team members when things go wrong, which in any project always does.

It is essential that these rules (not guidelines) be in place early on. Also every member of the team must follow these rules religiously. Sometimes the rules need changing, but if you did a good job on setting them up, the rules should not drastic changes.

Buffer Schedules
Programmers are notorious at underestimating the time required for work. The problem of “engineering” comes into play, and the result is delays in work. Instead when working on any creative project, you need to schedule in “thinking”, “wasted” and “oh crap, this is all going to heck” time.

The best of doing this is to schedule in a buffer. I usually work on a 1.5X buffer, (which probably is a very short buffer and 2X, even 3X are preferable). A 1.5X buffer basically adds an extra half “of time I think this will take me”. So if I think something takes 2 days to do, I try to schedule 3 days. This gives me room for error and I can finish ahead of time rather than “after-time”. Many successful programming groups also use buffers in scheduling.

Open Source Palm-Desktop Groupware

I recently discovered the comfort of using groupware, to organize all my communication and email needs. I never used a groupware application before, so maybe I am just realizing the potential of such software. But I am getting ahead of myself.

I commute to university the majority of the time. This means 3-4 hours on the bus, with little to do. Last semester I began intensively using that time to finish homework, edit papers and so on. One of the things I wanted to do is to write emails on my Palm Tungsten E, and send them later. The Palm came with a Windows-only mail client, VersaMail. Not helpful when your main desktop being KDE running on Ubuntu Linux (Kubuntu 6.10). Fortunately that is where Kontact comes in.

Kontact: KDE’s Groupware Offering
Kontact acts as an all-purpose groupware program. I will not discuss the virtues of this program here. It is a serious contender for replacing Microsoft’s Outlook or Novell’s GroupWare. You should check it out yourself. Kontact comes with KPilot, a great program for basic syncing of a Palm. Unfortunately Kubuntu’s version KPilot had bug in it. Fortunately I found a deb from http://ubuntu.lnix.net/edgy/updates/kdepim-proposed/ that fixed my problem.

Migration
First, I needed to migrate my mail and contacts from Mozilla Thunderbird to Kontact. I needed to export my address book in Mozilla to LDIF. Kontact easily imported this. Kontact also comes with a neat feature for importing emails from other clients. A simple wizard, and my Thunderbird emails resided now in Kontact. An hour later of organization, I readied myself for Palm integration.

Palm syncing on Linux can be a chore. Fortunately, Ubuntu 6.10 comes with easy PDA syncing for most Palm PDAs. To my horror, KPilot actually removed contacts from my Palm. After I installed the updated deb for KPilot, this problem also disappeared. Now I all I need was the Palm’s email program integrating with KPilot.

VersaMail versus GNUGetMail
My Tungsten E came with an email client called VersaMail. Unfortunately KPilot’s email plug-in does not use the MultiMail format which VersaMail uses. Not wanting to buy an email client, I searched for a free solution. I stumbled upon gnuGetMail. gnuGetMail is a simple, open source email client and uses the older single account Palm mail format. All I really needed was something to write emails for later sending. gnuGetMail does both sending and receiving of emails.

I recommend both Kontact and gnuGetMail to anyone considering Palm based emailing.

Kontacts, Palms & Course Juggling

Greetings again!

6 days into a brand new year 2007, and I am starting to feel the ominous feeling of stress. Without getting into details, things are not working out as planned, backup plans seem to backfire and a tense atmosphere has enveloped my personal life. Fortunately I have 359 days left to make up.

School started again on Friday. The last semester started and I am not sure which courses I want to undertake. I do have a less then promising backup plan. I hoped on continuing my journalism training, but getting into the course proves problematic. Oh well.

Today, unproductive in the realm of homework and past work, I dedicated to integrating my Palm into my lifestyle. First I migrated to using the Kontact groupware, as KMail and family works better with KPilot better than Mozilla Thunderbird. The migration proved not too difficult. The problem I keep running into is syncing the desktop to PDA correctly. The PDA keeps on loosing contacts, and not updating the desktop’s todo list. Not to mention that the Palm’s VersaMail client refuses to talk to anyone except itself. My goal for the ending minutes of day is to force both Kontact and the Palm to talk to each other.

Confusion (and angst) are the order of the day.

Task Logs – Managing Fragmented Time

As promised last week, an update to my self-experiment. After a week of battle testing, consulting with Lina (my university counsellor) and observing myself, I can report success in with my self-experiment. But first, lets backtrack to the “theory” behind my idea.

Last Friday, I came up with an idea to deal with creating continuous spans of work time in an environment that distracts and fragments time into sections. Fragmented time caused by distractions, creates a feeling of disorganization, confusion and frustration between switching. The greatest problem I found with switching between small tasks and my main (course) work, was the inability of getting back to the work. After some problem, I realized that I encountered this problem and a solution in another place, operating systems design.

Modern operating systems seem capable of multi-tasking. Yet the majority of computers have only one or two processors (hyperthreading and multi-core acting as two processors each in some degree). So how can a single processor run two servers, a media player, a web browser, and office suite at once? It doesn’t! The operating system switches between individual tasks rapidly creating the illusion of multi-tasking.

The CPU can switch between tasks without loosing its place by logging. Before the processor switches tasks, the operating system notes what the processor worked on, how far it got and other relevant information. I applied this same idea to enable fast personal context switching.

Before I switched from a major task to another one, I logged what I worked on. The log details the task, what I needed to do next and any ideas I wanted to remember. In its basic form (one form I use along with an activity log) I note the name of the task, what I was to do next in the task, and a bullet form list of notes. Additionally you can jot down the importance, due date, urgency and personal emotion (look at my modified activity log sheets) on the task log.

When I discussed this with Lina, she was quite impressed. She pointed out that this method, deals with the three issues in time management: organization, motivation and prioritization.
The task logs firstmost are organizational tools. They behave sort of like more advanced todo lists, and help you organize your thoughts about a task. Task logs also help motivate you. They show your progress, set your mindset toward the task and motivate you to finish off the task quickly. Finally task logs help with prioritization. Sitting with number of task logs in front, can help you decide which needs the most attention in a given time. In the short I have used them, task logs helped me switch between activities efficiently.

I like task logs, in that by helping me switch from and to a task, I can work on different tasks without a long “warm-up” period. Anyone who deals with lots of writing knows how difficult it can be to put pen to paper. And if something interrupts you, when you come back to writing you need to get back into the mindset of the task. The task log shortens the warm-up time, effectively “stitching” my shorter fragments of time into a single time span. With a task log, I don’t have to sit and think “What do I need to work on again? And what did I want to do?”. Instead I can look, and say “I did this, I need to do that… so… lets work on that task now.”

But even a super-fast CPU finds switching between tasks expensive. Taking task logs takes more time than doing without them, if you never needed to switch between tasks. In an ideal world, we could work on one thing at a time. Unfortunately, the ideal does not exist and so we need to deal with issues like fragmented time. And I believe task logs can help with fitting long term projects into shards of times and making me more productive.

Check out this page on mindtools.com on activity logs.
I will post a sample of “emotional” activity log and and a sample of my task log, sometime tomorrow.

Self-Experiment: Fast Personal Context Switching

Time for a self-experiment, where I get to play the part of the guinea pig. And you get to observe the final results. Speaking of time, this university semester I felt rushed and busy like never before. I found myself with six assignments/exercises a week, and in a constant lack of time. In response I started going to time management counselling. Armed with calendars, todo lists, activity logs, my trusty PDA and advice from Mindtools.com, I felt I could do no wrong.

I discovered a problem that kept holding me back from achieving more. At home, with all things going on, my time become extremely fragmented. The fragmentation frustrated my attempts at coming up with a coherent schedule and sticking to it. And getting into the mood and mindset of performing school work – assignments that I tried to avoid – felt like climbing Mount Everest again and again. However when I interrupted and continued games between chores, I did so without missing a moment. Why could I do one well but not the other?

When you look at my situation, it resembles the life of a CPU. Why a CPU? Take a look at your computer. Your computer with one CPU can multitask well. The CPU seems to work on many things at the same thing. In reality, one CPU can only do one thing at a time, but the operating system switches the tasks for the CPU. Under Linux – the OS I use and understand best – every program (process and thread) becomes a task. The OS allocates a certain amount of time for executing a task, and then switches between them. Whenever the OS switches, it stores a record of what task it was working on, how far did it go into the task, and any extra information it needs to restart the task later. The OS then starts or continues another task. Eventually, the OS gets back to the stored task, retrieves it, figures out what to do, and executes the task until the next switch. So what?

Well, I often have to drop one thing and pick up another. Just like an OS, I switch from one task to another. Yet when I re-start my previous work, I sit trying to get into the work again. Being the distractible type, I get fed up and wander off to game instead of homework. And I need continuous blocks of time to do work in. So what to do?

Remember how the OS stores some information of its work in one task, before it switches? Well this week’s experiment is do the same. Before I go off on another task, I will write down the following:

Task: (what was I working on)
Working on: (which part or section I was working on)
Self-Progress: (how I am progressing through this section – well, badly, struggling, etc.)
Next work: (what I need to do next)
Notes: (any important things I need to jot so I don’t forget them)

Well this work or is useful? I have a pad of paper and pen ready, and we will see. Next week, I will post any interesting developments and results of this self-experiment.