Earlier this month I had the opportunity to teach 3 agile training sessions in a row, 2 for clients and one at Northwestern University. In those classes, I learned a few things from the attendees. These were challenges that the participants saw to implementing Agile in their organization. They were often stated as objections or ways in which they did not think Agile would work for them.
Agile doesn't solve all problems, but these challenges have been successfully addressed by others. Below are some of the ways in which others have solved these organizational challenges.
Challenge #1: More Demand than Capacity to Deliver
This was the most common challenge. No matter how many people and teams the organization had, there was always more demand for things to get done. There were more projects, more production support, and more business needs than what the organization could satisfy. There was a demand to get more done with less people; to be competitive, but to do it as cost effectively as possible.
This is a difficult problem. There will always be more demand, and more great ideas than the organization can satisfy. So what can be done?
- Say no - There are always limits to capacity so something has to give. Someone has to PRIORITIZE what is most important and say NO to things that are not the highest priority.
- Match demand to capacity and be realistic - Rather than overload the delivery organization with too much work, match the demand to the capacity that you have. You will get more done this way, rather than overloading the system with too much work which will cause less to be done.
- One project/thing at a time - If you want to get more done, work on one project/feature/request at a time. By limiting the amount of WIP and the corresponding task and context switching, teams will get more done.
- Start fewer things and finish more things - Related to the previous idea, stop starting and start finishing things.
Challenge #2 - Working in Projects Rather than in Features
When we work in big, monolithic projects, we slow everything down and pretty much guarantee that there will be low priority requests in that project that get delivered while other, higher value features do not.
- Break projects down into smaller chunks or features - By breaking big projects down, we are able to deliver features within that project faster.
- Deliver the Highest Value Features First - Once broken down, we can prioritize chunks of work or features and deliver the highest values features first.
- Let Teams pull next most important piece of work - Rather than pre-assign features and set deadlines, let the teams pull the highest next highest priority chunk or feature when they have the capacity to work on it.
Challenge #3 - Everyone is Assigned to Work on Multiple Projects/Initiatives at the Same Time
There is a belief that the best way to get more done is to assign each individual to work on multiple projects/initiatives at the same time. This causes multi-tasking and context switching and LESS IS ACTUALLY ACCOMPLISHED. This is a difficult paradigm to break because on paper it looks like keeping everyone busy would lead to higher productivity. It doesn't.
- Build Long-Term Stable Teams with Great People - Assign everyone to one and only one team. This doesn't change the organizations capacity, only helps them to get the most from the capacity they have.
- Stop focusing on individual utilization - Rather than have elaborate spreadsheets to track all the projects that people are assigned to in order to get 100% utilization, focus on high-performing teams that outstrip the productivity of the individuals.
- Direct work to teams and not individuals - Related to the previous two items, direct work to the stable teams and not to individuals. Just because Jimmy is the best Java developer, that doesn't mean he should get all that Java work directed to him and ignore the other steps required to get his coded features into production.
- Stop chasing the lowest hourly rate and instead focus on getting great, motivated people working together on teams - Getting a bargain on your hourly rates for development or testing while ignoring the end to end delivery costs is short sited. Step back and look at the bigger picture and what it costs to get features implemented into production.
Challenge #4 - Continual Firefighting and Crisis Management
Most organizations are too busy fighting fires and dealing with crisis to do a good quality job the first time. This becomes a vicious cycle where there is never time to do it right the first time but always time to do it over.
- Stop pulling team members away from teams to fight fires - Once you have stable teams, we need to protect the teams from the crisis of the day. Sure there are going to be issues that warrant attention but that should not be the standard operating procedure. When there are problems, direct them to the team to solve rather than to one individual on the team.
- Focus on fire prevention - Think like scientists and determine why the fires occur in the first place. Use root cause analysis and the 5 whys to understand what happened to set up the current problem. This will help to break out of the negative cycle. Stop planting the seeds for future fires by taking short cuts today.
- Don't continually change priorities - Once we set priorities for the teams, don't change them. Let the teams work on one item at a time and finish it, rather than continually disturb the teams.
- Don't Overdo it with Status Meetings - Sometimes when there are crisis, the leaders feel they need to call everyone together to find out what is going on. Subjecting team members to numerous status meetings only slows things down and sets the stage for future problems.
Challenge #5 - We Have Just a Few Key People Who Can Get the Work Done
This is common as well. As individuals have demonstrated proficiency in a particular application or business domain, we have funneled all the work to them. While we want people to become proficient, we don't want just one person per system or domain. This causes organizational inefficiencies and key person risks.
- Build long Term Stable Teams and Encourage Cross-Training - Set up those long term stable agile teams and encourage them to cross-train. We don't expect everyone to have exactly the same skill sets, but we don't want one person to know everything. We want to encourage "T-Shaped" skillsets so that we don't have to depend on just one person to get any particular job done.
- Align Incentives to both Individual Skill Growth and Team Work - Review how the performance management systems incent behavior and align them to individual development, team work, and team productivity.
- Don't Reward Individual Hero Behavior - It may not be obvious that it is short term thinking to reward someone for working a few all nighters or weekends to save the organization from failure. Better to reward someone for delivering what the team planned and executed together.