Agile software development is a group of software development methods in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development, early delivery, continuous improvement, and encourages rapid and flexible response to change1
Agile is the ability to create and respond to change. It is a way of dealing with, and ultimately succeeding in, an uncertain and turbulent environment.
What is an agile organization?
The dominant “traditional” organization (designed primarily for stability) is a static, siloed, structural hierarchy – goals and decisions rights flow down the hierarchy, with the most powerful governance bodies at the top (i.e., the top team). It operates through linear planning and control in order to capture value for shareholders. The skeletal structure is strong, but often rigid and slow moving.
In contrast, an agile organization (designed for both stability and dynamism) is a network of teams within a people-centered culture that operates in rapid learning and fast decision cycles which are enabled by technology, and that is guided by a powerful common purpose to co-create value for all stakeholders. Such an agile operating model has the ability to quickly and efficiently reconfigure strategy, structure, processes, people, and technology toward value-creating and value-protecting opportunities. An agile organization thus adds velocity and adaptability to stability, creating a critical source of competitive advantage in volatile, uncertain, complex, and ambiguous (VUCA) conditions.
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
- Self-Organizing Team
- Deliver Frequently
- Plan to Learn
- Communicate Powerfully
- Test Everything
- Measure Value
- Clear the Path
Related Topics
- Iterative and Incremental Development : Iterative and Incremental development is any combination of both iterative design or iterative method and incremental build model for development.
- Refactoring : Refactoring consists of improving the internal structure of an existing program's source code, while preserving its external behavior.
- Agile Modeling : Agile Modeling (AM) is a practice-based methodology for effective modeling and documentation of software-based systems.
- Extreme Programming (XP) : Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and higher quality of life for the development team.
- Lean Software Development : Lean software development is a translation of lean manufacturing principles and practices to the software development domain.
Resources
- Agile Vs. DevOps: What’s the difference?
- DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity: evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes. 3
Practices
- The first stage in an agile project is defining your Product Vision. The product vision statement is an elevator pitch — a quick summary — to communicate how your product supports the company's or organization's strategies. The vision statement must articulate the goals for the product.4
- User Stories / User Story and Acceptance Criteria are part of an agile approach that helps shift the focus from writing about requirements to talking about them. All agile user stories include a written sentence or two and, more importantly, a series of conversations about the desired functionality.5
- In software engineering, Software Configuration Management (SCM) is the task of tracking and controlling changes in the software, part of the larger cross-discipline field of configuration management.6
- Unit Testing is a software testing method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures are tested to determine if they are fit for use.7
- Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This article is a quick overview of Continuous Integration summarizing the technique and its current usage.8
- Iterative and Incremental Development is any combination of both iterative design or iterative method and incremental build model for development.9
Videos
Agile Project Management with Kanban: Eric Brechner Presentation
Agile Processes
The various agile Scrum methodologies share much of the same philosophy, as well as many of the same characteristics and practices. But from an implementation standpoint, each has its own recipe of practices, terminology, and tactics. Here we have summarized a few of the main agile software development methodology contenders:10
The Agile Software Development portal provides resources about agile software development approaches like Extreme Programming (XP), Scrum, Test Driven Development (TDD), Feature Driven Development (FDD), Behavior Driven Development (BDD), DSDM, Lean Software, Kanban. It discusses also agile practices: refactoring, pair programming, continuous integration, user stories, iterative development, product owner, sprint, product backlog, daily standup meeting, retrospectives, continuous delivery.11
- Extreme Programming (XP) is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,it advocates frequent "releases" in short development cycles (timeboxing), which is intended to improve productivity and introduce checkpoints where new customer requirements can be adopted.12
- Lean Software Development is a translation of lean manufacturing and lean IT principles and practices to the software development domain. Adapted from the Toyota Production System, a pro-lean subculture is emerging from within the Agile community.13
- Test Driven Development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test, and finally refactors the new code to acceptable standards. Kent Beck, who is credited with having developed or 'rediscovered' the technique, stated in 2003 that TDD encourages simple designs and inspires confidence.14
Requirements
Requirements are capabilities and conditions to which the system - and more broadly, the project - must conform. A prime challenge of requirements work is to find, communicate, and remember (that usually means record) what is really needed, in a form that clearly speaks to the client and development team members. 15
FURPS
The FURPS+ acronym, devised by Robert Grady of HP, provides a bit more meat around what we mean by non-functional stories, and also provides a good way to categorize such needs. The breakdown here suggests some representative questions around potential needs.16
- Functionality - What the customer wants! Note that this includes security-related needs.
- Usability - How effective is the product from the standpoint of the person who must use it? Is it aesthetically acceptable? Is the documentation accurate and complete?
- Reliability - What is the maximum acceptable system downtime? Are failures predictable? Can we demonstrate the accuracy of results? How is the system recovered?
- Performance - How fast must it be? What's the maximum response time? What's the throughput? What's the memory consumption?
- Supportability - Is it testable, extensible, serviceable, installable, and configurable? Can it be monitored?