A change is gonna come

I drove a historic route this morning on the way to work. Between Arlington Heights and Lexington runs part of Paul Revere’s route, where he famously rode through the countryside warning the people that the British were coming. I followed the route to Lexington Green, where stands a statue commemorating what happened next.

3212059455_6c8e4c4de2_o

It’s not a statue of Paul Revere. It’s a statue of an unknown minuteman, standing at the entrance to the green where the citizens of Lexington stood up to the British regulars and helped to begin our fight for the liberty to decide our own fate.

Today we celebrate a historic moment, the election of our first black President. There’s so much he stands for–our ability to transcend past griefs, our turning our back on mediocrity and division and selecting someone who can lead us through our troubles. But the Lexington Green has a word to say about today as well:

It’s not just about the leader and the message, though without the right leader and the right message nothing will happen. It’s about what happens next, about individuals taking up the call and the charge and standing up to make a change. I haven’t felt much of that about our country in the last little bit, but I feel it today.

Grab bag: Liquidity traps and liquid landings

Grab bag: Accountability

Roadmaps in Agile, part 1

As a product manager in an agile development model, one of the most difficult things to do is building a roadmap. This is because making feature commitments for six to nine months out feels contrary to the spirit of being “agile” and maintaining flexibility to change course to support the needs of the business.

Why is having a roadmap when you’re agile so hard? One word: sales. It’s relatively easy (provided you know how to do it) to move requirements around when the only people you’re communicating with are internal stakeholders. It’s much harder when a sales guy has already told the Big Prospect that the frimfram feature is going to be added in third quarter, based on a roadmap that he saw six months ago. Sales cycles have their own momentum, they have their own set of unforeseen requirements that weren’t planned for, and they’re very hard to sync up with a roadmap that’s moving to respond to current and future needs of the company and customers.

So how do you do it? There are three important dimensions to any roadmap, and those are priorities, cost/benefit, and time. Getting the first two properly defined is critically important; once you have that, distributing the roadmap across time is more of a mechanical exercise (but not without its hazards). First, though you have to know:

What do we need to do? If you’re a product manager who documents every requirement you ever unearth from a customer, prospect, sales guy, internal operations perspective, or executive, stores it in a backlog, and periodically revisits the backlog to organize and categorize it, this step might actually be relatively easy. If not, it will require some legwork–talk with each stakeholder, make sure customer voices are represented through input from the sales force (and/or SalesForce), write everything down, send the list around and make sure that nothing got missed.

What do we do first? Prioritization has to be done as a conversation; there’s no way around it. You can do prioritization in a vacuum if you’re using a static set of priorities (high, medium, low, for example), but if you’re stack ranking your requirements (which I firmly believe is the best way to go) you need the appropriate stakeholders to get together and make the tradeoffs. To do a good job in stack ranking, it helps to set some ground rules (e.g. the requirement contributes to current revenue, builds groundwork for future revenue, or reduces operational costs) and set some rules about how those translate into ranks (e.g. current revenue more important than future revenue). There are some finer dimensions to the problem; generally there are different types of requirements and different types of people who will work on them, so if you slice the prioritized list by those dimensions do the priorities still make sense? (They should.)

What’s the cost and benefit? Ideally this should be done before prioritization, since it informs it, particularly the benefit part. If you have a major initiative that’s supposed to drive new business, someone should be able to estimate how much new  business it will drive. Engineering requirements can be estimated by cost. Combining the two can help to drive prioritization. It’s important to know the details of the business model behind the requirement, too. If the revenue plan for the requirement assumes that it will help to drive revenue for two quarters, it had better be released by the middle of the year.

When do we do what? Here’s where the rubber hits the road. Up until this point, it’s better to deal with requirements as high level objects–epics of work that can span multiple teams and releases. But to actually assign features to releases, you need to be able to at least guess at a high level division of work (we’ll work on this for three release cycles before it becomes available to the public) and of responsibility (both teams A and C contribute, so we need to put something in both team’s work plans).

The reason that time based planning is trickier, too, is that it needs to make explicit assumptions about certainty. You can do a pretty concrete plan for releases early in the calendar year, because you know that the business requirements won’t change too much between planning time and the release date. But the back half of the year is far trickier. So each release during the year needs an increasing “change reserve,” unallocated capacity that can take on new requirements. Alternatively, management has to be comfortable with the proposition that the out quarters will be highly subject to change.

