Why learn about agile programming? As a student preparing to enter the world of technology, I have been seeing this word strategically placed across all job boards and resume boards. It was worth taking a deeper dive.
Agile software development is an approach to software development under which requirements and solutions evolve through the collaborative effort of self-organizing and cross-functional teams and their customers/end users. It advocates adaptive planning, evolutionary development, early delivery, and continual improvement, and it encourages rapid and flexible response to change.
During the 1990s, a number of lightweight software development methods evolved in reaction to the prevailing heavyweight methods that critics described as overly regulated, planned, and micro-managed. These included: rapid application development (RAD), from 1991; the unified process (UP) and dynamic systems development method (DSDM), both from 1994; Scrum, from 1995; Crystal Clear and extreme programming (XP), both from 1996; and feature-driven development, from 1997. Although these all originated before the publication of the Agile Manifesto, they are now collectively referred to as agile software development methods.
In 2001, these seventeen software developers met at a resort in Snowbird, Utah to discuss these lightweight development methods: Together they published the Manifesto for Agile Software Development.
17 white dudes at a ski resort. Please file under: "What's the whitest thing that could happen?"
- 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 idea is that when you face a programming decision, agile suggests that you consider the items on the left over the items on the right.
This talk was done by Sarah Mei who is a software architect from SalesForce at Pear conference where developers are taught to be better "pairers". Worth a watch!
Some excerpts that caught my attention:
"Agile's unwillingness to accommodate other motivations is its greatest weakness that they know about"
"[Agile developers say] Extreme programming[and other agile practices] aren't racist or sexist, but they do exclude people who have caregiving responsibilities or people whose home lives aren't handled by a stay-at-home spouse or anyone whose attention needs to be elsewhere at any time during the day"
"[Agile assumes that] everyone involved feels as empowered to contribute as everyone else. Agile ignores power dynamics"
I'm not quite ready to form an opinion on the agile manifesto. Initially, I see a lot of benefits to following the manifesto, from purely a business stance, but imagine there can be a lot of fallout with its ambiguity and the authors' inconsideration of diverse and intersectional perspectives and motivations.
Everything, IN THEORY, is always ideal, but in practice, will miss a lot of marks. I imagine that I will develop a better understanding of agile, its implementation, and obstacles as it relates to me, a queer person of color with many perceived lower power dynamics, as I continue to traverse through the tech field. In any case, I'll report back!