If you ask 10 people what it means to be Agile, you'll most likely get at least 10 different answers -- probably more, since many people will give you multiple definitions. Some people might quote the Agile Manifesto, others might tell you the rules of Scrum and others might say it's all about allowing flexibility in requirements. Though there may be different interpretations of the meaning of the word Agile, Agile leaders recommend looking at best practices and not at the label. In this tip, we will review some of the Agile fundamentals that are used in successful organizations.
Use an Agile methodology
While the Agile Manifesto is not exactly a cookbook approach that teaches "how to be Agile," Agile methodologies, such as the popular Scrum, can be much more prescriptive in nature. Agile teaches us to be adaptable and continually improve, so it is somewhat "anti-prescriptive" in theory, which may be why what it means to be Agile can be vague. However, using a methodology gives a software development organization a framework with required artifacts and guidelines.
Use Agile techniques
Though using a specific Agile methodology may give you a flavor for Agile practices, many organizations are mixing and matching techniques from a variety of methodologies that are considered Agile. In "Scrum vs. Kanban: Comparing new approaches in software development," we see how two Agile methodologies, with different guidelines, can be used in a complementary manner. Many groups morph best practices to come up with a custom set of guidelines for their organization.
Deliver to customers frequently
In Agile software development, you will hear terms like continuous delivery. This means that customers will be able to give feedback, and that changes resulting from that feedback will be delivered back to them more quickly than before. Agile environments establish feedback loops and build software incrementally, so that it is possible to course correct, making changes as needed.
One way to distinguish Agile development from traditional methodologies, such as the Waterfall approach, is the use of iterative development. The Waterfall approach dictates that there are "gates" between different phases of development such as requirements, design, code and test. Each phase does not begin until the other is complete with every t crossed and i dotted. With iterative development, the coding is split into shorter iterations, and each of these code segments has requirements analysis, design, coding and testing, and then review with the business or user representatives for feedback.
Ability to adapt to change
In reviewing shorter, smaller code segments with the business, users will be able to make modifications to their original requirements. Unlike the Waterfall approach, in which the business groups don't see the end result until the very end of a long release cycle, with Agile, business users are in constant communication with the development team. This development team needs to have process in place to be able to adapt to changing requirements. Using an Agile framework, a team learns methods to adapt and embrace change and removes barriers that don't allow for it.
Collaboration basically means that rather than different groups (such as the business owners, developers, QA, operations) working in silos, they all work together and communicate often. Agile teams often use the "whole-team" approach in which the whole team is responsible for quality. There is less emphasis on specific roles, and instead all team members swarm together to help solve problems and deliver high-quality code to the customer at a sustainable pace.
Test-driven development (TDD)
Test-driven development is a technique used for automated unit testing, but with the twist of writing the automated test before the feature code. The test will fail until the feature code is written. This technique, related to test-first programming concepts of XP, is said to produce simpler designs. Having these automation tests in the code itself guarantees that the tests, which can also serve as documentation, never get out of date. These automated tests can also serve as a base for continuous integration.
Continuous integration is the process of running a set of automated regression tests every time the code is built and automatically notifying the appropriate team members if there are any problems. This technique is one of the key Agile practices that allows teams to deliver so much more quickly than teams that must go through long build-and-test cycles before each deployment.
Self-directing teams and servant leadership
Agile teams do not use a traditional command-and-control type of leadership model, but instead use more of a servant leadership approach in which managers act as facilitators and mentors, striving to energize and empower their teams. In the article "Are managers needed in Agile development, or do they get in the way?", Skip Angel talks about the need for catalyst leadership in which the Agile leader embraces and demonstrates Agile values.
Though we've summarized several Agile fundamentals in this article, we have barely scratched the surface. Whole books are written on each of these topics, and, of course, authors and experts will vary on recommendations of how to best put these practices into play. Just like there are a variety of techniques involved in good cooking, there are a variety of ways to develop software. There are many cookbooks, but the best chefs know how to adjust the recipes to come up with masterpieces. Agile software development teams might start with the cookbook approach, but will continue to experiment with techniques, becoming more Agile with each iteration.