Software development has been often compared with many real life examples whether it is building cars or constructing buildings, they are all compared to software development. I remember taking up example of a Car at my job interview with Yarris to discuss the concepts of Object-oriented programming. That was many years ago and I did end up working with them for about 2 years.
To explain Agile Development methodology I take up an example of a Restaurant. A restaurant kitchen has to constantly deal with new requirements, changes and problems.
Let’s consider the roles in a restaurant and how they compare with a software project respectively:
- Restaurant Manager -> Project Manager: Greet and seat the customers, to manage scope (how many people are seated at a time given the amount of staff and complexity of the food or requirements). Also a point of escalation when things go wrong.
- Service Staff -> Business Analysts: Take orders from customers, or in other words, gather software requirements. They also ensure requirements are met to the satisfaction of the customer.
- Cooks -> Developers: Implement the requirements based on the specifications (order/ticket) provided by the analyst. They taste the food to make sure it’s what they expect (unit test?).
- Head Chef -> Technical Lead: Ensures that processes are followed and that high standards are met. Watches food on the way out to make sure it looks good and meets the specifications. Also keeps the team energized and motivated. In some software organizations this is an Architect or a Q/A Lead.
The Agile Restaurant
- Restaurant Manager greets Customer at the door, and seats them if a table is available.
- Once seated, the Service Staff (BAs) collects the Customer’s order (requirements).
- The Service Staff (BAs) places the order on a ticket queue (a Story Wall!)
- The Head Chef calls out the order and prioritizes them to ensure entire tables are served at once and on time, but also identifies any opportunities to improve efficiency.
- The Cooks implement the orders as they’re called out and may refer to the ticket as necessary. They taste (test) their food, to ensure that it turns out the way they intended. They report back regularly to the Head Chef with time remaining on the order (stand up meeting?).
- The Service Staff delivers the order to the Customer
- In the event that the Customer is not happy, the Service Staff can return the order to the kitchen, at which point the Head Chef can re-prioritize and correct the order.
How would a restaurant run with Waterfall?
- 5pm – 6pm: Seat all the customers.
- 6pm – 7pm: Collect all orders.
- 7pm – 8pm: Head Chef prioritizes and calls out all orders.
- 8pm – 10pm: Cooks prepare all of the orders.
- 10pm – 11pm: Head Chef checks every order, sends back all of the wrong orders.
- 11pm – 12pm: Cooks fix all of the wrong orders.
- 12pm – 1am: Analysts deliver all of the orders to the customers,
- and return all of the incorrect orders (probably cold from sitting there during the previous check/fix cycle — stale requirements!)
- 1am – 2am: Developers err…. Cooks flail around trying to correct old orders originally received hours ago, for customers that have been waiting for hours.
Agile methodology allows teams to satisfy customers sooner and deal with problems closer to the point at which they were created. One could argue that even in the Agile case, customers could end up waiting and errors will be made. But there’s certainly no case for Waterfall making the situation any better.