Please don’t get me wrong. I’m a trunk based development + feature toggle type of person. But that alone does not say a thing about how one can manage products and uncertainty.
When you are building a new product you can use feature toggles (or feature flags) to release software. You can also use it to execute experiments and seek validation for what you have built.
So toggles used correctly can transform your team into a “validation machine”.
You can decide how granular your toggles are going to work:
- Feature + Client
- Feature + Client + Person (that’s the one I would suggest)
This way you can enable a feature to one single person to validate something. If you use the software internally you can decide that all toggles are enabled to your team. Some product teams even use a separated environment for internal teams, something like a pre-production environment. I prefer to use the same production environment but with different versions if needed, to share most of the components.
So using toggles is a sort of an unfair advantage, right?
Well… toggles should become configurations where users can enable / disable as needed. If that does not happen is because toggles became a default behavior inside the product or they were eliminated at all. That latter is when you decide that the experiment failed and you don’t want that behavior present anymore.
But… what if toggles keep “on test” for a long time? They transform your code into a collection of technical debt. You may need to keep something because of one person or a few people using.
And the thing is that most teams don’t know how to handle technical debt (I would like to say that nobody knows but… :P) and keep adding new toggles that may be new features or new revenue generators or new growth triggers or new fake features or you choose what they can be about.
My suggestion is that every toggle should have a date to expire. Like a last responsible moment to understand what we have learned so far and what we want to do with that toggle.
Is it good enough to become a new feature? Can we release it? Do we need more tests? Do we need to remove from the product? Silence is not an option.
— Daniel Wildt