Django Permissions as Feature Toggles

In July we've released a new dashboard for our advertisers. The new dashboard aggregates reports from Outbrain, Yahoo, nRelate, Gravity, and other media sources providing traffic to our advertisers' content marketing campaigns. Releasing the first version of any software product is always a lot of fun, since things move fast and there are no existing users and their strange requirements that software should work as expected and shouldn't break in the middle of their workday. But now we're already in the second phase of product development and the features we're releasing now are incremental additions to a service used and operated already by a few dozens of users. As we started with the second phase of the product development, I've requested from engineers that all new features should be available to me and other alpha users in production setting for review. Furthermore, I've requested from engineers that every new feature must first be released to friendly beta users, before it is made available to all users.

We have an amazing team of engineers. If you give them a problem, they will always amaze you with elegance and excellence of the solution they devise. For the problem of gradual feature release, they've come up with a solution which uses Django permissions as feature toggles. Every new feature that our engineers are developing is attached to a particular Django permission (e.g. "reports | article stats | Has Per-Day Report sheet in Excel source export."). Once the feature is completed (by the standards of an engineer) it is deployed to production and the permission to see the feature is given to the "alpha" Django user group of which project managers are members. This enables the product managers to test the new feature in production setting without real users seeing it. Once the feature is completed also by the standards of the product manager, the engineer is done with the feature and the rest of release management can be handled by the product manager alone by attaching the permission to see the feature either to individual users or group of users. In our case, we first test the new feature on "beta" user group to see if the feature works according to expectations of the end users. Once we're certain that it does, the product manager can use Django admin to give permission to see the new feature to all user groups which should have access to it thus releasing the feature in the wild.

We're using Django permissions as feature toggles for a month only, but they've already turned out to be a great solution for the problem of staged feature release. If you happen to have some more long-term experience with this solution, I'd be happy to hear about it in the comments.