Take a moment to Google "Agile software development" or "Agile methodology" and you'll have no lack of search results to choose from (163,700,000 to be precise).
Before we dig into defining "agile," let's take a brief look at its counterpart, the "waterfall" method, and understand why this is the wrong way to conduct product development. The problem with waterfall software development is that it assumes we know everything from the very beginning of the process:
- User (internal and external) requirements and preferences are 100% known and understood;
- The breadth and depth of the scope won’t change;
- Integrations are fully known;
- The product will be exactly right when it is released.
This is not realistic. As intelligent and creative beings, we are wired to observe, interpret, and adapt. When it comes to waterfall development pride comes before the fall.
Agile software development is much better suited to this reality. As an adaptive software development process, Agile enables self-organizing and cross-functional teams to be flexible with the realities of changing requirements and solutions. As described by the Agile Alliance, "It (agile) advocates adaptive planning, evolutionary development, early delivery, and continual improvement, and encourages rapid and flexible response to change."
This often takes the form of backlogs, sprints, daily scrum standups, testing, and sprint reviews. Let’s take a look at each of these pieces:
- Backlogs: a backlog is a list of product features designed to meet the gathered user requirements. These features are organized by priority, assigned points which identify complexity (how long a task will take to complete), and assigned to a sprint for completion.
- Sprint: a sprint is a period of time allotted to complete a batch of requirements. Most development teams run two-week sprints with the goal of creating tangible and testable feature sets by each sprint’s completion.
- Scrum: a scrum is a quick meeting where each member of the team, including designers, developers, product owners, and a project manager (often a scrum master) announce what they completed yesterday, what they are working on today, any “blockers” that are preventing them from accomplishing an assigned task, and, ultimately, assessing their daily progress in completing the sprint tasks on time.
- Testing: Often overlooked by clients is the need to perform quality assurance (QA). Software involves a significant level of interactions and dependencies which must be thoroughly tested on a variety of browsers and devices to ensure accuracy, completion, and consistency.
- Sprint Review: At the end of each sprint, the team will come together for a review or “retrospective” to discuss the prior sprints accomplishments and issues and plan for the next sprint which will pull from the top priorities of the existing backlog.
In this way, Agile is more than a methodology, it is a human approach to software development.
Maslow’s hierarchy of needs states that humans have five basic need categories: a) Food, water, warmth, rest; b) security and safety; c) community (relationships); d) esteem-the feeling of accomplishment; and d) self-actualization - achieving one’s potential and fulfilling creativity.
I believe that (as long as there's beer and pizza nearby) the Agile methodology fulfills these needs and this is what makes it unique in its ability to inspire progress, motivate teams, and achieve successful product rollouts.
Let’s take a look at the hierarchy of needs, and how the Agile methodology capitalizes on this:
Security: Agile software development provides the greatest amount of transparency and most direct path to success. No one wants to spend money on a massive piece of software with features that aren’t going to be used or need to be overhauled because they were developed without a comprehensive understanding of how the users will interact with the application.
Agile development allows teams to march forth with confidence, learn at each phase, and progressively reduce wrong decisions as they learn from past mistakes. In this way, I believe Agile provides the greatest level of security to the customer/product owner.
Security can also be found by development teams from reducing end-to-end scopes into bite-sized pieces that can be more fully comprehended. Building a puzzle without first organizing your pieces causes stress and inefficiency. By organizing the puzzle into edge pieces, then by color, etc. a person can more easily tackle a large project section by section. Likewise, sprints reduce the anxiety associated with the unknown be restricting a developer’s focus to the tasks at hand.
Community: Agile fosters a collaborative approach to software development. From planning to interpreting and adapting to user feedback, agile requires team members to stay in communication regularly and develop collaboratively, not in silos. The result is efficiency and creative solutions as team members propose and breakdown solutions.
Accomplishment: Rewards-based motivation is an extremely impactful way to influence behavior. And, what’s more rewarding than seeing your hard work go live through regular deployments? Two-week sprints ensure everyone gets a proverbial pat-on-the-back every two weeks.
Self-actualization: Everyone is looking for purpose and, for many, we find great purpose and fulfillment in our work. Building a product that changes a process, provides better clarity, revolutionizes and industry...it is easy to find purpose in that.
The Agile Manifesto states that we “welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. "This approach is the cornerstone of building products that delight users and revolutionize industries.