Our products are first and foremost designed to be flexible. With many BPM solutions, the product must be essentially redesigned for each customer. Over the years all of our designs have been refined to allow most areas of the system to be entirely configurable for each installation without any need to rewrite any code or redesign processes. We do this in several powerful ways that are unique to us.
Over 15 years we have built a large number of different systems for many customers. We have also seen a large number of systems built by others. In all of this time, we have learned what makes a system robust and future-proof.
Our goal was to ensure that all of our customers can benefit from shared solutions. The only customisation required would be to integrate with external systems, and these are contained in discrete shared components that can be replaced for each system. The result of this is:
* We are able to upgrade the software platform it uses without the need to rebuild every installation.
* Costs of delivering systems are reduced, as there is no lengthy customisation for each customer.
* Time to get up and running is reduced as there is often no customisation required.
* Support is much better, as each system is built using exactly the same code.
* Faults can be rectified in one place, and do not have to be rectified in every installation individually.
One of the main benefits we bring is a vast array of shared components that we can use to build and extend systems. These components are tried and tested in the real world at all times, as we use them for all of our solution development. These include:
* User Management
* Time Logging
* Ad-Hoc Tasks
* Integrated User Help
* User Feedback
* User Surveys
* System Management
* Email Management
* Emailed Reports
* Release Management
* EDMS Integration
* Fully Configurable Wizards
* Detailed Change History
* Performance Monitoring
These components allow us to build powerful and robust functionality into our systems with very little additional effort or cost.
In any system designed for multiple customers, there will always be an element of integration. In each case, the integration needs will be quite different. We identified this as a Design issue, and came up with an elegant and robust solution.
Each Integration point is separated out into a replaceable component. This may be if data needs to be referenced, external systems need to be called, or our system needs to accept a trigger from another system, for example. In all of these cases, we have abstracted the relevant functionality into an Integration Layer.
When we need to integrate with a new system at any customer installation, we merely have to accommodate the required interfaces in a new component that integrates with that system. As time goes on, we find that we typically have the required component already built.
Using this approach we can quickly and efficiently integrate with many different types of system. We can also accommodate new systems, and changes to external systems, with very little additional effort. The core system is not affected, which greatly reduces maintenance and support costs, as well as any development effort.