I developing a program for manufacturing users to define products and their processes. There is a lot of duplication in such definitions, which can be gathered into Product Families. The users would like to be able to define each element of a process OnceAndOnlyOnce, at the highest level of the Product Family that makes sense. Then they would like to have the definitions be inherited by the members of the Product Family, with the usual provisions for overriding and adding etc.
We're talking data inheritance, using rules much like code inheritance.
Needless to say, while this scheme makes it simpler for the users, it is turning into a very complex coding experience. Maybe I haven't figured out the simplest way to code it yet, but it seems like there is a conflict here between what is simpler for whom.
Comments and helpful suggestions are always appreciated. -- BobHaugen
Per SimplifyTheRequirements and XP, you are probably after some point which minimizes the work the developers do while minimizing the effort of the users. That implies a mutual discussion, not necessarily a negotiation. Several outcomes are possible: if you are incredibly lucky, then it will turn out that you can mutually discover a really easy to use requirement set that is really easy to implement. You may find that you want to stre-e-e-tch the developers to deliver what the users really, really would like to use. Or, you may find that the users are willing to take an almost-as-good usage facility that happens to be something the developers can develop OK. Discovering what your cost and priorities are requires fairly open discussion. Is it the case that your users are so important that you should develop whatever they need? Is it possible, even if the answer is yes, that there is something very similar to what they ask for that you can build much easier? --AlistairCockburn
The possibilities are fairly open. I am experimenting - doing a spike - to see how difficult it would be to satisfy the full desire, and also looking for possibilities to build something simpler, as you suggest. However, what the users really want is OnceAndOnlyOnce - for them. I sympathize. - BH
You might find MartinFowler's AnalysisPatterns book useful. In particular, look up the term KnowledgeLevel? and consult his many examples of how to use data inheritance to model your business rules. --FrankWestphal
Sounds like ChainOfResponsibilityPattern would make implementation easier.
If the users have a rational idea that would make their jobs easier, I start with the assumption that I should go ahead and do it. After all, I operate on the philosophy that "nothing is impossible; it's only a matter of time and money." OK, now that we've agreed that I'm paid the big bucks to do hard work so that my user's life will be made easier, maybe we can get creative about ways to adjust (not necessarily eliminate!) requirements so that they can get more value for less money. -- JeffGrigg