The Feature Crew model is important to the Lean software development discussion because it is another major variety of kanban system, and is probably the most successful application of pull scheduling in software engineering to date. Feature Crews are a strong and direct expression of the Lean principles of pull, flow, and value.
Features
Value is represented in Feature Crews by the feature. A feature is roughly defined as a unit of customer-valued functionality that can be built and fully integrated within an interval of a few weeks. The feature is the fundamental unit of scheduling in Feature Crews. Features are generally derived from a user-centered analysis practice like Personas/Scenarios, and they should be bundled into customer- and business-valued packages for integration and deployment. Defined in this way, features are roughly equivalent to the Minimum Marketable Feature (MMF) concept. Personally, I define features exactly as MMFs and therefore I define:
The Feature Crew process is a one-piece-flow pull system for Minimum Marketable Features.
Feature Crews
The namesake attribute of a Feature Crew is the cross-functional workcell. A crew should contain most of the capability that it needs to fully specify, design, verify, and integrate a complete product feature. Typically that means a Program Manager (in the Microsoft sense of the title), a handful of developers, and a couple of testers. Depending on the type of feature, there may also be a product designer or other specialist, but we’ll see how such a resource might be shared across workcells.
Branch-by-Feature
One of the primary problems that Feature Crews address is the difficulty of maintaining the integrity of very large code bases under development (imagine 1000 developers coding against a 10,000,000 line system). FC poses the problem as the tension between a) keeping the main branch as current as possible, and b) keeping the main branch as robust as possible. The FC solution is to make features an atomic transaction. A feature is either 0% complete or 100% complete, and a feature is not 100% complete until it can be demonstrated that it satisfies the same quality criteria as the rest of the main branch.
Features-in-process are not allowed on the main branch. The FC alternative is branch-by-feature. A crew takes a branch when it takes possession of the feature kanban. The crew is responsible for forward-integrating any changes that are checked into main while their feature is in process. That is, if another crew integrates and breaks your feature-in-process, it’s your responsibility, not theirs. When your feature is finally complete AND you have integrated with all changes on main AND you pass all of the quality gates, THEN you can reverse integrate your feature into the main branch, and everybody else will have to forward integrate your changes.

