Part 1: A Movement for Individual Creativity
For customers and end users, the question “What is Agile Software?” can often be answered similarly to “What is art?” – Namely, they may not be able to define the concept, but they know it when they see it.
This is hardly surprising, as “agile software” isn’t necessarily a collection of distinguishable pieces of software or coding, while “agile software development” is more akin to a philosophy and methodology for building software architectures.
We define Agile Software as that software which is adaptable in real-time, usually with instant reportage for backend users. In addition, Agile Software is user-centric in that software is tailored to the end user’s needs, as opposed to a one-size-fits-all approach.
Origins of Agile: From Lightweight to Extreme
The growth the Agile methodology runs in neat parallel that of the internet itself, that medium in which Agile Software development has flourished, both in terms of frontend experience and backend execution. And as the internet has progressed from an information portal used by very few to the average user’s go-to spot for shopping and entertainment, so has Agile Software development gone from workplace strategy to simply programming to a full-on user-first approach.
Prior to the 1990s, the prevailing method for most corporate-level programmers to work under is today known as the “waterfall method”, a hierarchical approach to work done in stages. In hindsight, the waterfall method was an unfortunate square-pegging of software development into the round hole of the engineering industry: Any commonalities between “software engineering” and “engineering” are not evinced in work methods.
Naturally developers looking to create (and efficiently deliver) under stifling waterfall systems ultimately evolved their own “lightweight” methods, streamlined if unconventional ways to deliver on deadline. “Extreme programming” (a.k.a. XP) is said to have first been used as a discrete entity in 1996 and is credited to Kent Beck and Ward Cunningham, but by decade’s end, the term had come to encompass many of these new methods under one umbrella. Such methods were made even easier by the rapidly burgeoning internet, for the first time reliably allowing practices such as pair-programming to be done without driver and programmer occupying the same physical space.
Manifesto for Agile Software Development: From Extreme to Mainstream
In February 2001, some 17 programmers convened at a Utah ski resort with the aim of organizing a set of working principles for professional peers described by Adaptive Software Development: A Collaborative Approach to Managing Complex Systems author Jim Highsmith as a “community freed from the baggage of Dilbertesque corporations.”
The result of their deliberations was the Manifesto for Agile Software Development, a document of importance all out of proportion to its brevity – so call it the Magna Carta for 21st-century software developers. The preamble consists of just 68 words; here’s the meat of that portion:
• Individuals and interactions over processes and tools
• Working software over comprehensive documentation
• Customer collaboration over contract negotiation
• Responding to change over following a plan
The actual manifesto itself runs under 200 words and consists of 12 principles:
• Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
• Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
• Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
• Business people and developers must work together daily throughout the project.
• Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
• The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
• Working software is the primary measure of progress.
• Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
• Continuous attention to technical excellence and good design enhances agility.
• Simplicity – the art of maximizing the amount of work not done – is essential.
• The best architectures, requirements, and designs emerge from self-organizing teams.
• At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
The principles of the Manifesto are certainly still well adhered to today – but with the society-wide ubiquity approaching in ways that not even Beck, Cunningham, Highsmith et al to have foreseen, Agile Software Development would soon transition from preferred methodology to must-do…