Need someone to lead product management at your software company? I build high-craft software and the teams that build it. I'm looking for my next opportunity. Check out my resume and get in touch.

This is the blog of Adam Kalsey. Unusual depth and complexity. Rich, full body with a hint of nutty earthiness.

Personal

Site Refactoring

Freshness Warning
This blog post is over 22 years old. It's possible that the information you read below isn't current and the links no longer work.

The process of creating a structure for this site is a real-world case study for dealing with moved pages, dead links, categorizing content, and more.

When I created this site, I really didn’t have any concrete plans for it. I had some photos to share with family and friends. I posted the notes and assignments for a class I taught. What I had was content that put up in a haphazard fashion with no real structure.

The process of creating a structure for this site is a real-world case study for dealing with moved pages, dead links, categorizing content, and more.

Card sorting

How do you determine where pages go in a Web site? My site, like most personal Web sites, has rather diverse content. There’s some photos from trips and parties, a martini recipe, a weblog, some longer writings, and a couple of applications that I have written.

Unfortunately, the manner in which this site grew meant that the early content that I had created was usually just stuck in random places. The newer content was placed in a hastily organized structure that wasn’t very flexible.

What I needed was a way to categorize everything and create a site structure that could be extended to support future growth of the site. To determine a structure, I used a technique called card sorting. I cut out slips of paper for every item on my site and went through them, placing similar items in piles. I did this several times until I had all of the content organized into a few categories.

For an in-depth look at card sorting, you can read articles in Intranet Journal or developerWorks.

Moved Pages

Once my card sorting exercise was complete, I had a logical structure for the site that should be able to support the addition of new stuff without the need of a complete reorganization. But to place all of my existing content into the new structure meant moving files.

In the past, when I placed something on this site, it stayed where it was. When things get moved around, it makes life difficult on people. Owners of other sites that have linked to me now have dead links. People with bookmarks have bookmarks to missing pages. It’s a bad deal all around. So I never moved anything.

But now I had a solid reason for moving my files around. Placing everything into the new structure would make it easier to manage in the future. I made the decision to move everything into the new structure, but also decided to minimize the problems created by doing so. I modified the page that comes up when you request a file that is not found to check if the page that was requested had moved. If so, the user is automatically redirected to the new location without any interruption. So now people won’t suddenly have broken links and bookmarks just because I decided to rearrange things around here.

If you would like to do the same thing to your site, you’ll need a little knowledge of regular expressions and the bit of JavaScript code found below. You can learn more about regular expressions in JavaScript from Webreference.

<script language="JavaScript">
<!--

var url = location.href
var reg

// Redirect requests for the old Yosemite URL to the new one
reg = /\/yosemite(.*)/i
if (reg.test(url))
location.replace("/photos/yosemite/")

// Redirect requests for all pages in /foo/ to the new
// location in /articles/foo/

reg = /\/foo/(.*)/i
if (reg.test(url))
location.replace("/articles/foo/" + RegExp.$1)

// Keep adding your own.

//-->
</script>

Refactoring

Over at Elegant Hack, Christina had the clever idea of applying the software engineering concept of refactoring to Web site maintenance and improvement. Refactoring is the process of making small changes to a program that improve the overall execution without introducing new features (and hopefully no new bugs). The basic idea is to leave things better than you found them.

Over the last few days, I’ve been engaging in the refactoring of this web site. I took 20 minutes to clean up some of my CSS. I spent an hour standardizing the TITLE tags on all my pages.

With a little planning and some work, I have created a solid structure for my site that should support anything I would like to add in the future. A flexible architecture is key to growing while avoiding having to reorganize things again later.

Every day, I can pick something off my to-do list and spend a few minutes cleaning things up. By doing it this way, I don’t have to wait until I can spend a large block of time making changes all at once.

Recently Written

Building the Next Big Thing: A Framework for Your Second Product
Nov 19: You need a first product sooner than you think. Here's a framework for helping you identify a winner.
A Framework for Scaling product teams
Oct 9: The people, processes, and systems that make up a product organization change radically as you go through the stages of a company. This framework will guide that scaling.
My Networked Webcam Setup
Sep 25: A writeup of my network-powered conference call camera setup.
Roadmap Outcomes, not Features
Sep 4: Drive success by roadmapping the outcomes you'll create instead of the features you'll deliver.
Different roadmaps for different folks
Sep 2: The key to effective roadmapping? Different views for different needs.
Micromanaging and competence
Jul 2: Providing feedback or instruction can be seen as micromanagement unless you provide context.
My productivity operating system
Jun 24: A framework for super-charging productivity on the things that matter.
Great product managers own the outcomes
May 14: Being a product manager means never having to say, "that's not my job."

Older...

What I'm Reading