AN AGILE VIEW OF PROCESS
In 2001, Kent Beck and 16 other noted software developers, writers, and consultants (referred to as the “Agile Alliance”) signed the “Manifesto for Agile Software Development. “ It started:
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 contact negotiation
Responding to change over following a plan
That is, while there is value in the items in the right, we value the items on the left more.
A manifesto is normally associated with an emerging political movement—one that attacks the old guard and suggests revolutionary charge (hopefully for the better). In some ways, that’s exactly what agile development is all about.
Although the underlying ideas that guide agile development have with us for many years, it has only been during the past decade that ideas have crystallized into a movement.” In essence, agile methods were developed in an effort to overcome perceived and actual weakness in conventional software engineering. Agile development can provide important benefits, but it is not applicable to all projects, products, people, and situations. It is also not antithetical to solid software engineering practice and can be applied as an overriding philosophy for all software work.
In the modern economy, it is often difficult or impossible to predict how a computer- based system (e.g., a Web- based application) will evolve as time passes. Market conditions change rapidly, end- user needs evolve, and new competitive threats emerge without warming. In many situations, we no longer are able to define requirements fully before the project begins. Software engineers must be agile enough to respond to a fluid business environment.
Does this mean that a recognition of these modern realities causes us to discard valuable software engineering principles, concepts, methods, and tools? Absolutely not! Like all engineering disciplines, software engineering continuous to evolve. It can be adapted easily to meet the challenges posed by a demand for agility.
What is it? Agile software engineering combines a philosophy and a set of deployment guidelines. The philosophy encourages customer satisfaction and early incremental delivery of software: small, highly motivated project teams; informal methods; minimal software engineering work products; and overall development simplicity. The development guidelines stress delivery over analysis communication between developers and customers.
Who does it? Software engineers and other project stakeholders (managers, customers, end users) work together on an agile tam--- a team that is self- organizing and in control of its own destiny. An agile team fosters communication and collaboration among all who serve on it.
Why is it important? Agile development might best be termed “software engineering lite.” The basic framework activities--- customer communication, planning, modeling, construction, delivery and evaluation----- remain. But they morph into a minimal task set that pushes the project tam toward construction and delivery (some would argue that this is done at the expense of problem analysis and solution design).
What is the work product? Customers and software engineers who have adopted the agile philosophy have the same view---- the only really important work product is an operational “software increment” that is delivered to the customer on the appropriate commitment date.
How do I ensure that I’ve done it right? If the agile team agrees that the process works and the team produces deliverable software increments that satisfy the customer, you’ve done it right.
Tom DeMarco: “Agility; 1, everything else: 0.”
In a thought- provoking book on agile software development, Alistair Cockburn argues that the prescriptive process models introduced, have a major failing: they forget the frailties of the people who build computer software. Software engineers are not robots. They exhibit great variation in working style computer software. Software engineers are not robots. They exhibit great variation in working style and signification differences in skill level, creatively, orderliness, consistency, and spontaneity. Some communicate well in written form, others do not. Cockburn argues that process models can “deal with people’s common weakness with [either] discipline or tolerance” and that most prescriptive process models choose discipline. He states: because consistency in action is a human weakness, high discipline methodologies are fragile.”
If process models are to work, they must provide a realistic mechanism for encouraging the discipline that is necessary, or they must be characterized in a manner that shows “tolerance” for the people who do software engineering work. Invariably, tolerant practices are easier for software people to adopt and sustain, but (as Cockburn admits) they may be less productive. Like most things in life, trade- offs must be considered.
Definition:
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 advantages.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with the preference to the shorter timescale.
4. Business people and developers must work together daily throughout the projects.
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 conversion.
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 turns and adjusts its behavior accordingly.