Wednesday, July 29, 2009

Checking accessibility with online DNS tools

It appears that yesterday, SoftLayer had a DDoS attack on one of their DNS servers, though nothing official is confirmed yet.

SoftLayer is our hosting provider and a DDoS attack is a distributed denial of service action to make a resource unavailable, in this case a DNS server. Roughly explained, a DNS server is in charge with translating a domain name to an IP address, making it possible for a user to type a name like www.teamness.com in the browser address bar and get the proper web page back. Pingdom has a blog post called A visual explanation of how DNS lookups work, with a nice picture depicting the process.

All the above means that www.teamness.com wasn't accessible in some areas in the world, at least by the domain name. I tried a few websites that will let you use their DNS servers, to get an idea of where the website wasn't available. Here is the list with these services (I also included IP addresses, since if you have a DNS problem, you might not be able to access them by names):

Website by name: http://www.all-nettools.com/toolbox
Website by IP: http://216.92.207.177/toolbox
Location: United States - Pennsylvania - Pittsburgh

Website by name: http://www.dnsstuff.com/
Website by IP: http://66.36.247.82/
Location: United States - Texas - Dallas

Website by name: http://network-tools.com
Website by IP: http://67.222.132.196/
Location: United States - New Jersey - Ocean City

Website by name: http://ping.eu
Location: Germany - Berlin

Website by name: http://www.demon.net/external
Website by IP: http://194.159.246.194/external
Location: United Kingdom - Scotland - Aberdeen

Website by name: http://www.knossos.net.nz/checkdomain.cgi
Location: New Zealand - Auckland

I used http://whois.domaintools.com to get the locations.

The interesting thing is that www.teamness.com was accessible through all the above, but not from my machine in Sweden. I asked a friend from Cyprus who was up at that time to check it with nslookup and it didn't work from his machine either.

And people were on a re-twitting frenzy about the incident.

More links on the matter:

Wednesday, June 10, 2009

Built with what?

I was curious about the server side platforms of some websites I visited recently:

LinkedIn - J2EE
Flickr- PHP
NikonUSA - J2EE
Ebay - Java
Blogspot - Google Front End
Youtube - PHP
Wikipedia - PHP
Stackoverflow - ASP.NET
StumbleUpon - PHP
Twitter - Ruby On Rails
Digg - PHP
TheFreeDictionary - ASP.NET
Wordpress.com - PHP

A big help came from BuiltWith, a technology information profiler tool. It doesn't limit itself to only the framework (which sometimes it doesn't get), but also to the tools used for analytics and tracking, javascript libraries, CDN solutions and more.

One can also see a list of websites using a certain technology. For instance here is some information related to ASP.NET, including a chart that displays the penetration of the technology over a time period on a set of websites queried by BuiltWith.

Friday, June 5, 2009

The WWW prefix

It comes a time in the start of any web business to pick a domain name. This is a laborious task in itself, since pretty much all the cool domain names that resonate with your business are already taken either by the existing competition or by domain pirates.

It was the case with Teamness and after the domain was chosen and we were about to wipe the sweat off our foreheads, we ran into the unruly question of which URL should we promote: www.teamness.com or teamness.com ?

There are many pros or cons on neither of them. Some believe it's better with the www prefix, others think it's nicer without.

The most important thing is to pick one in the beginning and stick to it. We don't want the links pointing to us on the web to be either with www.teamness.com or teamness.com.

Another important thing is that no matter what the visitors are typing, www.teamness.com or teamness.com, they must reach Teamness nevertheless. We think it's incomprehensibly rude to punish someone who typed teamness.com by sending them to the error page. So a redirect from one form to the other is mandatory.

We chose www.teamness.com over teamness.com and one reason had to do with subdomains: we post ramblings to blog.teamness.com, the private stuff is located at my.teamness.com and probably we'll use more subdomains in the future, so the www form acts as a disambiguator.

There is, however, a technical issue with the www-less domain. The cookies will be set for the whole domain. Each cookie has a domain and a path and the browser sends the cookie to the domain specified in there. If the domain is www.teamness.com, the cookie will not be sent to blog.teamness.com, but if the domain is teamness.com, then the cookie will be sent to all subdomains, like blog.teamness.com, my.teamness.com and so on.

Few people use the www prefix in verbal communication as it became implied when referring to a website. Also, when you type the name in the address bar and hit Ctrl+Enter, every browser will add the www. Prefix and append .com.

Friday, May 15, 2009

Learning from mistakes and test cases

Pawel was questioning the usefulness of test cases in one of his blog posts. I dislike useless documentation as much as any sane developer, but I see a strong reason for having test cases, besides outsourcing the tests, as one of the readers pointed out in the comments. My reason is regression testing.

