A Win is a Win

A win is a win is a close cousin to the win–win outcome. Recently at my place of work (which I cannot publicly identify here – suffice it to say its corporate America / Fortune 100) I had to compromise in order to achieve the high level goal and objectives; but not via the implementation originally planned. Just thought I would share this experience since it served as a profound reminder to me on the importance of meeting the goal/objective and not being too close to the implementation details. This is something I am personally struggling with lately as I find myself envisioning more and implementing less.

In this particular case it was around a code generator we have written to generate all the store procedures and data access code for .NET applications. For a number of reasons we ended up with two implementations that from a high level did the same thing. Each had features the other did not have. Since I am on the Architectural team I was really driving my implementation since it address more of the shared scenarios needed by the developers. The problem was that who was going to maintain this implementation? I could not, I have other fish to fry and need this initiative to be owned more by those who will be using it. It became apparent to me that this was just not going to happen; the reasons range from the “not grown here” mentality of developers to the general lack of understanding of what the tool did.

So in order to evolve the tool and to enable it to evolve; I had to make the hard decision to use the other code base. This was more of an ego thing than anything else. So once I was able to get over that the move was absolutely perfect. We are now going to have one of our top developers working on this key part of our development tools and I will be providing some high level guidance.

The reason this is not a win-win; even though it may seem so up until this point…We spent a bunch of money working on both of these tools. Most of the work on each tool was done by consultants; one who is very expensive and the other who is moderately expensive. Now I struggle with the age old problem of what happens when the consultant leaves or we decide we can’t afford him anymore; which has already happened to one of the consultants.

What are you doing, right now?

I am having one of those ornery moments and I am taking it out on Outlook. It locked my machine up hard today and I don’t know why; which really burns my toast.

I was just scanning through the boatload of emails in Outlook 2007 and noticed an orange status bar continuously scanning on the To-Do Bar. Here is what starts running through my mind…

“I appreciate you showing me that something is happening; but can you throw me a bone…What the are you doing? Did you ever consider that maybe I want you to stop?”

So I set out to try and figure out what Outlook was doing; the way a non-developer may…

I tried hovering over the area – nothing.
I tried clicking – nothing.
I tried right clicking – nothing.
I asked the help system – nothing (don’t get me started).
I asked Google – nothing (could not form narrow enough query).

So what else can I do but to just rant on my blog about it. Wouldn’t you know it; I soon as I went to grab a screen shot – it stopped. So I took the screen shot anyway and circled the place where this happening. On the off chance that someone actually reads this AND they know what the heck that bar means; please let me know.

I think Microsoft has done a better job at reducing the number of pauses that happen in the software; where things just stop and have you wait for some “background” process to complete. It is my opinion (and we all know how many of these there are and what they’re worth) that it would be better to just tell the user what is going on; it’s the not knowing that makes it hard.

For instance, when I delete a file in Windows why does it take so long? What would be nice is if Windows told me in the status box…

“Please wait while I put this file in the recycle bin for you”
“Oh, this is taking longer than I expected because someone else is hogging up the disk channel”

[Note: Of course I hope that for the sake of my Mom that they would clean up the message a little; I can just imagine trying to explain that message to her (unlike Don Box's mom, my Mom does not know assembler).] Now that I know why I have to wait maybe there is something I can do about it – “Oh yeah, I started that Disk Cleanup utility a couple of minutes ago, maybe I should pause it”. Users will start to draw correlations between things and just become smarter.

Conceptually what I am describing sound nice; but as a software guy this pretty challenging. It seems like it requires design/architecture that supports the exchange of this type of information. Of course security would have to be honored. Not to mention that you may end up telling people more about the internals of what you are doing (or not doing) than you would like to. This would make a good thing to report on when capturing data around user experience, which Microsoft (and others) seem to be doing more of.

Sometimes I wish I was working on something this cool.