subscribe RSS Feed Twitter

Consultant Thursdays: Prioritizing Features And Focusing On “Need To Have’s”

One of the struggles with working as a consultant is clients that want everything in the world (and are willing to pay for it), yet don’t focus on the features or items of their implementation that they really need, and sometimes that is written directly in the statement of work. This happens in the corporate world, time after time. Clients are just like everyone else where the features that sometimes come from the CEO but have no return on investment associated with it.

Here’s how I work with clients to help define what they need instead of they want, and I’ve included an Use Case Prioritization Excel Template to start with. It’s simple, and meant to be that way, because long documents aren’t read.

Make a list of use cases that are relevant to the implementation

This is where I always start — what are all the percieved use cases the client needs for system success? When you develop requirements, there will always be additional use cases that will come out of disccusions,  the client’s going to have a pretty good idea of what they need to start with, because they called you, right?

Keep the assembly of this list simple, like an Excel document, and that document would have such fields as the use case, who the use case sponsor is, the opportunity, the cost (do a rough swag on this, and more often than not you are going to be 50 percent off because of unstated requirements), the priority (high, medium, low, or an agreed on numbering system as in the example document), and other notes. The sponsor’s important because like it or not, a CEO’s much more important to the project than a QA lackey.

Rank use cases based on importance

Some of the use cases will be absolutely necessary (i.e. if you are working on SharePoint, editing of pages and user permissions would be an absolute requirement). Some requirements, however, may not be as important, such as localization.

Even if that is a requirement, you can have two stages of implementation, planning for localization as a stub and setting up URLs for this versus a full implementation. Because of this, I would list this as two separate use cases, judging this as the simple versus complex implementation.

The importance should be judged on the opportunity, cost, and whether or not it’s an important feature for launch. One of the things to remember when developing use cases is that some can be accomplished through manual processes, like having the database administrator change data through raw SQL if the task doesn’t happen very often. No feature that has only an impact of making or saving $500 a year should be implemented, period.

Develop the system based on that list

The list is your bible for development, and if you stray from it, the development process goes awry. This list can also change; if you get a few iterations down the path, you can reorder items based on changing priorities of the client (or your project sponsor). Remember, this idea is to keep the features light and iterative so changing requirements don’t mean reordering the whole list or building a completely new system.

Keep track of progress with the list

Sometimes with software development, progress is the invisible path that no one sees. If you use the use case prioritzation list of keep track of where you are at (hopefully with honest developers giving you feedback), both the development team and the client will get a true nature of where they are at. In some situations, several use cases might be co-dependent on the same development components, and that should be noted.


The Washing Machine vs. Waterfall Requirements Gathering

I don’t know about you, but every time I’ve done the “hey, lets do the requirements gathering in a waterfall process,” by the time we get to the bottom of the waterfall, we’re nowhere close to where we started. That’s one of the reasons why I’m a huge fan of agile requirements gathering and software development.

Horse Pig Cow has a great post on the waterfall vs. the washing machine. It’s done in a presentation (I’m going to include it below).


Consultant Thursdays: Don’t Gather Requirements, Drive Them

How to be A Good Product Manager (which is a phenomenal blog, by the way, and wish I had written most of the content) has this excellent post about requirements, and it applies requirements gathering. One of the traps that we fall into as consultants is that with certain clients, we go into the mode of just gathering requirements and not advising what the requirements should be (read: let’s design the Pontiac Aztec, quite possibly the ugliest car on the road).

Just gathering requirements is a bad idea. Advising on requirements is a better idea, because that’s how you add value.

Sure it’s like herding cats, but the reason many consultants are valuable is there’s some wonderful insight that they may have, however small it may seem, that adds phenominal value for the client. That’s why they are paying consultants what they do.

How so? We start the conversation about what the direction should be, even if it’s the wrong direction at the start. One of the essential points that the article makes is that in many cases, the customer has no idea what they want (a car), and what they may get may be anything from a Hummer or a Prius.

Our job is to ask questions that will lead to developing a better product, and not necessarily questions that lead to what we think the product should be. Many scenarios, it’s impossible to satisfy all parties, because they may ask for a car that is great for the environment (the Prius) and can run over people (the Hummer), because the requirements are conflicting. Our job is to find the best solution, not the solution that meets the needs of everyone.

Or what do they say — trying to make everyone happy will make no one happy?


The problem with wireframes: “What does this link do?”

For the day job, needless to say I do a fair amount of wireframing and writing of use cases, and there’s a lot of “what does this link do?” when reviewing the work with the developers (we try not to just throw stuff over the fence). No matter how much we annotate and clarify, there’s always the usual…

“You know, I didn’t quite think about it. I’ll just remove it for now.”

Part of it is lack of sufficient time to gather requirements, part is sometimes crafting a good user experience where coming up with something really cool is something that you can’t put a time frame on. Sometimes it could take five minutes and hit you on the road, like how to handle comments within an MySpace Open Social application I am working on now. It could take weeks where after you design it, it’s implemented and you realize, “man, that’s just not effective.”

At work and at some of the clients, I push for having an Information Architect around during the development process — not necessarily full time, but just around for questions — because issues will always come up. That’s why I am convinced that waterfall-style requirements gathering works well for building the Space Shuttle, but doesn’t work well for developing web applications because of the nature of the technology (ultimately flexible, low barrier to entry, the approach of “let’s throw everything against the wall, see what sticks”).

With wireframes, there’s always this “lost in translation” moment where Scarlett Johannsen asks Bill Murray, what does this do, and we haven’t quite covered it. I’m convinced it not a tool issue (Axure, Visio, whatever) but just an understanding of what we do is part art, part science. Apple gets it. Some other companies get it.