Every time you test a new build of the software, you find bugs. Some are easy to reproduce and appear in daily usage scenarios. You want them fixed, otherwise they will get noticed by the users and most probably you don't want that.

In future builds, you would also like to stay free from the previously discovered bugs. Therefore you make notes about the context and the steps that led to the bug appearance. Surely, not every problem you find is worth keeping track of in a test case. A crash when accessing a web page with valid parameters doesn't usually need a test case, as you'll probably notice it anyway if it will come back.

At a certain point the build becomes stable and free of any obvious problems, which are easily accessible and reproducible. You find less bugs, but more subtle. The contexts in which they appear are not straightforward. Who would've thought to hit the Back and Forward buttons in a wizard 4 times in a row? Still, it's a malfunction and, if it doesn't happen only with Konqueror running on SuSE 6, you would probably want to fix it.

You make a note to check this bug in the next build as well. Throughout time, the list of notes is growing. You need to detail the context and the steps as much as needed, not necessarily as much as possible, because recalling all details in a few months doesn't really work.

Without noticing it, if you didn't want to acknowledge this from the beginning, you have a list of test cases.

In the future, if you think some of the test cases are not worth checking anymore, being obsolete or so, just delete them. Or better yet, mark them obsolete, to be able to revive them with some adjustments.

There is of course, automation, having the computer run a suite of tests for regression, instead of going through a list of test cases yourself. But this comes to show the same thing once again. These automatic tests are, in fact, test cases in a machine readable form.

Wednesday, April 8, 2009

The Catch-22 of functional specifications

Running away from writing functional specifications is a common thing. We prefer to talk about them. When someone joins the team, people from various areas of the project are asked to have a chat with the newcomer and provide her some insights.

However, these discussions have a tendency to repeat themselves in time and also change in a few ways, leading to chaos.

Writing functional specifications helps. Joel Spolsky shows how in a 4-part series, which may look daunting to read due to the length, but it's basically a 30 minutes lecture and it's fun and useful.

Why don't people write specifications, even for a small tool they built, that can be reused and that can clearly state what's going on? The invoked reason is always the same: no time!

This is the Catch-22 of functional specifications: people don't have time to write/maintain specifications, because they have to spend time explaining to their colleagues how things work. And they do this, because there are no up to date specifications.

Thursday, April 2, 2009

IE6 - to support or not to support

Yesterday I was reading this post from the Pingdom blog. I forgot it was the 1st of April, so I thought they went mad.

I realized it's a joke when I saw the first testimonial on the SaveIE6 website mentioned in the post, testimonial written by a certain Steve B. Bangal, Inventor of spaghetti code.

Image by hashmil

First time I read about this call to action by Robert Nyman here. Robert is trying to convince web developers to stop writing special code for Internet Explorer 6. And when you want your web pages to look decent in IE6, you need to write special code. People call it hacks.

We didn't discuss yet if we're going to stop supporting Internet Explorer 6 in Teamness. It's very tempting to do it, given all the frustrations we've been through.

So far, we had 18% of the visits on the public website and 6.5% on the private one coming from IE6. The numbers are small, so I believe we can start the countdown for casting out the hacks.

Sunday, March 29, 2009

Recommended reading with Twitter

"Twitter is a waste of time", some of my friends are saying. "Why do I need to know what others are doing?"

I guess most of the reluctant guys take Twitter's incentive, "What are you doing?", too literally. Surely, this is not interesting in most of the cases. I couldn't care less when others wake up, if their coffee tastes good or if it's raining in London. Except if I'm going to London, of course. But in that case there are 100 websites to check the weather.

Twitter is a flexible platform. There are probably a ton of articles out there explaining the benefits of Twitter and the way one may use it. I guess one of Twitter's strong points resides in its mass usage. You can see what's hot. For instance, just search for "Earth hour" updates to get an idea.

A few days ago I was reading an article, probably this one, and I realized that amongst the things I read on the web, some of them I would like to keep track of, as in the case of the books. And I also want to share them.

I could use Delicious for this, as I do with all my bookmarks, but I wanted something like a stream of articles that are sent to more than my network of people on Delicious.

Twitter to the rescue.

However, I needed something more than just: "Hey, I found this nice piece of work - link", more specifically I wanted to be able to differentiate between other updates and the ones referring to articles.

Therefore I prefixed the update with the string #RR, as an acronym for Recommended Reading. The hash sign "#" is there to indicate some sort of a label for that update.

Ok, now I have the procedure in place, but how do I make these updates stand out from the crowd?

