Experience Report: Feature Toggle over Feature Branch
We often use Feature Toggle
on my current team (when gradual release isn't possible). My experience
so far has been: gradual release is better than Feature Toggle, and
Feature Toggle is better than Feature Branch.
I
found Martin's bliki entry on Feature Toggle to be a great description,
but the entry doesn't touch on the primary reasons why I prefer Feature
Toggle to Feature Branch.
When using Feature Branch I have to
constantly rebase to avoid massive merge issues, in general. That means
rebasing during development and testing.
Rebasing a branch while it's complete and being tested, has often lead
to subtle, merge related bugs that go unnoticed because the feature is
not under active development.
Additionally, (and likely more
problematic) once I merge a feature branch I am committed (no pun
intended). If a bug in the new feature, that requires rolling production
back to the previous release, is found after the branch has been merged
I find myself rolling back the feature commit or continuing with a
un-releasable trunk. Rolling back the commit is painful because it is
likely a large commit. If I continue on with an un-releasable trunk and
another (unrelated to the new feature) bug is found in trunk I'm in
trouble: I can't fix the new bug and release.
That's bad. I
either lose significant time rolling back the release (terrible), or I
roll the dice (terrifying). I was burned by this situation once already
this year. It is not something I'm looking to suffer again in the near
future.
Feature Toggle avoids this entirely by allowing me to run
with the toggle available and turn it back on if things go wrong. When I
feel comfortable that everything is okay (usually, a week in prod is
good enough), I clean up the unnecessary toggles.
Of course,
nothing is black & white. Sometimes a Feature Toggle increases the
scope of the work to an unacceptable level, and Feature Branch is the
correct decision. However, I always weigh the terrible/terrifying
situation when I'm choosing which direction is optimal.
It's also
worth noting, I roll the current day's changes into production every
night. It's possible that your experience will be vastly different if
your release schedules are multi-day or multi-week.
From http://blog.jayfields.com/2010/10/experience-report-feature-toggle-over.html
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





Comments
Alan Parkinson replied on Fri, 2011/07/15 - 1:12pm
Its good to hear you clean up the toggles when they are no longer required. One of my concerns in using toggles is the build of risk through dead code if they are not removed. I have seen this happen through laziness, lack of process, and the businesses comfort of knowing a feature can be turned off.