Wednesday, October 17, 2007

Good-bye favorites, hello del.icio.us

Summary: Learn how you can keep your bookmarks and favorites synchronized between multiple browsers and computers.

UPDATE: Recently del.icio.us changed the name (and URL) to Delicious.

If you don't know how to keep your Internet bookmarks (or favorites) synchronized across Web browsers and computers, stop whatever you are doing and check out del.icio.us (pronounced delicious, as in delicious dinner). Don't mind a weird name (and even more weird spelling), del.icio.us (recently acquired by Yahoo!) is a very capable service, which can end your browser synchronization hassles. Although other services offer the same (or similar) functionality, I like del.icio.us because it meets all of my bookmark synchronization needs.

I use two Web browsers -- Firefox and Internet Explorer (IE) -- on several computers, at work and at home. Firefox is my primary browser, IE is secondary. [I use IE because some sites -- in particular, certain enterprise applications I use at work -- only work in full-blown IE, even the IETab extension does not help.] My computers run Vista and XP. I have unrestricted access to the Internet from home, but corporate firewall rules do not allow connection to some social networking sites at work and when using VPN.

Based on these assumptions, I expect a bookmark synchronization service to do the following:
  1. Support IE and Firefox
    I don't care about Opera and other browsers at this point.

  2. Support multiple computers
    It must synchronize bookmarks on at least three computers.

  3. Work on Vista and XP
    Because I use different operating systems, it cannot be Vista- or XP-specific solution.

  4. Respect corporate firewall policies
    Although these policies can change, the bookmark synchronizer must at least work within the most common limitations.

  5. No additional hardware
    Having to carry software or data files on a USB drive is too much hassle.

  6. No manual operations
    There should be no need to start bookmark synchronization jobs. All work must be done transparently to the user.

  7. No new browser toolbars
    Please, no more browser toolbars. I would not mind having to install a browser extension, but its functionality should not be dependent on a whole new toolbar. Context menus, additional menu options, new buttons added to existing toolbars, and an optional toolbar providing enhanced functionality, are fine, though.

  8. Web-based access to favorites
    Bookmarks must be accessible from any computer without dependency on special software (extensions/add-ons). This feature would allow accessing bookmarks on someone else's computer, e.g. in a public library.

  9. No need for a personal server
    Some bookmark synchronizers require a personal FTP server; not everybody has one.

  10. Must be free
    I do not mind commercial software, but free is better.
Before trying del.icio.us, I tested a number of free browser synchronization services, such as BookKit and Zinkmo. Unfortunately (or fortunately), I could not make them work. [It has been a while, though, so they may have improved since then.] My other idea was to use the PlainOldFavorites extension in Firefox and keep IE favorites in sync between computers with the help of FolderShare, but because the corporate firewall blocks access to FolderShare and I did not find a comparable provider, I had to abandon this approach, too.