Chris Heilmann had a neat idea on how to dig through his series of updates on Twitter after certain ones. Here he describes how he used Yahoo Pipes to drill after tweets ending in a "§", the character he appends to each update he considers useful. Then he processed the last 5 tweets with Javascript to display them in a panel on his blog.

I shamelessly cloned Chris' pipe and changed it a bit to match my needs. I wanted a feed with the recommended reading updates, which is easy to get by changing a parameter in the pipe URL that tells the pipe what to render as result.

Here is the RSS feed with the recommended reading from Teamness. Please feel free to subscribe to it.

I also kept the Twitter id in the pipe configurable, so if you mark some of your updates in the same way, prefixed with #RR, you may use the same pipe by changing only the id below:

http://pipes.yahoo.com/pipes/pipe.run?_id=839250028c8c36570145554b0bcd190c&_render=rss&id=15095949

Tuesday, March 24, 2009

Trace the sheep

Here is an idea on how to make the customers feel better about the products they're buying.

Last weekend I purchased a garment from New Zealand merino wool clothing company Icebreaker.

On the tag of the shirt there is a nine-digit code called baacode which may be used to trace the garment back to the sheep stations where the merino fibre was grown. One can watch through photos and videos the living conditions of the animals and follow the process of manufacturing the garments.

Here are the ones for my baacode 013E3230F:

Wednesday, March 18, 2009

3 websites to keep track of books

I just finished The cult of the amateur, a book which I mentioned here, referring to time as a precious resource.

And what I realized is that I forgot most of the books I've read. Not that I'm reading that much, but for instance I cannot remember what books I finished 6 years ago. Therefore, I needed a method to keep track and to do this, I looked at 3 websites designed for this purpose.

LibraryThing

As they state: "LibraryThing gets all the right data from Amazon.com and over 690 libraries around the world, including the Library of Congress."

LibraryThing provides tags, a lot of attributes for each book and Zeitgeist - statistics about your activity. The interface is a bit clumsy, but the application is fast and has a lot of features.

They offer another neat thing called Local, which acts like a gateway to local bookstores, libraries and book festivals. This allows me to find a place nearby where I can get a certain book.


GoodReads

GoodReads is also fast, they offer a few basic features of book management, insisting more on social interaction with other fellow readers. The website works around bookshelves, which you may manage in various ways.


Shelfari

Shelfari is the handsome of the group, with a neat look of the site, but at the same time it seems to be the slowest. It has predefined lists for what I plan to read, I'm reading, I've read, Favorites, Own and Wish list.


All the above services offer social interaction. You can see reviews by other people, connect with them and share the books, but I'm not really interested in such features. At least not for now.

In any case, since all these services support importing and exporting the list of books, it's quite easy to switch between them. Actually, for this review I added the books to LibraryThing, then I exported the list and imported it in the other two services.

This worked with a few interventions. After importing from LibraryThing to GoodReads, I found "Harry Potter and the Sorcerer's Stone" in the list. It's true I don't remember all the books that I've read, but I know I didn't read this one. The import from LibraryThing to Shelfari worked like a charm, even though it missed most of my ratings and the tags for the books it didn't find by the ISBN.

In the end, it was a bit difficult to choose between LibraryThing and Shelfari. The latter feels good when using the website and as I said, looks pretty neat, but since I'm mainly using the service for storing information, I opted for the flexibility LibraryThing offers.

Saturday, March 14, 2009

5 more tips and tricks with Teamness

Here are five more tips and tricks with Teamness for your delight. Please also checkout the previous five.

1. Project customizations

When the current opened project is one that you own, a link called "Settings" appear in the main menu that points you to a page where you may choose a logo for your project or set which tabs you would like to be displayed from Tasks, Milestones, Messages, Whiteboards, Files.

2. RSS feeds

In each of the following pages: Dashboard, Tasks, Milestones, Messages, Whiteboards and Files there is a RSS icon in the lower right side of the sidebar. You may use the link for that icon to feed it to any RSS aggregator of your preference. You may also subscribe to data from all the projects you're working on or your own created projects.

3. Email notifications

In the Subscriptions page you may check or uncheck the "Receive email notifications" check-box to switch between receiving or stopping email notifications for tasks, milestones, invitations or any other case.

4. Flag whiteboard version

You may flag as many versions of a whiteboard as you want. This is an easy way to remember that some are special. After you flag a version, a small sign will appear in the list of the versions for that specific one.

5. Export your data

In the Account page you are given the option to pack all the data from your projects as an XML file.

For performance reasons, the export can be performed only once a day. An email with download information will be sent to you as soon as the export is ready.

Wednesday, March 11, 2009

News Mixer and Mona Lisa