Once you’ve done the basic blocking and tackling, the real fun begins: how do you communicate this nuanced plan in a consumable format to management and sales? Well, that’s part 2.

Grab bag: Omens of change

Grab bag: Tuesday is the new Monday edition

Grab bag: Forgotten and unforgettable

Remembering Gilly Sullivan

UVA Today: Gilly Sullivan, Former U.Va. Alumni Association Director, Has Died.

If the worth of a man is measured in the impact that he left on the lives of others, Gilly Sullivan was the most important man I’ve ever known. He was dedicated to helping students at the University of Virginia and to ensuring that Mr. Jefferson’s principles of student self-governance were consistently upheld, and he was able to produce miracles in a way that no one else associated with the institution seemed able.

I had three separate interactions with Gilly. In one, he was the bearer of the news that I had won an alumni-sponsored scholarship that I didn’t know existed and had never applied for. In the second, he helped save the magazine that I had cofounded just an issue before when our business manager decided not to sell any ads and not to tell me about it.

In the third, which began before I got to the University and continued the whole time I was there, he was the guardian angel that helped ensure the survival of the Virginia Glee Club as an independent organization when the UVA music department wanted to subsume it into a mixed chorus. He did it by ensuring that the music department couldn’t claim any control over the Glee Club’s alumni-funded endowment, thus ensuring we’d have some way to survive without department support. He was similarly instrumental in helping the revival of the UVA Women’s Chorus.

I wrote a Wikipedia entry for Gilly a few months ago but never shared it with the broader world until this week; I wanted to dig deeper to find more information about the man. For all his influence, he left a remarkably small impact on the news world–a few articles around the time he retired and that was it. He deserved more praise than he got, but I think he knew how much of a difference he made to students like me.

Grab bag: good news, sad news

Grab bag: Bye bye DRM edition

Macworld Keynote 2009

It’s not going to be a Stevenote (and on that note, best wishes to Steve as he gets his hormones back in balance and gets some protein in his system). But I’ll be watching all the more closely, to see how Phil Schiller takes on the challenge of igniting excitement in the Mac faithful. Like many product managers, I have picked up a few tips about presenting product over the years from Steve, and Phil will have his own style and his own techniques which I can hopefully also snarf.

Product predictions? I like John Gruber’s, and can lend credence to the iLife prediction because I finally got the most recent version as a Christmas present. Pretty sure there won’t be any new iPhone products announced today though (outside of the iPhone version of Delicious Library).

I’m pretty sure that Apple won’t be announcing the Mac Wheel today, though (hat tip to Chris Eng for the pointer):

Apple Introduces Revolutionary New Laptop With No Keyboard

Grab bag: Back to work!

Stupid breakage of the day: Ubiquity and MobileMe

This morning I tried to log into MobileMe, which has mostly been working well recently, and got an unsupported browser screen telling me I needed to be running Firefox 2 or later, or Safari. Only problem was I was running Firefox 3.0.5.

I figured it was a bug in MobileMe’s browser check logic, so I used some JavaScript to check what my browser was reporting as its user agent:

javascript:document.writeln(navigator.userAgent)

It told me I was running

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Ubiquity 0.1.4

Looking at the user string, I wondered if all the addons at the end, in particular the Ubiquity one, were breaking the browser check. So I disabled Ubiquity and restarted the browser. But the user agent string still showed Ubiquity.

I had just updated to the newest Ubiquity release this morning and was starting to think that something in the add-in was causing the problem. So I uninstalled it … and the user agent string was still the same.

Now I was curious. Did it leave a setting behind that the uninstall didn’t clean up? I looked under the hood in the browser preferences at about:config and searched for Ubiquity, where I found a very interesting preference under general.useragent.extra.ubiquity. There didn’t seem to be an option to delete the key, so I simply set its value to an empty string.

Doing the browser check now reported

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5

And I could log into MobileMe again.

Lessons:

  1. Uninstalling an add-in doesn’t always totally uninstall it.
  2. You might be better off without Ubiquity.
  3. Apple needs to fix the MobileMe browser check (aka Trampoline).