I am reading up on Rules Engines, software for managing business rules and making them easily changeable within software applications. Some gleanings and thoughts (a little knowledge is a dangerous thing, so please comment):
Rules software includes a registry, to define, classify and version-control the rules. The classification and version-control would be useful even if you don’t have the resources to convert the rules to pseudocode and drive an application from them.
- You may already own a CASE tool, metadata repository or content-management system repository that can store rules as snippets of text, assign them to a classification taxonomy, track versions, and maybe even control who can change the rules.
- The PowerDesigner CASE tool includes Business Rules and links them to Processes.
A rules engine goes further than a register: it implements rules at run-time, so they don’t have to be hard-coded in applications. This reduces maintenance costs for systems that change rules frequently (such as for complex legislation, pricing or eligibility criteria). Up-front costs increase: the rules engine must be procured, paid for and integrated, and each rule must be codified. (This barrier must be significant, since I have yet to see a rules engine in action.)
The application’s performance may be slower, since it has to talk to the rules engine. (I wonder if rules registries can output application code, to be compiled whenever the rules change, for higher performance. This is reasonable for web applications, or client-server applications that get updated overnight.)
A good rules engine should:
- Handle both “if-then-else” and “event-condition-action” rules
- Help define rules in a rigorous language, with a graphical interface
- Check the logic of each rule, and consistency between rules
- Relate a rule to other rules, business & system processes, data elements, application components
- Help test the applications when rules change
I would also want architecture that elegantly handles the potential overlaps between rules engines and:
- code development environments and code repositories
- CASE tools and other metadata repositories
- lookup tables in the database
- workflow or BPM engines
- parameterization of SOA components
For instance, if your existing application has some logic based on a lengthy database table, will that now be handled by the rules engine, perhaps still using a database query?