The red-headed javascript guru Chris Heilmann, whom I had the pleasure to meet at the Stockholm's GeekMeet in December, published a post describing how he built News Mixer using the newly released Guardian’s open platform content API.

I played a bit with the mixer and I stumbled upon this article which came up in the list of search results for "photography". It talks about photo snappers at Mona Lisa's painting in the Louvre museum in Paris.

Some deeply asleep memories suddenly woke up inside my mind while reading the article.

Image by Bret Arnett


In 1999 I was one of those snappers. I was in Paris with a few friends, participating in a 2 weeks event organized by Best Supélec.

We went to visit Louvre one day and, since our agenda was pretty busy for that day, we rushed to a couple of famous objectives in the museum and Mona Lisa was on top of the list. Following the guiding signs To Mona Lisa, posted strategically all around the place, led us to a crowd of about 3 dozens people snapping photos in front of a glass box protecting the painting.

Another article which came up in the list of search results from News Mixer reads:
People no longer study it. It is no longer a painting, but has become a symbol of a painting," says Darian Leader, author of Stealing the Mona Lisa: What Art Stops Us From Seeing. Looking at the visitors from the front of the crowd, about half have their faces pressed into a camera. Those at the back arch onto tiptoes, hold their arms far above their head and take a picture, paparazzi-style.
[begin quick thought] Doesn't it look a bit like the web today, with all its social interaction sites? [end quick thought]

I remember at that time I wanted to see if my father was making any sense when he told me that the eyes of Mona Lisa follow you no matter what angle you look at the painting. But I couldn't focus to see that, being pushed around by other tourists taking photos.

"Let's just do what everyone does, take a photo and get out of here while alive", I told my friend accompanying me. And so we did. My camera was a simple film one, which, as opposed to the digital devices used today, kept the image to itself as a surprise for when you have developed the film.

Now, I wish I had that photo to include it here. It's probably lost somewhere in a drawer in my parents' house, waiting to be scanned. But a few weeks later, when I got it, I saw 2 doofuses grinning in front of a completely black background, which was the glass in front of the painting, bouncing flash lights from all the cameras around.

In any case, the night cleaner confirms what my father told me:
After 30 years in France, he saw the painting for the first time three days ago when he started this new job with the Louvre. "It's hard to hard to understand what the fuss is about," he says. "But the way that the eyes follow you around the room as you work is disconcerting."

Sunday, March 8, 2009

The value of LinkedIn recommendations

Yesterday I found this blog post in which Jeff Atwood was questioning the value LinkedIn brings to its subscribers.
I've been a member of LinkedIn for almost two years now. I dutifully entered my credentials and kept them up to date. The only other interaction I've had with the service since then has been a continual stream of link requests. I'm selective about who I approve, limiting it to people I've only met in real life. And the net benefit of this selectivity? As far as I can tell, zilch. Nada. Nothing. I did get a cold call from a headhunter once based on my Linked In profile, but I don't consider that a benefit.

Has this service ever been useful to anyone? I'm telling you, Linked In is the digital equivalent of a chain letter. If you really want to contact a friend of a friend (of a friend), just pick up the phone or send an email. If the only way you can reach someone is through this nutty online social pyramid scheme, you don't deserve to be taken seriously. And I can guarantee that you won't be.

I'm not going to opt out of LinkedIn, as Jeff did. I still see a couple of benefits from it, like groups and QA, but I wonder about the value of recommendations.

What's the real value of a recommendation on LinkedIn?

Image by 1Sock


If you were to work with or hire someone, how much emphasis would you set on the recommendations that person has? Keep in mind that they are fully customizable, as the help states:
Yes, Recommendations can be revised, replaced or withdrawn by using the 'Make & Manage Recommendations' page.

Do you know anyone with a negative description in her or his profile? If the answer is no and I tend to believe nobody has one, then is everybody a truly skilled professional that provided only good value for every piece of work that she or he did? Or is this true only for people with any recommendations at all?

I have 61 connections, which might be considered a small number in today's networking situation. Out of these, I only gave one recommendation so far, for an ex-colleague that asked for it. He needed it for a new job he was trying to obtain. In any case, I would do it for every contact that asks me for one.

On the other hand, I got 3 recommendations to date. I felt good when I received these testimonials in my inbox, but my question is how valuable they are for an eventual business contact. I suppose that if I ask all my contact to give me recommendations, I'll get at least 20. So what?

Most of the recommendations I've seen on LinkedIn profiles sound like this:
[Name] is a very creative person, inspirational in the [field] industry, very focused on detail, great at deliverance and effective when is about results. Highly recommended.

