Hi Derek, OK OK... I wasn't going to say anything either but with Peter and James added to Wolfgang, I have to pile too :-)
IMHO there are a number of maxims of rule-based programming that you're breaking here. Ernest has put the first one most succinctly in the past: Use many smaller rules that do one thing well rather than one Über Rule that boils the ocean. Declarative programming should say what action(s) are to be performed when certain facts are present, but not attempt to implement those actions directly on the RHS. The second, as James and Peter pointed out, is not to do Java programming on the RHS. If you make the RHS a series of method calls that take the variable bindings from the LHS as arguments, your rules will be much cleaner and maintainable. Finally -- and this is just a plain programming nit -- I noticed the apparent use of magic numbers in your conditions. What about all these calls to overrideAgeCost()? Where are those args coming from? Are they part of some policy? What if that policy changes? Then your rules would be in a "dirty" form. Wouldn't it be better to get those values from some cache or database with most current values? Something that might help you: I've been collecting rule-based *metaphors* lately -- different ways of thinking about using rules. One metaphor that has been particularly productive has been thinking about "digestion" and the passing of data through a series of modules like a "digestive tract". Obviously, if you carry the metaphor too far ... well you see where the "garbage in/ garbage out" saying comes into play. :-) But the idea is that you are moving the data through different states, partially processing it each time a new rule module has a crack at it. This has precedent in UNIX/LINUX with pipes -- same idea. Old wine in a new bottle? Perhaps. But this way, you can clearly separate out concerns, add pre and post processing functions, and test partial results by simply disabling/enabling certain modules in the sequence. Cheers, Jason ------------------------------------------------------ Jason Morris Chairman, Rules Fest 2010/2011 http://www.rulesfest.org Morris Technical Solutions LLC consult...@morris-technical-solutions.com (517) 304-5883