Christopher Hawkins - effective Software Development and Web Design project management

Wednesday, February 16, 2005

On Functional Specs and Project Pitfalls

I found a good post about functional specs when I was reading Ian landsman's blog this morning. Ian notes the different opinions on whether or not writing functional spec is a good idea - one camp claiming that spec is purely a political appeasement move, and the other claiming that spec is vital to a well-written app - and ends up coming down on the side of those of us who write functional specs. Good show, Ian! He also wisely notes that functional spec is best done in small bits. I agree - the bigger a single iteration of spec is, the more likely it is you missed something.

There is a reason that I included inadequate/unclear requirements amongst The 5 Pitfalls of Estimating a Software project - this problem is HUGE in the industry and it cannot be solved by saying "specs don't work - don't write specs". It's true that ultimately you need people to agree on the functional spec, just as it is true that they eventually need to agree on a user story or an interface mock-up. This doesn't not make the functional spec an appeasement document, though. If anything, the process of developing a functional spec should get people talking about - even fighting about - what task experience the app needs to provide. The biggest fear a developer has is to deliver an app only to be told "that's what I asked for, but it's not what I want", and the process of developing a functional spec - done correctly - will avoid this.

Why did I qualify my previous statement with "done correctly"? Simple - too many developers have an "order taker" mentality when it comes to developing a functional spec. A client will rattle off a list of wishes - "Yeah, this program needs to cure cancer, gnarfle the garthok, walk my dog, do my taxes, and make me a sandwich. It's pretty simple, you should be able to do it in about 2 hours." Now, at this point the developer can go one of two ways:

  1. Say "yes, sir" and shuffle off to make a half-hearted attempt at doing what he knows is impossible, only to be driven to drink and beat his children when hopelessness finally sets in, or
  2. Push back on the client and challenge his demands

I'll give you three guesses what a good developer will do. ;)

When developing spec, it is your obligation to act in a consultative fashion and challenge your clients assumptions and requests. This is not McDevelopers - you don't simply serve up whatever the client in the drive-thru orders through the speakerbox. It is your job to protect the client from himself. If you find that even after developing a functional spec, the delivered app is met with "that's what I asked for, but it's not what I wanted", then odds are you have failed your client in some way. Note that I did not say the spec has failed - you have failed. Perhaps you didn't probe deep enough. Perhaps you let some assumptions slide. Perhaps you didn't lay out the different scenarios your client's requests could lead to clearly enough. I've been there, and it is painful to not only let your client down but fall flat on your face with your release.

Controlling scope creep is also part of doing functional specs correctly. One can claim that functional specs inherently lead to scope creep because it is easy to add something to a Word document, but I disagree. I think weak developers lead to scope creep. Again I say - a good developer will not allow this to happen. A good developer will push back. "This change conflicts with xyz" or "This change will double the cost of abc" or "This change is not technically feasible", etc. When it is obvious that the scope of the project is in jeopardy of changing, a good developer will speak up and offer suggestions. In some cases, the developer must be willing to stand firm and say NO.

Functional specs don't fail. Developers do.

To be fair, the "don't write functional spec" guys are designers, not developers, so they are probably dealing with a different set of concerns than a developer is. In fact, I get the impression that their mental image of a functional spec does not include any interface examples, which is not how I do my specs. Photoshop or Visio representations of a UI are always liberally sprinkled throughout my functional specs to illustrate what the text is describing. However, I don't go building a real, functioning UI until it has been decided what that UI should do, and how it should do it.

I will stick with the approach that has made my projects successful - committing the application experience from a user POV down on paper - and vetting it with the users - before writing a line of code or building a working interface.

Discuss This

09:17 AM Permalink

Tuesday, February 15, 2005

An Experiment - Choose My First Product

It's late, and I am positively delerious from lack of sleep. I hope I don't regret this post in the morning. ;)

I mentioned a few days ago that I've joined the Empower program offered by Microsoft. Even before I joined, I had a ton of product concepts in mind. After pondering the issue for a while, I thought I had identified the strongest concept from my idea-pool. As of yesterday morning, I was all set to start doing some deeper market research to validate my conclusions, then start gathering requirements.

But a thought occurred to me yesterday, inspired by a lively stew of this JoelOnSoftware forum post, the Cluetrain Manifesto, and a recent Forbes magazine cover story - instead of charging ahead with my product idea, why not simply ask people what problems they'd like to see solved with a software tool? It should seem bizarre, to think that coming up with a useful product could be as simple as asking "what do you want", but with the rise of corporate transparency and the ever more commonly-held belief that markets are conversations, it doesn't strike me as weird to begin that conversation by asking "how can I help you"? After all, companies ask that very question in order to improve existing products. Why not ask it before you've made any product? Is this completely ludicrous, the idea of asking people what they want rather than clandestinely doing market research?

I don't think it's such a stretch. Let's experiment with the idea and see if it yields any useful results: If you and I were sitting down over coffee right now and I told you "I'd really like to try to apply a software-based solution to one of your nagging problems at work", what would you tell me?

Sound off on your blogs or in the discussion forum!

12:16 AM Permalink

My Discussion Forum is Back!

Oddly enough, my discussion forum gets more hits than most of my articles, even though I haven't linked to it since November. I even saw a few posts trickle in there over the holidays. So, I gave it a little facelift and recalled it to active duty.

The Repeat After Me: I Am Not In The Software Business discussion is STILL ongoing. That article seems to have ruffled a few feathers. Is it really so bad to ask my fellow developers to stop acting as though they're too good to be concerned with business issues? Get in there and offer up an opinion!

12:06 AM Permalink

Monday, February 07, 2005

I Owe MSN Search A Link

I was taking a look at my stats on WhoLinksToMe.com, and it appears that I actually have negative MSN Juice!

They find -1 links to me from MSN. So in the interest of cosmic balance, I guess I owe MSN Search one link. Here you go, guys - MSN Search.

Are we even now?

05:45 PM Permalink

One Step Toward Joining The Ranks Of ISV-dom

I signed up for the Empower program offered by Microsoft a couple weeks ago. Empower is a one-year program (renewable for a second year) meant to help small ISVs get ramped up on developing applications that use Microsoft technologies. For $375, an ISV gets 5 internal licenses for Windows and Office XP, Windows Server, Exchange Server, SQL Server, SharePoint, MSDN Universal, Visual Stuido.NET 2003, etc. It's a great deal and seems like a good, inexpensive way for an ISV to get started as a Microsoft partner.

So now I'm committed! The big rule of the Empower program is that you must a) announce and b) actually release a new packaged software application within 24 months. I am whittling down my last two product concepts and will decide which one to develop soon. I might even blog the development process, we'll see.

For the record, I am excited. Wish me luck!

05:30 PM Permalink

About Christopher

I am the founder and principal developer of Cogeian Systems, specializing in custom software development, web design/development, and crisis management for software projects.

Everything you see in this blog is my own personal opinion, based on my experience in the software field.

©Copyright 2004 Christopher Hawkins | web design: Cogeian Systems