I think a recommendation is actually valuable for the one writing it. If I was to pick someone to work with from LinkedIn, I would take these testimonials into account the other way around, by looking at the recommendations that person wrote for her or his contacts. Witty written ones, which break the above mentioned pattern, would be a plus in the evaluation.

Sunday, March 1, 2009

Yet another Geek Meet

Thursday evening I attended my second Geek Meet in Stockholm, organized in bwin's offices near the Cityterminalen. The previous one took place on December 4th and I mentioned it in this post.

This geek meet featured 2 presentations by Mark Wubben and chili con carne. The chili was good, but I think the presentations were in need for a little bit of a twist. The topics discussed by Mark were typography and sIFR in the first part, and ubiquitous computing, including examples of how RFID may be used in daily life, in the second part.

We worked with sIFR 2 in Teamness and because of this it was easy to understand and follow Mark's code examples dealing with sIFR 3. But I would've liked to see more working examples and differences between good and bad ways of applying it on a web page.

Mark was amused about how other new typography tools aim at becoming sIFR replacements, which is a funny thing to aim for, since sIFR itself is a hacking alternative.

Second presentation managed to keep the beer-sipping geeks more attentive, due to inclusion of videos and real life examples from Mark's work in the area.

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.

Friday, January 30, 2009

Eliminate assignment confusions

So you finished brainstorming over an idea and now it's time to get your hands dirty and do the work.

This moment is critical. A task doesn't necessarily mean the same thing for two different persons. Your idea about how to write the new contract may differ from John's, so if the task is not detailed enough, it might lead to the team pulling in different directions.

Image by Sean Rogers1


A solid approach would be to dissect the task down to manageable sub-tasks, that don't allow different interpretations.

Let's say you have to Promote the website for your business. It's a pretty complex task that can be interpreted in many ways.

But if you slice it into more manageable things to do, the bewilderment fades away:
  • Find 10 website directories and enter the website under the proper categories.
  • Write a press release which includes the 5 most useful services the company provides.
  • Submit the press release to 5 online agencies.
  • Write an whitepaper about a solution your company/product is offering.
  • Set up a Google AdWords account and start a campaign.
Besides clarifying the work to be done, other benefits of breaking down a complex task include:
  • You get a better estimation of the duration of the task.
  • The progress gets easier to follow. In my opinion, this approach is more useful than using flimsy percentages which usually get out of control.
  • You have a list of actionable things to do, instead of a complex unclear assignment.

Wednesday, January 28, 2009

5 tips and tricks with Teamness

1. The startup project

If you're working on a few projects at a time, but one of them is the one that takes most of your time, you may choose one of your projects to be the startup project.

This means that each time you enter into your account, the current selected project from the projects list will be the active one. You can set the Startup project in the My details page.

2. Login through Google, Yahoo or both

You don't need to create a new account to be able to use Teamness. Just login with your Google or Yahoo account and you're all set. And if you already have an account created in Teamness, you may associate it with both your Google and Yahoo accounts and login with whichever you prefer.

3. Task titles

You may turn on and off the detailed list view of the Tasks page. When the detailed list view is disabled, only the first line of text from each task is displayed, like a title. This is especially useful when the tasks are quite verbosely described and you want to get an easier overview.



4. Print your project pages

You can print the information from each page with data from your projects, by using the print button available in the upper right corner of the page. For instance, this is how the View milestone page looks like:



5. Browser search bar for Teamness projects

Installing the search plugin allows easy searching your projects' data in Teamness directly from the browser search bar.

Monday, January 26, 2009

Brainstorming remotely

Today I started a short conversation with Pawel Brodzinski, about how teams respond to working exclusively remote. By the way, his blog, called Software Project Management, is a great resource of posts about working with teams and managing the process of software development, so make sure you subscribe to it.

Pawel was talking about the lessons learned from a startup product called Overto, which was closed some time ago. One of the things he mentioned was the value of working in the same place and the way his team started to feel the negative effects of being separated.

Image by timabbott


Since I believe in the remote proficiency of virtual teams, I had a different opinion. I think that after the preliminary discussions around the fresh idea of the product, collaborating in writing instead of ad-hoc meetings may bring great effectiveness into the product.

Written communication versus spoken brainstorming

I mentioned the following arguments for communicating over writing mediums, like email, as opposed to verbal meetings:
  • On email it's more natural to keep the discussion focused on an aspect. Talking makes this a bit chaotic.
  • It's easier to follow a point of view, when you have it written on the screen, maybe with additional links to external resources.
  • When you need to write, you focus more on the points you'd like to add to the discussion. Talking is faster, so it might lead to loosing the focus.
  • Everything that's discussed gets logged, so you avoid the post-meeting confusion over some pieces of conversation or forgotten parts.
  • You're undisturbed in your own mind-mapping flow process and you don't disturb the others.
