Tuesday, February 24, 2009

The power of lists

This Sunday I drove to Oxelösund, about 100km south of Stockholm, to meet a friend. He works on an oil transporter ship, which berthed there for a couple of hours. We had some time to talk and at some point in our chat we got to discuss about work.

Loading a big ship with fuel oil can be regarded as a short term project. It's quite complex, comprising a couple of phases and things to be checked in each phase. He mentioned that they have strict procedures for everything.

This made me think a bit about lists. Most of us probably do build grocery lists, with an obvious purpose to not forget needed products. Like milk. I make a list most of the times I go to the grocery store, but when I don't, I usually forget something. Like dish washing detergent last time.

The loading procedure on my friend's ship has a list of things to do, which is written down. Everybody knows the items on it, but still, the list resides in a document. They check each point on the list as soon as it is completed, so in the end they know they followed the whole procedure religiously.

Making a list of steps in order to accomplish some work task might be helpful for you and for your colleagues as well. As the process evolves, the list is also likely to grow. New steps are added and why store them in our minds instead of some other place, from where they can easily and correctly be picked up later.

Some people don't want to reveal inner details of their work flow. They believe that keeping it secret will make them irreplaceable. But then, if you're irreplaceable, how can you advance?

When doing a task consisting of a couple of steps, consider making a list for each. It might be obvious for you at the moment, but it will help the others be productive if they need to get into that area. If it's not the case, are you sure you'll remember everything two months from now?

Monday, February 16, 2009

The most precious resource

If you think the choice in your local record store is daunting, then just wait till the long tail uncoils its infinite length. Trawling through the blogosphere, or the millions of bands in MySpace, or the tens of millions of videos on YouTube for the one or two blogs or songs or videos with real value isn't viable for those of us with a life or a full-time job. The one resource that is challenged all the more by this long tail of amateur content is our time - the most limited and precious resource of all.
Andrew Keen, The cult of the amateur

Derisory in a couple of places, but at same time interesting in others, Keen's book is enlightening. It is the proof itself that we should be more careful with what we digest and how we process the information we receive each day from more and more places.

Therefore I recently unsubscribed from a couple of blog updates in my reader that were only challenging my most precious resource.

Wednesday, February 11, 2009

Monitoring a web application

So we got a reliable web hosting service for Teamness and we came up with a security policy to keep the data safe.

All good, but we also needed a monitoring solution, to be informed when something is wrong with the server.

We settled to use Pingdom, a Swedish service built for this purpose. Big guys like Alexa, iStockPhoto, Feedburner and Skype are using Pingdom, but it's also an affordable solution for small startups like us.

This post is not a Pingdom review, but more about the way we're using their services to know that Teamness is up and running.

Our Pingdom account

We set up 3 monitoring options for Teamness, for every web application in Teamness:
For each of the above, there is a check done every minute. If 2 consecutive checks fail, each of us gets an email and an SMS. We're not all the time in front of the computer, but we carry our mobile phones everywhere, so we know in an instant if something is wrong.

There is also the option to pause a checking routine, so the notifications are off while we're doing maintenance work, like uploading a new build.

What do we check for?

We built a special tiny module in Teamness, which performs a couple of sanity checks to be sure the application is running safe. This module is called from a separate page, designed specifically for this purpose, which is further requested in the Pingdom checking routine.

This way we don't only know that the server machine is up and that the web server is running, but also that the inner workings of the application are sane.

Current status pages

You may expose the status of your web application through a public link. We used TinyUrl to generate these custom links for the two websites in Teamness:
They are very useful when our users ask for the uptime. A link to a nice page with the historic of the availability is more valuable than stories and explanations.

The link for the private website, which is the website with your data, is published on the Teamness main page.

Pingdom goodies

They have a set of tools for checking a webpage, by mimicking the way it is loaded in a web browser and also for doing traceroutes or pings.

Tests may be saved for future reference, like this one for The New York Times.

Mr Uptime is a Firefox extension that will let you know when a website you checked and wasn't available is again back in business.

Royal Pingdom is the name they chose for their blog. I like the Swedish humor. And I like the blog, is one of the corporate blogs that issue quality posts and not only blabber about some new offers.

Monday, February 9, 2009

Reclaim your life

I found Idiocracy to be funny in a ironical way, as it was probably intended. At least the first half, since afterward it turns into the usual cheesy Hollywood thing.

This post on Zen Habits reminded me about Idiocracy.

I follow Zen Habits in Google Reader and I like Leo Babauta's honest and smooth writing style. I also enjoyed his free ebook, Thriving on Less - Simplifying in a Tough Economy.

But I don't get posts like the one mentioned above.

It's a guest post with 30 ideas "for high-quality, low-cost, stress-free family fun". So not the stressful kind of fun.

