Agile Development
Programming for Data Science
Enter Agile
Against the linearity of previous PM approaches, agile software development is an approach that embraces non-linearity and client participation.
Historically, agile PM appeared in the early 2000s and was spurred by the affordances of the Web and open source software.
The success of Linux and other open source projects showed that software development need not follow the rigid bureaucratic conventions of the military or corporation.
Instead, software development teams could organize organically, without oversight, using tools like Git.
They could also release their products iteratively, getting both user and developer feedback quickly.
The Agile Way
Agile development is essentially a philosophy developed in response to bureaucratic software development processes.
It is an approach that focuses on a set of design biases:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Essentially, it is based on a mistrust of machines, plans, contracts, documents, etc.
The Agile Manifesto was written in 2001 after a number of lighter and more flexible approaches were developed in the 1990s.
- SCRUM
- XP (Extreme Programming)
- Etc.
It is also a collection of methods and tools:
- User stories
- Scrum meetings
- Sprints
- Task weighting with cards
- Etc.
Principles
The Agile Manifesto articulates \(12\) Principles of Agile software development:
Customer satisfaction by early and continuous delivery of valuable software. → The “early and often” of open source development.
Welcome changing requirements, even in late development.
Deliver working software frequently (weeks rather than months).
Close, daily cooperation between business people and developers.
Projects are built around motivated individuals, who should be trusted.
Face-to-face conversation is the best form of communication (co-location).
Working software is the primary measure of progress.
Sustainable development, able to maintain a constant pace.
Continuous attention to technical excellence and good design.
Simplicity—the art of maximizing the amount of work not done—is essential.
Best architectures, requirements, and designs emerge from self-organizing teams.
Regularly, the team reflects on how to become more effective, and adjusts accordingly.
As you can see, it’s all about giving teams the freedom and trust to creatively respond to client needs and change.