I’ve never met a developer who enjoys “configuring” anything. Is there something fundamentally wrong with the whole idea of “configuration”? Is it a “code smell”?
Most configuration I’ve ever worked with violates basic principles of clean code and good software design – non-existent or shallow modularisation, mixture of concerns, poor naming, deep nesting, duplication, over-specification, etc. etc. No wonder it’s painful to work with!
Whenever we think we need configuration, should we instead pause and think about redesigning so that we don’t need configuration?
Top comments (3)
Update: Since posting this, I became aware of a recent project, Pulumi, which aims to replace infrastructure configuration (e.g. Terraform) with "Infrastructure as Code". I guess this is an example of the industry shifting away from configuration and toward code-based approaches.
If an app or web app does only one thing and does it intuitively and simply, then probably configuration could be skipped.
From the marketing perspective, configuration allows to personalize a product and that's a huge selling point for the customers.
I guess, to make an app very usable and minimal correctly, a lot of A/B testing needs to be done with lots of user groups, so that you could choose which features are really attractive and useful, and which of them distract people and make them leave your product.
I guess the no-configuration approach would work very well for the beginners, but the configuration would be preferred by power users.
Thanks for your comment, @djangotricks.
Agree with the idea of skipping configuration for simple cases. Here I think the concept of "sensible defaults" is useful.
However, while personalisation is definitely a powerful capability and selling point for customers. I would say that it should be raised to a product-level feature, accessible by the user directly through the UI, rather than buried inside a machine-parsed configuration file.
A full UI with suitable controls and navigation is much more user friendly than a verbose configuration file requiring additional training to master. This would strike a balance between usability and flexibility.
One of the basic principles of usability is that users shouldn't have to read an additional manual or documentation in order to use the system, if possible. It's interesting how often the field of usability intersects with software design.