From a Lean perspective, even without the scale issue, there is an argument to be made for atomic MMFs and branch-by-feature. MMFs are business-valued. User stories are merely user-valued. Customers demand features. Users merely request them. Allowing features-in-process on the main branch exposes the product to inventory and market risk. A Lean deployment model should be transactional at the granularity of business value, not user value. The purpose of the MMF practice is to bring those values as close together as possible.
One Feature, One Crew
A feature is an atomic customer-valued work item (value). A Feature Crew is a dedicated cross-functional team (flow). We need one more thing to implement pull, a rule: One Feature, One Crew. A Feature Crew works on one and only one feature until the feature is fully integrated into the main branch. When such a feature is finally accepted, then capacity becomes available to begin another feature. Such a rule about the relationship between work-in-process and available resources is a kanban rule, thus Feature Crew is a kanban system, where each token represents the capacity of one workcell and is exchanged for exactly one feature.
What happens to a Feature Crew when its feature is complete? There are a couple of variations. One style keeps the crew intact and reschedules it as a unit. Another returns the crew to a resource pool from which new crews can be allocated. Neither pure strategy is necessary. I like mostly durable teams with light rotation of individuals.
Quality Gates
While things like unit tests and customer acceptance tests are necessary to meet the quality criteria of a multi-million-line codebase, they are certainly not sufficient. A Minimum Marketable Feature, taken as a whole, has properties that are more than the sum of its component tasks. There are certain kinds of design and quality control activities that have a larger natural granularity than user stories.
Quality Gates ensure that all of the systemic work gets done that does not fit naturally into the functional development process. A good deal of security and reliability engineering has nothing to do with the intended functionality of a feature, and everything to do with how components of a system will behave in the presence of other components of that system under a wide range of operating conditions. Quality Gates also facilitate the sharing of specialized resources, like a security engineer or a system architect, that are impractical to include on every crew.
Feature Crew is only a process framework
The Feature Crew model treats both features and workcells essentially as black boxes. Like Scrum, the Feature Crew method is not prescriptive about workflow. What happens inside the crew is somewhat up to the crew. One could imagine that a crew implements a mini-phase/gate (and some do, though we know that isn’t wise). A crew could choose to implement an off-the-shelf process like Cleanroom or XP for their internal workflow, and many do. Some crews will use an ad-hoc local body of practice, or git-r-done cowboy craft. The quality gates set the bar, how you meet the bar is your concern.
Since Feature Crews address a different scale than Scrum, we can even combine Feature Crews with Scrum. If a crew takes on a 6-week feature, that crew could then overlay a 1-week timebox within those 6 weeks and decompose the feature into Scrum-like work items and goals, which are then implemented according to local custom. Again, this is not uncommon practice.
Kanban hierarchy and matrix workcells
Since we already understand Feature Crews as a type of kanban system, and we see how can we can overlay Scrum as a secondary planning process, then it follows that we can use something like Scrumban as the internal scheduling process. We don’t have to do this, but doing so buys us some symmetry between the layers of planning hierarchy, and allows us to share metrics, tools, and terminology between workers and management. The cumulative flow report for your team is of a similar kind to the cumulative flow report for the project as a whole.
Feature Crews are an effective method of capacity calculation, but they are also a blunt instrument for that purpose. Making a team self-contained can result in boom-and-bust duty cycles for individual team members. The beginning of a feature branch may be heavy on analysis and high-level design, and the end of a feature branch may be heavy on system testing and bug fixing. A UI designer might find herself very busy for the first couple of weeks and mostly idle for the last couple of weeks. Such a team may be able to learn a certain amount of task leveling, but only so much before running into other problems.
The complementary dysfunction of individual bursting is poor total resource utilization. If every crew employs their own UI designer at 50% capacity, then you’ve hired twice as many designers as you really need to get the work done. As much as we love flow, that is a high price to pay for it. Introducing a second level of kanban granularity gives us access to a finer set of controls that we can use to dial in a better balance between availability and utilization.
Nested Scrumban is enough to give us a more consistent process between the whole and its parts, but it doesn’t help us directly with our utilization problem. For that, we will appeal to a little bit of queueing theory. For some development functions we may be able to share resources between workcells with the same low delay as more dedicated resources, but at much higher utilization. Software development costs are overwhelmingly dominated by labor costs, so paying at least some attention to labor utilization is worth our consideration. Lean cares a lot about labor utilization, it just cares about it in the right order.
Given these tools, we can design a hybrid feature crew / matrix organization. Some resources can be feature-aligned and dedicated to their workcells. Other resources can be function-aligned and pooled across workcells. A product group with 10 workcells probably doesn’t need 10 security engineers, 10 user researchers, 10 architects, and 10 database administrators. But there is some right ratio of each of these functions to each other, and those ratios can be determined by value stream analysis, theory of constraints, and other heuristics.