Brainstorming over emails might be a bit sluggish from the point of view of generating ideas based on ideas being generated by the others, but in my opinion it's better in refining an idea before exposing it.

Let ideas flow, then examine the results

It's pretty common that once an idea is out, it's exposed to being examined. This leads to context switching and instead of focusing on building a list of things to discuss about, you'll find yourself analyzing ideas.

For instance, when you discuss holiday destinations with your spouse, it's probably the case that you find a place, discuss about it, then find another, comment on it and so on.

The drawbacks of this approach are presented more explicitly in the book The Myth of Multitasking. The book includes a demonstration that switching back and forth between two different tasks, makes them take more time than doing them sequentially.

Image by h.koppdelaney

The above example is a bit extreme, since it involves the spouse. Don't do it at home unsupervised. But in my opinion, the same thing applies to teams and brainstorming. It's nothing wrong with getting together for a drink/lunch and discuss about a new product or feature, but I find writing more efficient.

Use mind-mapping, build a list of things that you think are suited, and then pass it on. If the others are doing the same, undisturbed, your team ends up with a more productive flow of ideas and better yet, you have everything written down.

Experiment and stick to what works for you

I'm not trying to say that this model is supposed to work for everyone. We are a team of two people, me and Sorin. It's been like this not only for the time we've been working on Teamness, but since 2005 when we started our company. We used to work from home on different projects for some clients and we always collaborated remotely. This is basically the reason for building Teamness in the first place.

In the beginning we were talking on Skype about clients, implementation details, decisions and so on. We used to have long conversations and sometimes we didn't remember everything that was discussed. We still have conversations, but when we talk about new features or design decisions, we use Teamness. We write the proposal in a message and then comment on it. This keeps it focused. We also use email from time to time, but what I want to stress upon here is that we're trying to keep the verbal communication related to our projects to a minimum, since it didn't prove efficient for us.

Please also note that I'm not trying to express that social interaction is bad, like having lunch with your colleagues or coffee breaks discussions. But when your product has 1000 features, writing things down becomes the key ingredient for a solid collaboration.

Thursday, January 22, 2009

How to welcome a new member in a virtual team

Teams grow and change. New members arrive and they need to be accustomed to the culture of the organization, the project and the process.

This might be a frustrating experience both for the newcomer and for the team. Virtual environment makes it even worse. Lunch breaks with the colleagues to ease the process are not possible and there is no watercooler for chitchat.

Image by etringita


In an office environment, it's a common practice to have a couple of meetings in order to introduce the new person to the project she's supposed to work or into the organization. But in a virtual environment, it's a bit harder to put the focus on meetings. Web conferences can be done, but they basically help only with the introduction, not with the integration.

In my opinion, a virtual organization should accomplish at least the following prerequisites in order to make the new one productive as soon as possible.

Make the newcomer feel part of the team

That's easier with a physical presence: an actual office, going out for lunch with colleagues, t-shirts with the logo etc. In an online environment, if the organization has a blog make an author account for the new guy and encourage she/him to write a post to describe his feelings regarding the new environment.

Assign a meaningful role for the newcomer

She or he might feel overwhelmed with the information needed to be absorbed.

The tricky part is that you cannot afford to have one of the team members absorbing all the information the other members have. In theory, it's a never ending process: by the time she would have the knowledge an existing member had, that one would be far ahead. And after all, the knowledge one team member has shouldn't completely overlap with another. Everyone should bring something new.

The solution is to encourage the new one to dive into work and try to complete an easy task. The task should be a real one, because otherwise the motivation to do it will be diminished. This way you also bring out the practical aspects of the guy, which is probably why you wanted him in the team in the first place.

Have all the tools configured for the new account

Don't let the guy wait around a couple of days or weeks because he doesn't have access to the tools you're using with the others. The new account must be easily created with the appropriate rights for the newcomer in every application you're using: blog, wiki, tasks tool etc.

Image by tochis


Document your decisions and procedures

This is an ongoing process, from which everyone in the team benefit, but it will prove itself useful for a new member as well.

There would still be a lot of questions and interruptions for you and your team to help the new one get acquainted, but a lot less than without a proper documentation. And the documentation shouldn't be built just before a new one comes, but throughout the life of the project/organization.

This is so easy and straightforward to do, but still disregarded by many: write everything down. If you need to explain a procedure or a feature to one of the colleagues, after you discuss on it go and write it down. Don't use applications designed for something else, like Word or Visio or other UML or word processor, but some simple text wiki/message environment, which allows for easy editing afterward and it's easy to share.

