Introduction

Agile is an iterative approach to project management and software development that helps teams deliver value to their customers faster and with fewer headaches. It advocates adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change.

Agile vs. waterfall

Whereas the traditional “waterfall” approach has one discipline contribute to the project, then “throw it over the wall” to the next contributor, agile calls for collaborative cross-functional teams.

One of the differences between agile software development methods and waterfall is the approach to quality and testing. In the waterfall model, there is always a separate testing phase after a build phase; however, in agile software development testing is completed in the same iteration as programming.

Another difference is that traditional “waterfall” software development moves a project through various Software Development Lifecycle (SDLC) phases. One phase is completed in its entirety before moving on to the next phase. In agile software development, because testing is done in every iteration, which develops a small piece of the software, users can frequently use those new pieces of software and validate the value. After the users know the real value of the updated piece of software, they can make better decisions about the software’s future.

Agile Manifesto

All this chapter comes from Manifesto for Agile Software Development.

Agile Software Development Values

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Twelve Principles of Agile Software

The twelve principles:

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity–the art of maximizing the amount of work not done–is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Agile Software Development Methods

Agile software development is more than frameworks or practices. Agile software development is an umbrella term for a set of frameworks and practices based on the values and principles expressed in the Manifesto for Agile Software Development and the 12 Principles behind it.

Agile software development frameworks:

  • Scrum
  • Kanban
  • Extreme Programming (XP)
  • Feature-Driven Development (FDD)

Agile software development practices:

  • Continuous integration (CI)
  • Test-driven development (TDD)
  • Continuous delivery / deployment (CD)
  • Pair programming

Key Agile Concepts

Some key Agile concepts:

  • User Stories: In consultation with the customer or product owner, the team divides up the work to be done into functional increments called “user stories”. Each user story is expected to yield a contribution to the value of the overall product.
  • Daily Meeting: Each day at the same time, the team meets so as to bring everyone up to date on the information that is vital for coordination: each team members briefly describes any “completed” contributions and any obstacles that stand in their way.
  • Incremental Development: Nearly all Agile teams favor an incremental development strategy; in an Agile context, this means that each successive version of the product is usable, and each builds upon the previous version by adding user-visible functionality.
  • Iterative Development: Agile projects are iterative insofar as they intentionally allow for “repeating” software development activities, and for potentially “revisiting” the same work products.
  • Team: A “team” in the Agile sense is a small group of people, assigned to the same project or effort, nearly all of them on a full-time basis. A small minority of team members may be part-time contributors, or may have competing responsibilities.
  • Milestone Retrospective: Once a project has been underway for some time, or at the end of the project, all of the team’s permanent members (not just the developers) invests from one to three days in a detailed analysis of the project’s significant events.
  • Personas: When the project calls for it – for instance when user experience is a major factor in project outcomes - the team crafts detailed, synthetic biographies of fictitious users of the future product: these are called “personas”.

Find more concepts in Agile Glossary.

Common Agile Software Development Pitfalls

Common agile software development pitfalls:

  • lack of overall product design
  • adding stories to an iteration in progress
  • lack of sponsor support
  • insufficient training
  • product owner role is not properly filled
  • teams are not focused
  • excessive preparation/planning
  • problem-solving in the daily standup
  • assigning tasks
  • scrum master as a contributor
  • lack of test automation
  • allowing technical debt to build up
  • attempting to take on too much in an iteration
  • fixed time, resources, scope, and quality
  • developer burnout

Summary

This blog is just a basic introduction to Agile Software Development. I will introduce other topics such as Scrum, DevOps, CI/CD and other tools in the future.

References

  1. Agile in Atlassian
  2. Manifesto for Agile Software Development
  3. Agile 101
  4. Agile Glossary
  5. agilepatterns.org
  6. Agile software development From Wikipedia


blog comments powered by Disqus

Published

05 August 2019

Tags