Ideas for how to split a “settings” feature
Some ideas for how to split functionality for managing software settings into small, valuable, pieces that can be developed, tested and deployed incrementally.
Basic Settings
- No Customizability
- Compile-time Options
Environment-based Settings
- Environment Variables
- Command-line Arguments
File-based Settings
- Hard-coded Defaults
- Key-value pair text files
- Structured Text Files (JSON, YAML, XML)
File + UI Settings
- Settings displayed in UI: Text files editable, settings visible in UI.
- Restart needed to reflect settings file changes
- Settings file changes reloaded in real time
- Some core settings editable in UI, the rest via file
Settings UI
- Simple UI
- Advanced UI: E.g. search, validation, tooltips, etc.
- Role-based UI: Settings visibility based on user roles.
- Conditional UI Settings: Settings appear or change based on other settings.
- Searchable UI: User can find a setting through text search
Programmable Settings
- Settings changeable via API
- Database-driven Configuration
Settings Portability and Synchronization
- Manual export/import of settings
- Settings Profiles: Manage and switch between multiple configurations.
- Cloud-based Sync: Synchronize settings across installations or devices.
Intelligent Settings
- Machine Learning-based Suggestions: System suggests settings based on usage patterns.