Reevaluate Feature Flag UX
Problem to solve
Out of discussions around functionality for feature flags, some user feedback, and issues being raised, it seems that current design is not meeting user expectations, is causing confusion, and may limit future enhancements. Problems with the current design:
- The interaction between user-id based strategy and environment strategies is unclear
- User id’s per flag/environment is unmanageable
- With user ids at the flag level, interaction with environments is unclear
- There is no overall on/off switch for a feature flag
- User request to toggle flags on lists
-
All environments
is often confused as an on/off for the whole feature flag - The hierarchy of rules is unclear
- It would be difficult to add additional strategies in the current UI
- User request to read the full description of what a flag does without going to the edit screen
Intended users
- Developers who create feature flags
- QA engineers enabling/disabling flags
- Release managers who want to control which features are released and to which customer base
- Support engineers that wish to release features to beta customers or test version to fix bugs for specific customers
Proposal
Note: These designs were done as an exploratory effort to investigate potential solutions to the above problems and drive discussions. They are not finalized and do not necessarily reflect the intended direction.
Feature flags details
Mockups
Changes
- Switch from Target environments to Strategies as the rules organizational system
- Allow multiple environments per strategy
- Force distinct combination of strategy type and environments
- Add top-level toggle
- Collapsable related issues/merge requests
- Add a view/edit state for title and description
Discussion
- Switch from Target environments to Strategies is a big change, does this impact the API effort scheduled for 12.4?
- Where does the save happen?
- Save on button editing Name/description
- Can we save on toggles, adding strategies, etc or do we need a dedicated save action
Feature flags list
Mockups
Changes
- Add toggles to list
- Add expandable/collapsable description (default collapsed)
- Add metadata
- Created
- Updated
- Related issues
- Related merge requests
- Add strategies tags
- Show type
- Show parameters
- Show environments
- Add search/filter
- Search by title
- Filter by status
- Filter by environment
- Filter by Strategy
- Add sort
- Sort by Last updated (default)
- Sort by Created date
- Sort by Name (alphabetical)
List details/edit
Mockups
Changes
- Introduce the concept of lists
- Allow users to create/edit lists
- Allow users to define list types (see discussion)
- Allow users to search by text (id, email, depending on type)
- Allow users to sort
- Sort by Last updated
- Sort by value (alphabetical)
Discussion
- MVC is most likely just user ids
- Other types would allow us to support the following UNleash strategies
- User by email
- remoteAddress (List of IPs)
- applicationHostname (list of hostnames)
- I am not sure if Lits is the correct word, open to suggestions for a better term.
- Could have parameter based lists as well (if new, or paid vs free, tier, etc)
Lists
Mockups
Changes
- Add a view to see lits that have been created
- Add tabbed view to Feature flags screen
- Tab for feature flags
- Tab for lists
- List items
- Name
- Type
- Created
- Updated
- Related feature flags
- Search and filter
- Search by list name
- Filter by list type
- Sort
- Sort by Last updated (default)
- Sort by created date
- Sort by name (Alphabetical)
Custom strategies
Discussion
- Not yet designed
- Could be an additional tab
- Similar format with a list and then details
Strategies
Discussion
- Currently designed
- Percent rollout
- Designed for gradualRolloutUserId
- Designed to easily (from a UI perspective) add gradualRolloutSessionId and gradualRolloutRandom
- User id
- The current design is based on the idea of lists
- Do we want an additional type for one-off lists so the user does not have to leave the screen
- Percent rollout
- Not designed, but Unleash supports
- Default
- gradualRolloutSessionId
- gradualRolloutRandom
- remoteAddress
- applicationHostname
- Custom
Edited by Mike Nichols