Procedures usually change in time, so the more difficult you make it to update them, by drawing schemas and format text, the less likely that you'll do it, rendering them obsolete.

Provide feedback often

Don't keep the newcomer in suspense. Let him know often where to pay attention, what to improve in the process and ask him questions. Leaving the guy one week to read documentation is boring and will make him loose focus.

Keep an up-to-date list with the existing members and their roles

The new guy will have questions. A lot of them. Don't allow for his questions to bounce around from one guy to another, until he finds the proper person to ask. Maintaining a web page with who's in the team and what everyone is working on might be a time saver.

Monday, January 19, 2009

Social aspects of productive virtual teams

When we think about efficiency in a virtual team, we often relate this to being effective in a practical manner, like optimizing our workflow in the online environment or having the right tools to interact with our colleagues.

But there is also the social aspect of such a team.

Image by Allis0n J


Even if the people are not together in the same office, social interactions still take place. In an article called Working Together … When Apart, the author gathered what she calls ten golden rules for making virtual teams more productive.

The list is based on a research that surveyed more than 1500 virtual-team members and leaders from 55 teams across Europe and U.S. and it also covers social facets, as selecting team members based on their relationships or encouraging frequent communication.

These are the 10 hints:

1. Invest in an online resource where members can learn quickly about one another.
2. Choose a few team members who already know each other.
3. Identify "boundary spanners" and ensure that they make up at least 15% of the team.
4. Cultivate boundary spanners as a regular part of companywide practices and processes.
5. Break the team’s work up into modules so that progress in one location is not overly dependent on progress in another.
6. Create an online site where a team can collaborate, exchange ideas and inspire one another.
7. Encourage frequent communication. But don’t try to force social gatherings.
8. Assign only tasks that are challenging and interesting.
9. Ensure the task is meaningful to the team and the company.
10. When building a virtual team, solicit volunteers as much as possible.

In the article you'll also find examples about how virtual teams in well-known companies employed the hints.

The rules cannot be applied in every context. Not all the tasks can be challenging and interesting, so point 8 has to remain unsatisfied from time to time. But the list remains relevant for both small and large teams.

Friday, January 16, 2009

Managing project collaboration

I'm sometimes asked if Teamness is able to solve various specific project management issues, like financial resources dependencies or risk management.

Not really. Teamness is a project collaboration tool. It was born with the intent to help people gather their projects data in a centralized place, from where they would be able to share it with their colleagues.

Easy online project collaboration for teams is our tagline. Saying that I'm currently managing to collaborate on my projects using Teamness doesn't necessarily mean that Teamness is acting like a project management tool, in a way a CEO would see it.

Image by David


We're not building Teamness exclusively for people in suits, but also for the aspiring freelancer or members of a family who work together on home projects. You don't need a MBA to use it, but merely a Google or Yahoo account.

We want Teamness to be flexible enough to accommodate any collaborative task you're taking. After all, real work is done by real people, which in my opinion get motivated by awarding goals, not well connected Gantt charts.

Teamness has been working fine for our purpose so far. By using it, we see different aspects that need to be improved and we're adding them in the task list and we're open to suggestions and feedback.

However, Teamness was not designed with the intent to help a project manager manage her or his team, but to help a team manage their projects together.

Wednesday, January 14, 2009

Podcasts to help with your work

If you feel like getting away from the news or if you're trying to find new ways to keep your headphones on most of the time, here's a post about how you may fill your mp3 player with podcasts and get hints while you prepare breakfast.

One podcast you may add to your list is this one, which covers some topics on virtual teams, like challenges, social aspects and trends. I don't share their affinity with instant messaging tools used for work interaction.

Make sure you also check and subscribe to IT Conversations, a network with great talks on various topics, from education and history to investments and social networks.

Tuesday, January 13, 2009

URL got shorty

On the web we're in a constant chase for higher traffic, bigger revenues, more posts and greater designs, but one thing we'd like to be short: the URL.

Some URLs are not only long, but unpleasant, like links to products on ebay:
http://cgi.ebay.com/Apple-Iphone-3G-8GB-unlocked-Brand-new-No-Contract_W0QQitemZ140290947446QQcmdZViewItemQQptZCell_Phones?hash=item140290947446&_trksid=p3286.c0.m14&_trkparms=72%3A570|66%3A2|65%3A12|39%3A1|240%3A1307|301%3A1|293%3A1|294%3A50

To solve this problem, services that shrink URLs appeared. They're useful when you want to give a friend a link like the one above over IM or email. Short URLs are also handy in services like Twitter, where messages are limited to 140 characters. A short URL leaves more space for the actual text.

Image by B&M Photography


So far we tried three services that provide short aliases to redirect long URLs:

