Kanban, Branching, Quality Gates, and Feature Toggles

The more I learn about process improvement, operations, and the delivery of value in context of engineering management, the more I discover just how much there is that I do not know with absolute certainty. But that is ok. I think that is kind of the point of a lean and agile approach to engineering.

Lean and agile software development teaches us to "release early, release often", to measure, test, and validate iteration after iteration and use these measurements as feedback loops to improve the next iteration. As well, I think that can easily apply to managing how development occurs and how an engineering team operates.

In fact, at this point, I think I would be concerned if I ever got to a point where I was happy with our development process for more than a couple of months. If I am not seeing places to improve or at least ways that we can experiment with improving from time to time, then I think that would mean that I am not paying close enough attention.

The topic I am most recently wresting with is my desire to drive us closer and closer to Continuous Integration but at the same time benefit from the current isolation of topic branches. The benefit being that it pairs up nicely with quality gates in our currently delivery process. We manage this process through virtual Kanban boards and have two phases of quality control—code review and then QA/functional testing. We used to keep isolation through the QA phase, but have recently pushed it up to the topic branch being merged into the main development line as soon as it passes a code review.

My current thinking is that best way to drive down the length of time that topic branch remains a isolated from the rest of development is to spend time on the story writing. By this, I mean making sure that 1) the story is small enough to accomplish in an less than a day, perhaps even smaller, and 2) making sure not to break the story down so small that there are other stories getting developed in parallel that share the same common functionality.

I am interested as well to explore the idea of using Feature Toggles to perhaps merge code that is not ready for production into the main dev line but just with the feature turned off until it is complete. Facebook supposedly does this a lot. From what I have read it's mostly settings/configuration that turn off UI portions of a feature like a switch. I could see Feature Toggles also being useful in the scenarios when you want to turn on or off certain features for different user levels, for paid subscriptions, to unlock certain functionality in response to some user activity, and more.