After spending a lot of time and getting nowhere, I finally decided to try social bookmarking. I considered several services including Google Bookmarks, Yahoo Bookmarks, Windows Live Favorites, and others, but I liked del.icio.us best. [I became particularly interested in del.icio.us after reading an interview with its founder Joshua Schachter published in Founders at Work: Stories of Startups' Early Days, which, by the way, is a fascinating book.]

Del.isio.us is free, but to use it you must first register to create an account, which will hold your personal preferences and favorites. After registering, open Firefox and install the del.icio.us Bookmarks add-on. If you use IE, open it and install the del.icio.us Buttons extension.

Both extensions add two buttons to the browsers' toolbars: Search (the one that looks like a four-square chess pattern) and Bookmark (or tag).

The Search button gives you access to your saved bookmarks. It functions differently in Firefox and IE. In Firefox, the Search button opens bookmarks in a sidebar. In IE, it opens bookmarks in the current window (tab), which is not the best approach, but since I do not use IE often, I can live with it. The Bookmark button, allows you to bookmark a current page. When you click this button, del.icio.us opens the Add Bookmark dialog box, where you can override the bookmark name, enter notes, and assign tags. In some cases, del.icio.us will suggest tags for you, but you can always add your own (more on tags later).

In addition to the Search and Bookmark buttons, the Firefox extension also installs a new toolbar and a new main menu item. I don't see the value of the toolbar, so I always hide it in the browser (by unchecking the View-Toolbars-del.icio.us Toolbar menu option). The menu contains shortcuts to common operations, such as Add Bookmarks, Your Bookmarks, Manage Favorite Tags, How Do I Use This, and others. In IE, you can only access these features on the Web from your del.icio.us account page.

Before switching to del.icio.us, I was a bit cautious about deviating from a traditional hierarchical structure of Firefox bookmarks and IE favorites, but once I started using tags, I loved them. Tags make it easier to classify, manage, and find bookmarks. For example, say I want to add the Microsoft [Designs the] iPod [Package] link to my bookmarks [if you haven't seen this video, it's quite funny]. If I were to use traditional bookmarks, under which folder should I save it? Should it go under Video? Microsoft? Humor? Something else? And will I remember the folder under which I save the bookmark? Del.icio.us' tag-based approach solves these problems. You just define Video, Microsoft, Humor, or whatever seems appropriate, as the bookmark tags, and you can can navigate to the bookmark by drilling down the tag tree starting from any one of them. For example, you can go Video-Humor-Microsoft, or Video-Microsoft-Humor, or Humor-Microsoft-Video, and so on.

Del.icio.us makes it easy to add, rename, delete, and assign tags. Once you make the change, it will be immediaely reflected in the bookmark navigation tree. In addition to tag-based navigation, you can search for specific words in the bookmark names, check the most recently added bookmarks, and use other search and browsing techniques.

When you bookmark a page, by default, del.icio.us shares your bookmark with the community; use the do not share check box to keep the bookmark to yourself.

Del.icio.us allows you to import Firefox bookmarks and IE favorites, although I did not try this option. You can also export bookmarks from del.icio.us, in case you decide to use a different service.

I haven't looked closer at other bookmarking service, but most of them should be comparable, and maybe even better, than del.icio.us (they sure have better names), but if you haven't picked one, yet, try del.icio.us and you will never want to go back to your old bookmarks... or favorites.

P.S. If your primary browser is Firefox, in addition to del.icio.us, I also recommend installing the Google Browser Sync extension. It can help you sync the toolbar buttons, persistent cookies, history, and other settings between different computers. Thanks to Amith for the recommendation.

Additional references:
Browser synchronizers
Create custom bookmarks of your favorite web sites using only2clicks
Keep Your Bookmarks Organized Online with Quick Bookmarks
Sync bookmarks between IE and Firefox

Tuesday, October 9, 2007

Can a man change?

Summary: How can you improve efficiency of an organization? Hire great employees. Fire bad ones. But, first check out the references mentioned in this article.

Madame de Merteuil:"You are an awful man."
Monsieur de Valmont:"Do you think a man can change?"
Madame de Merteuil:"Yes. For the worse."
From "Valmont"

In the article The causes of greatness, Bob Lewis explains what makes an organization great focusing on the value of people. The article offers several astute observations, but the main idea can be summarized in the following statement:
"[I]f you want an organization that works, you'll get more leverage from hiring great employees than from any other single effort you can undertake."
Among high-tech companies, Google understands the importance of hiring quality workers better than most. In case you haven't heard about Google's hiring philosophy, it's based on two simple rules:
  1. Only hire candidates who are above the mean of your current employees;
    and
  2. There is no hiring manager.
Peter Norvig, Director of Google Research, explains how this approach helps Google address the shortcomings of traditional hiring practices:
"Whenever you give project managers responsibility for hiring for their own projects they'll take the best candidate in the pool, even if that candidate is sub-standard for the company, because every manager wants some help for their project rather than no help. That's why we do all hiring at the company level, not the project level."
Google's hiring philosophy seems to pay off (at least, if you believe Google employees who like to brag how smart their co-workers are); unfortunately, it is not that common. Most companies make their hiring decisions under the following premises:
  1. If you do not hire someone today, your open req* may be gone tomorrow (due to cost saving initiatives, reorganization, outsourcing, etc).
  2. Considering the previous statement, don't waste time searching for the best candidate; just pick the first applicant, who seems to fit the job description.
Organizations operating under such premises tend to underestimate the implications of bad hiring decisions because they succumb to a couple of fallacies.
Fallacy #1: Bad workers will do a good job if they follow an approved process/methodology/procedure (CMMi, XP, Agile, SCRUM, etc).
This belief is based on the assumption that processes are more important than people. Those who hold this belief think that any organizational problem can be solved with the help of a good process.

While processes have their place in the organization, managers tend to overestimate their value because relying on processes gives them a (false) sense of control. If your organization is not effective, it is comforting to believe that once you adopt a new process, things will change to the better. If you admit that bad employees are at the root of your problems, you will have to confront people and either make them change or control their behavior, something good managers do not enjoy doing.

The good news is that certain processes adopted by software development teams can reduce the number of problems caused by bad developers. Juval Löwy once wrote:
"Rapid development tools will make bad developers worse, because they allow them to produce bad code faster."
Likewise, by introducing certain bureaucratic overhead, processes can make bad developers less bad, because they will force them to produce bad code slower. However, if you're stuck with mediocre developers, no process will make your organization sufficiently effective. If you agree with Steve Yagge, who suggested that
"Bad developers, who constitute the majority of all developers worldwide, can write bad code in any language you throw at them,"
you should agree that bad developers can write bad code under any process you throw at them. This brings us to the fallacy of personal improvement.
Fallacy #2: Certain measures -- such as effective supervision, mentoring, a development plan -- can turn bad workers into good workers.
I'm not questioning a possibility of human self-improvement, but I cannot seem to recall a single case of a bad worker turning good. I have witnessed good workers becoming better, average workers staying about the same, but bad workers tend to remain bad.

Some bad workers do not improve because they don't even understand that they are bad (or how bad they are). Cornell University researches conducting the Unskilled and Unaware of It study concluded:
"When one fails to recognize that he or she has performed poorly, the individual is left assuming that they have performed well. As a result, the incompetent will tend to grossly overestimate their skills and abilities." (read the review)
The study suggests that people can be trained to "recognize the limitations of their abilities," but what about actual working skills, such as ability to write software? According to the findings of A cognitive study of early learning of programming, most people can't be taught programming. Nevertheless, many of those who can't learn to program somehow manage to get Computer Science degrees and eventually get programming jobs.

So what's a manager to do? To paraphrase Bob Lewis,
"If you want an organization that works, you'll get more leverage from firing bad employees than from any other single effort you can undertake."
This may sound harsh, but for organizations which do not invest in a rigorous -- a'la Google -- hiring procedure, getting rid of bad workers (not necessarily via layoffs) may be the most effective method of achieving efficiency. I'm not advocating such draconian measures as Jack Welch's annual firing of the bottom 10% of his managers (although, if implemented correctly it could be quite effective), but getting rid of people, who cannot do their job, is essential to the health of the organization. If you are interested in better ideas, read the references below.

Additional references:
How Do You Find the Best Employees for Your Company?: Things that do not help in hiring great developers.
Done, and Get Things Smart: How do you find great employees?
A Field Guide to Developers: What it’s going to take to be a top choice for top developers.
A holiday card to the industry - 2007: People, process, and technology: it's a simple formula that describes what makes any business operate.
Converting Capital Into Software That Works: A software company has to think of recruiting the right people as its number one problem.
Finding Great Developers: You can receive thousands of job applications and never see a great software developer.
Hazards of Hiring: Eric Sink offers guidelines for handling tough hiring decisions in a small ISV.
Google: Ten Golden Rules: How Google gets the most out of knowledge workers.
Hitting the High Notes: The lagniappe that you get from the talented software developers is your only hope for remarkableness.
How Google woos the best and brightest: Going from 150,000 resumes per month to 9 hires per day.
Interviewing with Google: Benji Smith shares first-hand experience with the Google interviewing process.
Iz.I.T.4.V.S.P: Suggestions how Intel should handle redeployment (layoffs).
News: Analysis of the "we hire the top 1%" claims.
No Matter What They Tell You, It's a People Problem: Usually the things that make or break a project are process and people issues.
Separating Programming Sheep from Non-Programming Goats: There are two populations: those who can program, and those who cannot.
Sorting Resumes: Looking for negative clues in resumes.
The Guerrilla Guide to Interviewing: Don’t hire people that you aren’t sure about.
Whaddaya Mean, You Can't Find Programmers?: How to find people and convince them to work for you.
Why Can't Programmers... Program?: 199 out of 200 applicants for every programming job can’t write code at all.

Bonus:
Employees Fight Abusive Supervisors with Lower Productivity: Researchers have quantified the ways employees quietly fight back despotic supervisors.


*Open req is a corporate slang for an open requisition (position).