Agile software development requires management support. If the rest of an organization is fundamentally entrenched in a waterfall process then it will be difficult to for software development to become agile. In such situations, we must identify external dependencies and give the non-agile parts of the organization time to get us whatever we need so we can continue to build in parallel. Here are seven strategies for getting support from management for doing Agile development.
1. Speak their language
We are all concerned with delivering the best product we can but sometimes developers express the desire differently than managers. Developers may say we want to spend time refactoring code to clean it up. Managers may not understand what is meant by that. It might be easier for managers to understand if developers say that by refactoring a piece of code now it will make it cheaper to add features to that code in the future. Then management can decide if it is worthwhile to refactor.
2. Talk honestly and set expectations
“How long will it take?” is a question developers are often asked but can rarely answer with absolute certainty. Development tasks can be hard to predict, especially when there are unknowns involved. Tasks are sometimes more work than they appear at first so it is good to be honest with ourselves and admit when we have unknowns. We also have to help management understand that if we don’t know how long something will take, we are not trying to be evasive–we are trying to be honest. If management needs to know precise timing then it may make sense to spend time evaluating and estimating tasks in more detail, even when this takes away from our overall progress. Other times it might be wiser to just roll up our sleeves and work until we are done. We may want to ask our manager which approach is preferable and let them decide.
3. Set goals and measures
Having the same goals and ways of measuring progress is important to management. We should agree on priorities and how to measure progress. It can be easy to get stuck on a problem without realizing it but the purpose of time-boxing is to establish check-in points so we can more accurately gauge our progress and help us identify when we are stuck so we can take corrective action.
4. Teach them to think differently
Software construction is fundamentally different than constructing physical goods. Managers without a lot of experience in the software industry may not understand the tradeoffs of some of their decisions. They may see the importance of hitting a short term goal but not understand the long term costs of cutting corners. As developers, it is our job to help managers understand the tradeoffs we may be asked to make so we can make the right decisions together.
5. Lessen the learning curve
Agile development can be significantly faster than waterfall development once the team becomes experienced with the approach but this usually doesn’t happen overnight–there is a learning curve. We can “lessen the learning curve” by getting the right training, pairing experienced developers with less experienced ones to propagate knowledge throughout the team, and hiring a knowledgeable guide to help with challenges. The path to agile software development has been taken by many teams so understanding the places where teams typically have challenges will help your team move past those challenges more quickly.
6. Show successes all along the way
It can be easy to measure the wrong things in software development. Velocity may be useful for gauging capacity but not for measuring productivity. Understanding “minimal marketable feature-sets” so scope can be adjusted to meet critical deadlines is far better than trying to cut corners on quality. Use iteration demos and frequent code reviews to help the team and management see progress and learn from what we just accomplished.
7. Strive for technical excellence
When we focus on velocity we might end up sacrificing quality. What good is rushing through 80% of the development if we accumulate so much technical debt that the last 20% of development is impossible? We want to achieve sustained velocity and we do this by focusing on quality throughout development. A cornerstone of agility is its focus on technical excellence and this focus more than any other is responsible for rapidly building quality software in an agile process.
Agility has worked well for countless software projects in a range of areas but great teams do more than daily stand-ups and short sprints. There is a range of technical practices needed to really leverage agility and the entire organization, especially management, needs to understand how agile development works to get the most out of it for their team.