How the agile development process really works
Everyone, it seems, is doing agile development. Everyone certainly seems to be talking about it. But the truth is that many organizations don't have a firm grasp on the process of agile software development. So, even if you think you're doing agile development, you may not be.
Doing agile development is a lot like running a restaurant. Everyone has their own specific tasks, but they have to work together so all the pieces come together at the right time. And they have to be able to make all sorts of meals based on whatever customers happen to want each day. The team is only successful when the product is satisfactorily delivered to the customer.
The process in a restaurant starts with the food orders. The server collects the orders on tickets that the kitchen then works through. In software development, business units ask for the products they want developed, providing their user stories and requirements-in other words, their order tickets. The agile team has to take all those tickets and figure out how to make all the products so they all get delivered at the right time to the various business teams. That's called the Kanban process, based on the Japanese word "Kanban" for the tickets used in project planning.
The scrum master, in consultation with the product owner and development team, organizes the tickets into groups that can be tackled at once. The groups are then placed in order so the first things that need to get done get done first, and so on. In a restaurant, tickets are organized for similar reasons, so the person preparing the ingredients knows what to prepare in time for the chef making the specific dish, and so the whole meal comes together at the right time.
In agile development, these groups are called sprints - typically a two-week period where the various developers work on their tickets, so they're done in time for the next sprint.
In a restaurant, the executive chef shows the cooking team everything that needs to be done for this set of orders. The cooks commit to what dishes they will work on. In agile development, the same process occurs in what is called the scrum process. In agile development teams, developers likewise commit for the code they will deliver for the current sprint.
The cooks make the food, adjusting the seasoning and methods as needed based on the ingredients they have and any issues that come up while cooking to deliver the meal the customer expects, as well as from any feedback from the wait staff and customers. Agile development works the same way: Developers implement what they committed to, making adjustments as they go to deliver the desired result based on feedback from stakeholders, the product manager, and their own insights.
A restaurant's cooks are always looking to make the food better and the preparation process better. As they cook, they discuss and record where they need to make improvements with the ingredients or cooking process, then make adjustments in their future work. Agile development teams do the same thing, giving each other feedback during the development work as well as at the end of each sprint in what is called a retrospective.
At a restaurant, when a batch of orders is done, the next batch starts up following the same process. This continues until service is completed. In agile development, the sprints continue until the product is delivered. When that happens, the team starts over again on a new product.
In a restaurant, consistency is important for every item on the menu. To accomplish that, the executive chef works out the recipes and then teaches them to the cooks and sous chefs. Typically, prep cooks also cut up all the vegetables and other ingredients in advance to precise specifications so they're ready to use when the cook needs them. It's almost an assembly line for food.
In agile development, some of the work can be automated, such as code management and automated testing. Likewise, continuous integration ensures all the ingredients are prepared and then assembled properly to form the item. Continuous delivery lets you deliver code within each sprint, not wait until the end of each sprint. That gets the software to the business faster, though in smaller chunks. It's like a dim sum or tapas restaurant that lets you order different bites of food throughout the meal, delivering each when ready, rather than delivering the whole meal all at once.