Dew Drop - April 8, 2009 | Alvin Ashcraft's Morning Dew | 08-Apr-09 at 7:08 am | Permalink
[...] Feature Crews: kanban systems for software engineering in the large (Corey Ladas) [...]
A sensible approach to source code branching « Scale or die | 08-Apr-09 at 12:09 pm | Permalink
[...] an excerpt from Lean Software Engineering. FC in this context means “feature [...]
Troy Tuttle | 09-Apr-09 at 8:03 am | Permalink
Very informative. Thanks!
I experience something close to this in a hybrid Agile approach. No one knew about feature crews, but the result was sub teams organized around feature completion and integration of results in an iterative process.
Nice to see a relationship to Kanban too.
Definition of a Bottleneck | 13-Apr-09 at 7:15 am | Permalink
[...] Feature Crews: kanban systems for software engineering in the … [...]
Todd Morrison | 27-Apr-09 at 5:00 pm | Permalink
I love the white-board photo! Its great to see these concepts in practice.
Here are my thoughts on the Feature Crew: http://www.deepelement.com/blo.....Teams.aspx
If you have any ideas, or can bust any holes in the process, I invite your input!
Brad Appleton | 29-May-09 at 7:36 pm | Permalink
Hi Corey! Speaking as someone with a LOT of expertise in branching and having seen branching by feature as well as branching by everything else …
I can say that “branch by feature” only works well if you get REALLY good at making MMFs as small and minimal as humanly feasible. The longer your features branches go without being integrated with “the other stuff” the more integration complexity you are risking.
If MMFs can’t be kept down to a certain threshold size/duration, then it actually starts to make sense to integrate them anyway to avoid the impending “big bang!” at the end.
How do you do that? Well, you can create a “pre-integration” branch that integrates the features and makes sure they all build+test okay, but no one is allowed to base their changes off that branch (and if they fix any problems, they have to find a way to fix it on the feature-specific branch so that it still works there AND on the pre-integration branch.) This may not always be feasible.
Another way that is no small task but also can have big payoff is solving your problem by a means other than branching, specifically in the architecture and design of the interaction/impacts between features.
This often takes the from of build-time, install/deploy-time, or run-time configuration that can enable/disable features while still allowing you to integrate the code. This can be very hard to do, even though it can pay big dividends in the long run.
The simplest solution is to keep the MMFs “sufficiently small” (e.g, anything that goes more than #N weeks before being integrated to mainline is quite likely a significant risk. A typical range for N here would be 2-6, with 4-5 being very common.)
Just make sure folks understand that branch-by-feature-and-don’t-integrate-until-its-complete isn’t necessarily all that desirable unless the features are *minimal* sized.
Sebastiano | 07-Jul-09 at 8:14 am | Permalink
Hi there
,
it’s a long time I want to ask you something about MMF.
It looks like there isn’t a standard definition of MMF, expect the one that one can find in the software by numbers book that I haven’t read yet.
You write: MMFs are business-valued. User stories are merely user-valued.
And it looks like that in your case you use feature crew MMF that you split into user stories (maybe developed by one member only?) and you don’t use tasks. This is a vision that I actually share with you.
Some people though say that MMF are actually user stories, like here: http://aaron.sanders.name/agil.....-the-small .
Now let’s say that one uses the method he likes most, that in your case, if I got correctly, you use MMF split into user stories. In this case you told me that is better to try to create equal-size stories, if this is possible, is it possible to estimate the MMF size in terms of number of user stories or you think even the MMF must be equal sized?
About the branching, I agree with Brad, I think it’s better to branch by user stories, at least this is what I have done succesfully so far, even if I can understand your point of view.
Thanks for your replies
Corey Ladas | 07-Jul-09 at 12:20 pm | Permalink
Hi Sebastiano,
Great questions as always. Part of the value of MMFs is exactly that they can vary in size. Then it follows that you can use story count as a measure of size.
Now, given the chance, I prefer using a method like QFD for requirements definition. However not everybody is up to that level, so MMFs and stories are a reasonable backup method for existing Agile or other medium-capability teams.
Mark Kennaley | 03-Aug-09 at 4:13 pm | Permalink
Hi Cory,
I ran across this post and it smells alot like what I advocated and deployed back in 2000 for a large Japanese systems integrator for the re-engineering of the Japanese Banking System. Again – $160M+ efforts do exist and seem to be a challenge for prima-facia Agile approaches. I have recently written a paper focused on the importance of going beyond the physical form of Kanban boards and leveraging common workflow technologies (that is currently creating the ALM buzz, whether it be based on the Jazz platform, or VSTS); my thought (and a point in my paper I try to make) is that form follows function, and that abstracting Kanban yields a nested state machine – a common pattern for workflow`. My concern has always been purists trying to spin their wares without understanding the core abstractions and principles behind these (somewhat) longstanding practices. I have seen some Agile purists being closed-minded to the management science behind flow and pull. My paper is titled Applying Lean Manufacturing and JIT to Software Product Maintenance. I then discovered (after the fact) that David Anderson wrote about this very topic back around the same time, but again leveraging the same physical form. I’m thinking that for reasons you describe above related to branching complexities, the industry and perhaps the Agile community needs to move beyond the “tool is a four letter word” idea and explore what “Digital Kanban” really means. Would love to share the thoughts I have packaged in my paper as they seem to be quite consistent with what you have been advocating for what looks like the past while. And some feedback would be great.
Cheers.
Corey Ladas | 05-Aug-09 at 10:13 am | Permalink
Hi Mark,
Sounds like a very interesting paper, would love to read it.
A Quick Survey of Development Methods « Z303 | 25-Sep-09 at 1:46 pm | Permalink
[...] Tasks progress from Agreed to Ready to In progress to Done. Each developer works on a single task at a time, which once started will be finished unless it becomes blocked for some reason. The ready queue is prioritised and of limited size to focus development on the next most important tasks for the project. [...]