Understanding the customer
In my viewpoint, one of the key things about Agile is bringing the customer and the Team (the implementors) MUCH closer together. So that the Team starts to understand many (most?, all?) of the marketing issues and activities. In effect.
Let me mention two things.
1. While the customer usually knows their own problem (well, pretty well), they typically are rather clueless about what the solution should be. Nonetheless, we typically ask them 'the requirements', and we are shocked, shocked later when they say "Well, now that I see it, it is not what I want."
As one angle to this, most normal people don't want 'a product'. They don't want software or a technology gizmo (yes, there are a few people who do want this, but they are few). They want only what the product will bring, ie, that the problem will go away. As an example: they don't want a music playing thingie (Zune or iPhone), they just want to be able to hear the music they want almost anytime they want to. (Yes, the 'problem-solution' metaphor does not work well in every case.)
Along with this, the customer is a normal human being; meaning, even what they say is not very articulate.
As a perhaps not minor point, no two customers agree.
2. We can't hear what the customer says. This is of course normal human behavior, as, for example, any wife (or husband) knows. And there are also lots of additional root causes for us.
* we put extra people (noise) in the process.
* our topic is very abstract
* we are talking about something that does not even exist yet
* it has all kinds of geeky, fast changing, fast moving lingo around it
* we want to hear features, and the customer wants to talk about his problem
Etc, etc, etc.
To improve this situation, Agile says: Bring 'em much closer together. Even closer than we can possibly imagine. Far from perfect, but hopefully most of the time much better.
(Why still imperfect? Well, for example, even a husband and wife who have been together for 20 years don't perfectly understand each other. As another example, most business-customer types are challenged hanging out with techno-geeks talking a different language.)
Now, it is still terrible, so I think we should enable ourselves to discover more quickly when the cycle is especially stupid.
So, I am suggesting putting in a tight P-D-C-A cycle in there (Plan, Do, Check, Act). That cycle in Scrum is a Sprint and then a Release (ie, two cycles).
With some metrics (which are indeed very hard, but hey, delivering business value is what's important). Example: measuring the BV delivered after each release with some metric. We will still make lots of mistakes, but maybe we learn faster.