Importance and Qualities of a Configuration System.
The speed with which IT systems can evolve and adapt, with the ever changing requirements (both from business and IT) and scenarios is increasingly becoming a key competitive differentiator for small to big firms alike. The “Time-To-Market’ factor is critical in building and sustaining a competitive edge over your rivals and in winning the faith and good will of your customers. Building configurable systems help address this issue.
Qualities of a good configuration system:
- Configure as much as possible:
Making the system configurable saves a lot of developer and testing effort. A code change could introduce a bug, but the chances of the same are much less if the change is a configuration change. It should have the ability to configure the high level details and also give the flexibility of overriding the high level configuration at the lower levels or minute level of the application or infrastructure.
The configuration system should be highly scalable. The stand alone application configuration systems should eventually evolve and grow into becoming a full fledge enterprise level configuration system or platform. This can help deploy and configure systems at an enterprise level in the least possible time and effort.
The conventions used should be standardized for the ease of understanding and communication.
- Centralized v/s Distributed:
Parameters which are very application specific and ones which do not depend on other application or services should be (localized) within applications. However, parameters which are shared across various systems should be maintained at a central location. A single change in the central location will configure all dependent systems at the same time. Do not localize shared parameters; it is most likely to become a bottle neck if a change is needed in them.
- Should take effect at run time:
This is more to do with the application capabilities than the configuration system. On a change in any one of the configurable variables, the application should be able to pick that change without having to stop and re-start the process. This will ensure that the change can be deployed at run time without service interruptions.
- Local File v/s Database v/s Hybrid:
A right choice has to be made in terms of where to source the configurations from. Should the variables be stored / read from a database or a configuration file? Points one needs to consider are: configuration of the application remotely, startup time of the application, database availability, and time required to make the changes.
Sensitive information like database passwords etcetera must be stored in a secured fashion. One that is not accessible and readable by all.
- Easy to understand:
It should be easy to understand and learn for people to work on it.
In a nutshell: One may not have a full fledge application or enterprise level configuration system in place from day one. But aiming for one and building the same will definitely have long term benefits. In a distributed systems environment as more and more applications communicate with one another, more shared services are used the need for integrating these seamlessly is critical. And from a stand along application perspective too a good configurable app is the way to go.