Let's Get Agile!
If you are a beginner programmer, either at school or teaching yourself, chances are you have come across a few topics that are mentioned frequently but explained rarely. I think ‘algorithm’ is a good example of this. ‘Benchmarking’ is another. One term that I’d like to shine some entry-level light onto is Agile.
What is Agile?
Agile is a popular strategy for software development. Though the term didn’t appear as such until 2001, the concepts of Agile development have been around for decades. Similar ‘lightweight’, feature focused development methods were gaining popularity in the 1990s. The lexicon was truly codified in 2001, when 17 software developers met at Snowbird in Utah to discuss world domination/development methods. What resulted was the Manifesto for Agile Software Development.
So what gives?
Using an Agile strategy, a project is broken up into smaller bits of functionality referred to as ‘user stories’. These stories are prioritized and worked on in distinct sprints which result in new iterations of the project. For large scale projects, these cycles usually last 1-2 weeks. In essence, you turning a big problem into many different small problems. For programmers, that process should feel familiar.

At its core, Agile development might not seem any different than what a normal person would do when there is a lot to be done; you make a list, prioritize which needs to happen first based on difficulty and time required, and you start crossing things off of it. Big deal right? WRONG. You are so very wrong, you stooge.
Agile development is extremely useful for developers because of its cyclical nature. Each member of the team will be going through the cycle of 1. Analysis, 2. Design, 3. Code, 4. Test many times throughout the project. Those activities continue throughout the duration of the project for each sprint. Iterative development is the crux of this idea. Instead of trying to deliver the perfect finished project after months of work, we can start with something really simple and add to it incrementally.
Adaptive or Predictive
There are a lot of advantages of that mindset. Firstly, iterative development makes it easier for things to change. The architecture of your code can adapt more easily. Features are refined more naturally. Generally, everyone is operating with the knowledge that things are going to change. The result is a more adaptive development team where roles blur. The chief goal is deliver a working product with each iteration.
There are loads of different strategies that fit under the umbrella of Agile development. The start-up landscape really benefits from Agile strategies, but it isn’t right for every team/project. Large organizations have a hard time implementing it’s practices, and sometimes adapt a hybrid approach which mixes Agile with more traditional approaches.
In 2011 to celebrate the 10th anniversary of the Agile Manifesto, the original framers once again descended on Snowbird. There they addressed some of the issues that plague Agile developers.

The agile movement is in some ways a bit like a teenager: very self-conscious, checking constantly its appearance in a mirror, accepting few criticisms, only interested in being with its peers, rejecting en bloc all wisdom from the past, just because it is from the past, adopting fads and new jargon, at times cocky and arrogant. But I have no doubts that it will mature further, become more open to the outside world, more reflective, and also therefore more effective.
– Philippe Kruchten
Despite harsh criticism, Agile development seems much more than a passing fad. More than likely you’ll find yourself working on a team that is operating with this system. Good luck!