Understanding the problem
One of the biggest reasons for software failures is not understanding what problem you really need to solve: the customer’s problem. And even if you understand that it’s about the customer, you are only part way there – you have to understand what the customer’s actual problems are, and these are usually different than what the customer thinks their problems are. Often, the best way to flush out the true needs of the customer is to interview them, caputure some of the basic ‘User Stories’ (another XP term) and implement those stories in the simplest and fastest way possible. Consider using a rapid development language like Python on an existing application server like Zope (which already has a built-in OO database) to build something fast and present it to the customer, just to see if you are even trying to solve the right problem.