Conflicting requirements are when a customer asks you to make the system do two things you can't possibly do at the same time- fat client AND and HTML server [somebody put a better example in, please].
The conventional wisdom is that conflicting requirements are a sign of big trouble. You couldn't possibly satisfy them both, so the customer can't possibly be satisfied.
Consider AnalyzingXpWithOptionsPricing for a moment. You can buy a BestOfOption? that allows you to exercise one of two options, but not both. They are useful when only a combination of market moves (falling oil and a rising dollar, for example) would prove ruinous. The value of a BestOfOption? is calculated by examining the correlation of the prices of the underlying instruments. If the prices are perfectly correlated, then the value is the same as for a single option. As the prices become less and less correlated, the value goes up. The value is highest when the prices are perfectly negatively correlated.
The PlanningGame produces a plan that acts like a BestOfOption?. You know everything the customer wants won't fit into this release. They get to choose what goes in, and they get to change their minds. From our analogy, we would expect conflicting requirements to be the most valuable possible situation (as long as we don't try to implement both stories at the same time). -- KentBeck and MaroanMaizar
[From WhenIsXpNotAppropriate]
"Pure ExtremeProgramming might not be optimal when...
Here are some approaches to resolving conflicting user requirements:
One area of concern with XP is the OnsiteCustomer. In many situations, commercial development for example, there are numerous customer groups, each of which must be satisfied to some degree. This breaks down the UserStory requirements gathering approach, the PlanningGame, and customer written AcceptanceTests. There are alternate methods of requirements gathering, which I think would work with the remainder of the XP practices, but there would not be the clear dividing line between business and development proposed in pure XP (I tend to favor breaking down the dividing line). -- WayneMack
To me, one of the key ideas of the OnsiteCustomer is that these decisions and trade-offs will have to be made, and will be made, and letting it be an unconscious process is a bad idea. If the business units flat out refuse to do their job and steer the project (isn't that why they're business?), then the dev team can elect one of their own to make the decisions that the OnsiteCustomer needs to make, and to document them as a business process. The difficulty is protecting that person--if your business is already this dysfunctional, then you have a good chance of project failure for non-technical reasons, and a good chance of turning said dev team member into the scapegoat. Documenting what you're doing may help defend this--you can show higher ups what decisions were being made, the fact that a developer was stuck doing the job, and noting that firing your developer for managing the business side of the project badly is like firing your chef for mopping the floor poorly. --RobMandeville
I haven't seen any reason to break that dividing line. In fact, in the scenario you mentioned, I'd strengthen it. There can be as many customer groups as anyone wishes and business can gather requirements in whatever way that they want to, but if they do the PlanningGame with developers and show a single face to the developers, the business/development split will be intact and workable. -- MichaelFeathers
Who is this amorphous "They," and how do you get them to present a consolidated face? Each user group is only going to and be able to express its own interests. It really falls back to development to go out and gather requirements and balance competing interests among different user segments. This remains moe of my biggest qualms about XP; in most of my development experience, there simply isn't this unified decision making user entity. I don't think the development team can shrug off the responsibility for requirements definition and prioritization. -- WayneMack
Several years ago I was leading a project which was to produce software for two disjoint user groups with competing interests. I'd say that about a third of our time was spent acting as mediators and playing little games to make sure that everyone was happy. Over the course of development, one person who had background in the technical areas of both of the groups ended up being someone who both groups respected. Today, I wish I had checked around and seen if she could have become our customer. In teams I've worked with since, having a customer with a single voice has changed the whole tenor of development. The Programmers can actually code rather than act as perpetual negotiators. It is far less distracting. -- MichaelFeathers
When I encounter conflicting or confused user requirements or priorities, I impose a traditional change control process:
To me this seems like the perfect example of why we need RequirementsMiranda. "If you can not afford a set of requirements one will be appointed to you."