Keeping a product successful can be tricky: New features have to be developed to ensure that the product stays beneficial and attractive. At the same time, smaller improvements and bug fixes are required to maintain the product. How can this be done? This post shares my answer how to balance innovation and maintenance work.
Two Separate Concerns
Creating new features and maintaining the existing code base are different types of work: The former requires dealing with uncertainty, acquiring new knowledge, and carrying out experiments. Making small, incremental changes entails few unknowns, and the work should be done with minimum effort and no failures or mistakes. I therefore prefer to apply different approaches for the two pieces of work, as the following picture illustrates:
The picture above shows two workflows: In the top one, a feature team turns new features into a new product version using a cyclic process like Scrum. In the bottom workflow, a maintenance team carries out small enhancements and bug fixes using a linear, Kanban-based process.
To deal with innovation and maintenance work for the same product, I have a preference to work with a feature and a maintenance team, as this creates focus and it reduces task switching. It allows the team members working on new features to carry out focussed experiments, and it makes it easier for those doing the maintenance work to fix the bugs quickly. If you work with one small team, then consider forming two sub teams – particularly once the maintenance effort consumes more than 25% of the team’s capacity.
A danger of employing separate teams is the creation of a two-class society with the cool feature developer doing the innovation work, and the poor old maintenance guys slaving away at mind-numbingly boring bug fixes. To mitigate this risk, people should regularly rotate between the feature and maintenance teams. This also encourages knowledge sharing and collective code ownership.
How often and how many people rotate is best determined on a case-by-case basis. For instance, two to three people could swap places at the end of each week or at the end of each fortnight, depending on which solution best balances team cohesiveness and knowledge sharing. If in doubt, discusses it with the development team in the next sprint retrospective.
Innovation and new feature development requires the ability to develop and test assumptions, to gather and analyse data, and to leverage the new insights. In other words, the feature team requires an iterative, feedback-driven process like Scrum.
Making small enhancements and bug fixes, however, does usually not require a cyclic, feedback-driven process, as there is little uncertainty present. Instead, the changes should be implemented and deployed in a fast and efficient manner. A linear, Kanban-based process is ideal for this job.
While using separate teams and processes for feature development and maintenance work can well be beneficial, separating product ownership is something you should avoid. I have intentionally positioned the product owner between the two workflows in the picture above, as the individual should own the existing product and the new product version. As the product owner, you should hence balance the two concerns and decide how much effort is spent on new feature development vs. maintenance in a given timeframe.
This may also mean that you dedicate an entire sprint or even an entire release to carry out the necessary maintenance work and remove technical debt thereby future-proofing your product. Apple did something similar with Mac OS X. The company published a new version called Snow Leopard in 2009, which was largely a maintenance release that took
If you want to make the goal of a major release to future-proof your product, then I recommend using your product roadmap to show when the planned work is likely to tae place and get stakeholder buy-in.
Post a Comment or Ask a Question
Your splitting is interesting.
I’m nevertheless not convinced about switching people from team because in the end it adds up knowledge transfer time…
What we ended up doing in my company is to have 1 single team which work on new features (via sprint) 4 days a week and the 1 day left is reserved for support and maintainance.
With that, we have always up-to-date people and also we don’t wait for a sprint to end to do maintainance that can’t wait.
Thanks for your posts that are very well written and cleanly presented.
Hi Thomas, Thanks a lot for your comment and for sharing your approach. Sounds like you have found a great way to deal with innovation and maintenance work. The only downside I can see is that urgent requests cannot be handled immediately (unless they are raised on a Friday). How do you handle those?
Really like the highlight of choosing different processes based the nature of work and different goals of teams. We recently split our product team, and restructured us around 2 different business objectives. We let each team to decide their own process. It worked out pretty well.
I shared this article around my team to add to the conversation, great stuff! Thank you.
Thanks for your feedback and for sharing your experiences. Glad that you have found the post helpful.
Hi, Roman, we have a pretty big Agile implementation here, with several teams facing all sorts of problems, including the one this post talks about.
Since the teams self-organize themselves, we’ve been able to see that some teams took your approach (subdividing) and some of them designed a Scrumban implementation, with different rules for differnt types of work and in some cases different classes of service.
Both work well, but it seems to me that the Scrumban implementation had created better TeamWork and was better able to cope with variance in demand and its priorities (specially regarding bugs)
Hi Leo, Thanks a lot for sharing your experiences. Did the Scrumban teams work on more mature or stable products?
I’ve some concerns regarding the separation of feature and maintenance team mainly due to what you could lose in terms of:
1) Product ownership. Having a 2e2 product responsibility (from idea to market) gives teams a very strong sense of product
ownership and thus empowerment and motivation
2) Waste reduction. Having teams working on feature and maintenance eliminates the handovers.
3) Learning. Having teams working on feature and maintenance activity gives people the chance to increase competences
(Consider that there’re many ways to reduce the task switching effect)
Hi Mauro, Thanks for your comment. I share your concerns if separate feature and maintenance teams are used. I suggest, however, to frequently rotate the team members thereby encouraging joint ownership and learning.
Roman – our experience was that the New Feature team was working on a significant effort where the sprints build on one another so they wanted to stay together for an extended period of time (like a year) and this led to the Maintenance team feeling like second class citizens. Do you really think ownership can shift frequently? If so, are there some best practices to make it more manageable? Thanks and I am a big fan!
Hi Kristin, Thanks for your comment and feedback. I think it’s great when a successful team can stay together for an extended period of time. But I would also suggest that the team is responsible for maintaining the software. Is there a specific reason why this was not feasible for you?
Hi Roman, this is a great article and a good approach. I have a question on swapping members between new development and maintenance. If we swap the members working on new development to maintenance, what happens to the tasks they are doing and its continuity ? If they are in mid of some tasks and if they are swapped, would a knowledge transfer be able to enable other person to carry on from where it was left? In this case, should we plan for swapping at the end of the sprint, so the in-progress tasks are logically finished ? Can you please guide me on this ?
Thanks for your feedback and question Prabhu. The following measures will help you address the issues you raised:
Hope this helps!
in already “restructured” teams, where only the specialists in their areas are left over, the split in feature and maintenence team is often hard to manage due to chaning mainetence effort and code ownership. In my expierence a mixed Kanban/scrum approach within one team is an alternative. dedicated effort for the Kanban tasks to not harm the scrum availability and velocity …
BTW: your posts, presentations, etc are really good !