March 17, 2005

What Enterprise Devs Can Learn From Games

Enterprise development and games...the two are completely different, right? Wrong.

In both games and enterprise development, you are processing a set of data and attempting to present the information to the user in a usable format so that the user is able to promptly act on that information.

To be honest, game developers are actually very good at doing application development, mostly because they understand that a game to be successful, the game must have an intuitive interface, present information in an expected and useful form, and be immediately responsive to the input of the user. That user-centric attitude means that while a game developer may not be as quick to develop something as someone with a code-centric view of things, users will generally be more satisfied with what the game developer gives them.

In a pre-existing records management application back at the City, if you wanted to look up information on a person, you had to navigate through five menus to the "Find" option, type in the information you knew, press F2, key through the records to the one that you wanted, then hit F2 again and finally hit F2 one more time to bring up the menu that would allow to view or print the record.

For an application we were writing, I had to create a search interface, so I decided to implement a real-time search system. I had a flag on my search form called Dirty. All of the fields on the screen shared a common Changed event, and all they did was set Dirty to true. I had a timer event that fired on a regular basis that, if Dirty was true, would search through the database and populate a list box with any records that matched. Each line of the listbox contained the 2-3 most commonly needed pieces of information, so sometimes, the full record didn't even need to be pulled up.

Right now, I can hear tons of enterprise developers out there screaming, "Hey, that's not scalable! It's creating extra work for the systems! Our servers aren't fast enough to handle that workload! Anyone should be able to remember F2 is 'Search'..." To them, I have one question: do you ever debugged using the Visual Studio .NET IDE?

You're debugging your application and you hit a breakpoint. You look at the bottom of the screen, and there is a list of all of your locals and variables that are touched by the function you are in. The last one to change is highlighted in red. You hover over a variable name and you see the value pop up in a tooltip. All of the information that you need to diagnose your problems are at your fingertips, and the most common ones are all right there for you without you having to do anything else. If you don't remember that F5 is "Start While Debugging," you can still use the menus to do the same thing.

You expect that kind of automatic response from your development tools. Why shouldn't your users demand that kind of automatic response from your applications? We've got people out there using 3Ghz machines to check their E-mails. If the queries are too expensive, cache the data to their local machine and query it locally. Put that desktop to good use!

You may think that you're saving cycles by not searching until the user tells you to search, but whose cycles are you saving? Your cycles, the computer's cycles, or the user's cycles? Computer cycles are cheap. Moore's Law helps them get cheaper. Your cycles cost a finite amount. Once the program is complete, only maintenance costs are factored in. However, there is no limit to the cost of your user's cycles. You may make $100,000 a year, but your program could be used by several hundred or several thousand people. Even if your time savings for your users only amount to a few dollars per year, that savings has more than paid for your salary. Remember: the more money you save your company, the more money you can ask for. [grin]

If you want a good example of how to do real-time search, take a look at Windows XP Media Center Edition's music interface. As you enter the name of the album or artist, the display scrolls to the first record that matches what you have entered. Sure, the dialog takes a second or two to populate before you can use it, but the overall time savings in search makes up for it. It takes me over a minute to scroll down to the end of my music library, but only a couple of key presses to scroll down to my Weird Al and Yanni, and a couple more presses to scroll back to my Anything Box. Those minutes add up. How long until Windows Media Player just does the search instead of waiting for me to click the "Search" button?


James said...

FWIW, iTunes does search-on-the-fly across its music library -- very useful. And it's a nice way of getting search feedback: you can see the list of hits shortening as you type more characters or words.

Thomas Hawk said...

Michael. I agree with you that the MCE music search is indeed very slick. The only problem is that give it a large enough WMP music library and the thing creeps to a slow death. I wish I could use this valuable feature but I cannot unfortunately. It can take over 5 minutes to do a search for a song. Microsoft needs to address the performance issues with the WMP library before this fantastic feature means anything at all to me.