Ability to change system configuration is very important aspect of service operability. But too much configurations can turn system support into a nightmare.
From my experience, dev teams tend to overcomplicate provided configs. They try to allow as much options as possible. The common explanation is "We don't know what would be really needed". Then all configurations are carefully documented in a several-thousand lines guide and delivered to the ops team. Of course, ops team never ever reads it 😁
There is a really good metaphor from Google SRE Book that illustrates this situation:
A user can ask for “hot green tea” and get roughly what they want. On the opposite end, a user can specify the whole process: water volume, boiling temperature, tea brand and flavor, steeping time, tea cup type, and tea volume in the cup.
Configuration is intended to be used by humans, and it should be designed for humans.
Main principle here is simplicity and reasonable defaults. The less configuration is required, the simpler system is to operate and maintain.
One more important aspect of configurability is testing surface. It is quite expensive to check all possible parameters and their combinations. As a result too much variety increases the risk of errors and human mistakes.
So next time you think about adding new configuration parameter, keep in mind that the best configuration is no configuration.
#systemdesign #engineering
