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 it right?
- 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 that?
- 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!
If you share those problems, signup for a private beta of ConfigChief at http://woot.configchief.com