I understand that more and more people are spending their time staring at stuff in the computer screen and sometimes they neglect their families and friends, but who actually needs a list of things to do with their family? Is lack of ideas the issue?

I was looking through the comments to see if there is an answer like: "Oh, wait a minute number 6 is brilliant. I never thought of talking to my family ... yeah, definitely something to go in my task list for the weekend."

No success, but we're close. People are thanking for having a 30 days roadmap with their family.

I'm waiting to see the first part of Idiocracy 2. The second part is probably predictable.

Thursday, February 5, 2009

New member's pocket guide to a virtual team

Two weeks ago, Sorin wrote a juicy post about welcoming a new member in a virtual team. There were a couple of times in the past when I was wearing the shoes of a newcomer in a virtual team and throughout time I learned from mistakes and developed some guidelines to keep me comfortable.

Image by 96dpi


Centralize data
I made a habit of keeping data centralized in a single location. It feels comfortable to know that you have a single place from where to start looking for your stuff. Every document, meeting minutes and conclusions from discussion on email or IM, things that I need to do for the projects and so on were stored in the central place. This doesn't eliminate the need to sometimes look for an old email, but at least it diminishes it.

Keep a worklog
At one point in the past I started to track my daily activity, by writing down as much as I considered relevant. Besides the things that I've been working on, the list also includes mentions of Skype or phone conversations with my colleagues. If you get paid by the hour, this is probably mandatory, but even if you don't, it pays off in time.

Stick to a strict working schedule

When I started working from home, it seemed cool to me to have a loose schedule. More like no schedule at all. But after a while I noticed that I actually didn't know when to stand up from the desk and call the day off. This started to affect my health and my ability to focus.

And there is another side effect of the schedule-free work style: your friends will consider you're always available and ask your help with different chores. If you don't commit to a time schedule, you'll end up doing other things when you should be focusing on work and you'll find yourself pushing working hours late into the night.

Schedule and timezones
Since the team is distributed geographically, the members could be on different timezones and it's good to know who is available and when. Worldclock and FoxClocks are two useful tools to see the current time of your colleagues.

Image by monkeyc.net


I used to convey upfront the time interval when I was going to be available. Even if I wasn't working in an office I still needed lunch breaks, so this was also included in the schedule.

Communicate often to keep yourself on track
Have a chat on IM each morning with the whole team, if possible, or only with your coordinator to say what you were working on, what do you intend to do that day and also ask what others are working on. Keep it short and concise!

Asynchronous interaction is your friend
Your colleagues are not in the office near you. Take advantage of this. You cannot be interrupted from your work flow and I suppose you don't want to. Rely heavily on email, collaboration tools, wikis and other non-interruptive mediums.

Invest in your workspace
If you're working from home and you just started your virtual work adventure, it's probably better to create a proper environment. Separating home from office is an advisable thing to do, even when the office is at home. So make it look like a nice office rather than a cozy place at home.

The Home Office Planner is a dainty book that comes to your help in transforming any space into a functional work area. You may also use IKEA 2008 Office planner, a desktop application for designing your office in a 3D view. The software let's you try various colors and also see the total cost.

Monday, February 2, 2009

Avoid the maintenance nightmare of duplications

In software development, duplicate code is considered a sacrilege. It leads to maintenance issues of the system, requiring more work to fix the same problem in a couple of places.

So then, it's pretty easy: just don't duplicate the code, right? It's basically as easy as saying don't eat bad food. Some people have the discipline to stick to healthy nutrients to an extent to which they find junk food disgusting, but the rest of use enjoy a juicy burger once in a while.

Image by Sam UL

As noted by Dave Thomas, one of the two authors of The Pragmatic Programmer:
If you have more than one way to express the same thing, at some point the two or three different representations will most likely fall out of step with each other.
To keep these representations up to date and therefore synchronized with each other, you'll find yourself stuck in the wasteful process of changing them in parallel, which I call the maintenance nightmare. And the nightmare reaches its climax when contradiction makes its way in.

The duplication plague extends beyond code. It reaches areas such as requirements or specifications as well.

It happened to me a couple of times to be directed to obsolete documents, when I started in a new team. These documents usually become obsolete because a colleague sends an email with a few notes, which become new requests upon subsequent replies.

Later on, someone else puts together a Word document that summarizes what has been discussed, which will probably get to be obsolete in a couple of weeks.

A solution that I found working was to establish a procedure of maintaining specifications and, more importantly, to stick to it. This may sound overblown, but it doesn't need to be: a simple guidance, presented as text is usually enough and also newcomers will benefit from it.

When a new email comes in with notes on how a process or a feature must be changed, make sure to update the single location where it was described so far and point everyone to it. Referencing that location in future discussions will habituate your co-workers into using the procedure you established together, eliminating the confusion induced by obsolete docs.