
I’ve always been very interested in the interface between people and technology, and I’ve worked on a couple of large products that simultaneously targeted several different user roles. A BRMS is probably one of the most challenging of such products because the list of user roles spans developers, policy managers (aka line of business managers), system administrators, business analysts as well as others. Each one of these roles brings a unique culture, set of expectations, education and toolset bias to the BRMS. Some vendors attempt to cram all users into a “one-size-fits-all” model, essentially ignoring the needs of one or more user roles. The poster-child for this approach is the plethora of tools for developers, of course built by developers, that attempt (and usually fail) to make inroads amongst members of the “business” roles. There are many examples within the BPM and BRMS communities. The converse is also true - tools that although very popular with business analysts fail to gain acceptance from IT more generally.
You can usually see the heritage of a successful product by looking at how they manage and store their artifacts within their repository. There are essentially two models for this: text-file based or database-based. Developer-centric products tend to favour text-files while business-centric products tends to favour database storage. There are pros to both approaches:
Text Files
- Everything is “code” or “configuration”
- Integrates well with configuration management systems
- Integrates well with text-based tools (search, print, find/replace, difference)
- Changes are isolated
- Easy to work offline (disconnected)
- Possible to automate changes
- Easy to perform ad-hoc searches
Database
- Everything is “data”
- Relational integrity between related artifacts
- Easy deployment (always deployed!)
- Easily shared with team members
- Easy to define security policy and permissions
- Powerful/performant query model
- Integrates well with reporting and business intelligence tools
Think Windows registry vs. Linux configuration files, or mbox email files vs. Microsoft Outlook PST file.
Unfortunately, as you may have seen, it is very hard (perhaps impossible?) to build a single repository that combines the best of both the file-based and database development models. In addition, one is also faced with a workflow challenge: do I want to work alone on repository artifacts or do I want to collaborate with my peers? If I want to collaborate with my peers how frequently do I want to exchange information with them, and how do I want my work to impact theirs? If you and I are collaborating on a set of resources then we can either take an “optimisitc” view of the world or a “pessimistic” view. I.e. I can assume you will not modify my resources or I can assume you will. In technical terms I may wish to take the pessimistic view and “lock” a resource I am editing to prevent you making changes, or I may wish to let you go ahead and make your changes concurrent with mine, postponing the decision on how to reconcile the two sets of changes until the last person has completed their change and the impact of the changes is better understood.
I remain convinced that the solution to this problem is to provide two repository implementations, one tuned for developer-style use cases using an optimisitc locking model and workspace isolation, the other optimized for business-style use cases, using a pessimistic locking model and a shared workspace. The challenge then literally becomes how do you synchronize these IT and business workspaces to ensure cross-role collaboration? The solution requires a robust synchronization framework that can detect modified artifacts in each workspace, prompt the user to reconcile potential differences, and move artifacts from one workspace to the other.
If you are familiar with the JRules 6.x architecture this should sound familiar: Rule Studio uses a file-based persistence model and workspace isolation, while Rule Team Server uses a database persistence model and a shared workspace for Policy Managers. In between we use a synchronization module to move artifacts to and from the two environments. No compromise BRMS indeed!