Sunday, October 31, 2004

Building Software

I've been thinking recently how poorly software is written and how poorly it serves the everyday person. Can we as an industry not create truly useful software? Can we not know what users want [hell lets ask them] and design something they want? Is it really that difficult? I hereby make a plead to all those involved in designing not only software but anything that people are suppose to use to take extra steps to involve your potential customers early on and to design for them from day one. Now some might argue they've been doing this for years so what's the problem? The problem is we should have this down to an art form by this point. It's been over 20+ years since we've had programmable computers and program design seems to be an art that few if anyone have mastered. What's the problem? The first problem is the people who are designing the software are the last people in the world that will ever use it. In the industry it's called, "eating your [own] dog food". It's the process of a company using the software they've written in a real world situation. Why is this so difficult? My guess is the way we deliver software to the market. In a typical development life cycle it's: design, code, test and ship. The problem with this is the testing part is usually minimized and if and when it happens shipping soon follows. I propose a "dog food" period. Any software you design must be used internally by your company for minimally 6 months if not a year. Yes, an entire year. The software will be consider finished at one stage and then go into "dog food" mode where it will be used for internal projects. During this stage any problems will be fixed and optimizations are made to allow everyday users to be more productive. For example: short-cuts added, custom reports, etc. I project that as part of the daily use of a piece of software that the designers and programmers will see the end users using their software in ways that they never imagined. It's been said that end users are great at suggesting 'minor' features and these can be compiled from Beta testing feedback but that the more 'fundamental' features are only thought of by the architects/designers/coders. I believe this is a valid proposition. But I also believe that we have yet to create a methodology for understanding what users want and that we go into projects almost completely ignorant of what end users really want. How can this be? ...