When I took my first programming class in college, my instructor, Mr. Johnson, taught us something that has stayed with me ever since. When writing a computer program, the first and most important step is to thoroughly understand the problem you are trying to solve. Because if you’re not solving the right problem, no matter how good your program is, you’ll get the wrong answer.
Even though I think I've always understood the concept instinctively, Mr. Johnson’s words illuminated my mind like a flash of lightning on a night with no moon or stars. It was almost as if he had uttered one of the great secrets of the universe, and by speaking the words out loud, he cast a powerful spell that lit up all the paths of possibility in my mind for the briefest of moments. What Mr. Johnson said didn't just apply to computer programming; it applied to all problems. The secret to being a successful problem-solver, then, is to take enough time to fully understand the problem before you attempt to solve it. If you do not, you will not succeed. It's that simple.
Over the years, I've seen what happens when an organization fails to take this approach. In this, particular case, the result was a rather expensive failure. I've also experienced what happens when you front-load the time spent on a project with fact-finding and nailing down all your requirements before you do anything else. At the last company I worked for, when it came time to replace our time and attendance software and time clocks, I spent a lot of time putting together the request for proposal, making sure that every single need of our finance, HR, and IT departments was included in the RFP. I also contacted as many vendors I could find whose products looked like they could possibly meet our needs.