TinyURL

This is probably the most known service of its kind. It's been around for a long time, since 2002, and there are some funny stories related to its early algorithm for generating the short URLs' identifiers.

One neat option of TinyURL is that you may create aliases like: tinyurl.com/teamness-uptime-public or tinyurl.com/inboxdiet.

Here is an article about TinyURL and his creator, Kevin Gilbertson.

Tweetburner

When we started using Twitter, Tweetburner came in to help us generate short links and keep track of user clicks. They offer some basic analytics and daily graphs of the clicks you get on the links. We generated 35 Twurls (this is how they name the short URLs), which have been clicked 669 times until now.

Cligs

Tweetburner did a good job, until it started being quite slow for us. Then we switched to Cligs. Behind the funny name, they're offering:
  • real time analytics
  • rules you may define to direct people to different web pages, based on their geo-location
  • a world map with the hits for a clig
  • an API on which several tools were based
There are other services of this type, like shorl, txt.exe or bit.ly, but so far Cligs has been the one for us.

When doing reasearch for this post, I came across gog.is. It's an URL shortner for Google search. If you put the keywords in the query, like http://gog.is/easy,team,collaboration it will redirect you to the Google search for "easy team collaboration".

Friday, January 9, 2009

Planning a project

In a virtual team, a certain degree of coordination is needed to get the work done. This depends on the team size, which is usually determined by the project magnitude.

But even for personal projects, you still have a plan in mind before you begin working. In my opinion, a project plan, big or small, has to incorporate the following elements:
  • Scope
  • Requirements
  • Tasks
  • Schedules
  • Cost estimates
All of them are usually subject to change throughout the project lifespan, but you still have to take them into account when starting a project.

Image by anesterik


Scope
The scope is a high-level vision on the project. It provides a justification for the effort and describes the project by including the following:
  • Goals - what is the project supposed to achieve?
  • Major milestones - when will the goals be accomplished?
Requirements
The requirements are your project's necessities, which will include at least the following:
  • People - your team, which may vary along the way.
  • Tools - Internet access, email, collaboration platform, skype and/or any other supplies of any kind.
Tasks
You may start with a set of tasks for each person involved. Each task may have a brief or a long description, according to the intended audience.

Teamness has a nifty way of presenting tasks, either showing the whole description or only the first line, considered as a brief or title. This is per account, so team members familiar with the actions to be performed may look only after the title, while others may choose to see the details.

Schedules
Once a task list is in place, a schedule might be started to take shape through milestones. The difficult part is knowing how much a task will take, but this doesn't mean you cannot have an overview. You can modify the due dates later, also pushing the subsequent milestones.

A virtual team would probably be distributed around the globe, thus celebrating different holidays. Earth calendar is a daybook of holidays and celebrations around the world, which can help you know which members of your team would be preparing a celebration dinner when you're getting ready for a new deadline.

Cost estimate
Once you know how long your project would take, the size of the team and their availability and which tools you need, you can create an initial rough cost estimate. This is based on the information from high-level scope, along with the tasks listed so far, but it will be refined as the work progresses by eliminating the "black box" evaluations.

Thursday, January 8, 2009

Maintaining agility with Teamness

Not being tied to a particular process, such as Scrum, might be a flexibility advantage to a team looking to follow its own process of development.

Teamness is a loose structure web tool that allows a small lightweight agile team to use its own custom project work approach.

Image by Scientific deliriums


Here is a set of hints on how to combine Tasks, Messages and Milestones within Teamness to manage your projects in an agile way in 2009 and beyond.

1. Use Messages for briefs and support requests

A brief for functionality or a support ticket can be a Message entered into Teamness within the appropriate group. Once the brief is processed or completed, this might be marked by moving the Message into a different group.


2. Use Milestones to create project goals and timings

Generally the project manager will create the Milestone after discussing with the team about time and availability, in regard to customer priorities.

Milestones are the glue which bind together details (Messages) and work (Tasks). Once you create a Milestone for a list of tasks, you can now bind the Messages to it.

Selecting a Milestone gives visibility into both the customer and team facing aspects.


3. Group Tasks under Milestones

Each Milestone can have tasks assigned to it. This task list should be set up to allow you to track time against it.

By having a single goal with track-able time you can then start making the actual work declared as Tasks. This allows an individual or mini-team to manage their own specific goals without making the high level project plan dirty.

This approach of using task lists also means that you can track your progress against a single Milestone which means you don't have to move all your tasks from week to week.

Milestones can be set up really fast and yet they can be moved if other demands come in, without having to micromanage a list of items which cannot be done in time anymore.

You also have the possibility to shift in time the subsequent milestones of the one you intend to move.