How do you configure your software?
We usually have config files. XML, YAML, INI and Property and the like. You know the drill.
They work fine. Right?
The problem is we thought config files were fine until we got tiered of probelms like:
- How do you manage different environments in config files?
- What if you have more than environments? Like different
configuration for different geographical regions? or different app
types: mobile, web and desktop apps configured differently.
- What are we going to do about the developers? Share the same config?
Or do we give each developer a separate config file and make sure
they don’t check it in?
- How about testers? Or handing over the app from Development to
Operations? How do we tell Ops what to set the db names, queue
addresses, endpoints and ports in Production? And make sure they got
- How about audit? changes? who changed what in Production? Why did it
change? Do we allow developers change configuration of production
systems? Or can they only see it but not change it?
- And passwords or API keys? Do we leave them in text files just like
- What about sharing configuration values. You know: database name is
the same everywhere but the server address isn’t. things like that.
Except for the QA when it’s in Europe!
- How are we going to support multiple versions of the software? Not
everyone upgrades their apps at the same time. How do I manage
different versions of the configuration?
- …and change notification. I wish I could change the config on the
fly and tell all instances that it’s changed.
Our list grew bigger and bigger with each project. So we thought: ENOUGH IS ENOUGH! Let’s fix this configuration thing once and for all!