In the previous post, I recommended short-lived feature branches to help keep in-house and remote developers working effectively on the same code modules. This ensures that your in-house developers maintain genuine code ownership at all times.
But, short-lived feature branches cause incomplete features to be built and deployed to testing, staging, and possibly even production environments. How can that be a good thing? It isn't, if the code for the incomplete features is active in those environments. What we need is a way to quarantine the incomplete feature code from the active code.
Enter feature toggles.
The feature toggle concept is very simple: Have a boolean value that indicates whether a feature should be enabled in the current environment. Then, surround new code with a simple IF statement checking the feature toggle. In the simplest implementation, this boolean value can be a configuration setting. There are also more sophisticated implementations where you can change the setting at run-time.
The developer will work with the feature toggle on, so that he/she can see the effects of their work. The other environments (e.g. test, staging, and production) keep the feature toggle off until the feature is ready. Once the feature is considered complete by the developers, then the feature toggle can be turned on in the test and/or staging environments, allowing for a testing period. When it checks out thoroughly, the feature toggle can be turned on in production.
While the concept is simple, using feature toggles requires very thoughtful implementation. I hope to describe some key considerations in a later post. But, the key point here is that feature toggles help quarantine incomplete features while incremental implementation is merged into the master branch of the repository.