Saturday, July 18, 2009

Just fix it!

It’s Saturday.  I just spent an hour and a half outside a Starbucks killing off open project items for an old client.  It was hot outside and the friendly folks enjoying their Saturday were starting to distract me… so now I’m at the library.

I like developing software – even on Saturday.  There are other things I like doing more (especially on Saturday, especially if it involves my wife and kids.)  Developing software isn’t the worst thing I could be doing, but this particular software is trying my patience.

This software is a giant beast of business critical software that people are counting on.  It needs to be functional soon so the legacy system can rest in peace.  This software project put me out of business (I guess that’s not totally fair… my 5-year-ago self’s lack of project management skills did me in – but this software is the blob in front of me that points that out.)

Why am I writing about this instead of “Just fixing it”?  Good question.  Answer: I don’t know how to fix a lot of the open items that are left.  The original requirements analyst did not give me a good set of requirements explaining how the system should work (btw, I was the original analyst.  And developer.  And accountant.  And salesman…)

Now there, I got that off my chest and onto the internet – I feel much better.  Now, back to work… This is not an intractable problem, but I can’t program my way out of this one without some help.

Some software problems are easy to solve.  For example: “The feature rate isn’t getting populated when I add a feature to the rental agreement.”  I can fix that.

Some problems are harder, even impossible, without a better story behind them.  For example: “The rental agreements are billing 10 days”.  I can’t just fix that.  I get the implication here… rental agreements should not always “bill 10 days”.  How should they bill?  Are there some cases where 10 days is appropriate?  The questions go on and on…

This is not at all meant to belittle the user who reported this issue.  He saw something wrong and reported it, nothing wrong with that.  My point is that I have a lot of non-programming work to do before I can begin to solve such a problem.  I need to expand this user’s ~10 word problem report into a series of stories that look like this:

“When a user does X, the software should respond with Y.”

A more specific, contrived example: “When a rental agreement is created with Usage type D, it should use the Daily Rate and should not be included in the ready to Invoice List until the next Friday after it was created.”

Once I have a complete set of those, then I can fix it.  Since I’m a proactive kind of guy, I’ll spend this Saturday expanding this one issue into lots and lots of short phrases (user stories) like the one above.  It isn’t the most satisfying work… especially since it will probably take a while for my client to confirm, deny or expand my list of stories.  But c'est la vie…