Software Development TDD - Scrum - eXtreme Programming
Agile Programming
What is it?
Some people actually think agile programming is about fitting two people in a single chair. In fact agile programming is about being responsive to change.
There are numerous agile methodologies out there, and some of them do indeed favour a pair programming approach. However, taking turns at the keyboard (sorry we just don't share a keyboard!) is not a central or crucial aspect of agile methods.
Why should you care?
Here is what Bill Gates had to say on this subject
"Over time, code gets complicated, and you want to be agile and change it" [see the article by J. Nicholas Hoover for InformationWeek].
Agile methods emphasize working software as the primary measure of progress. This is obtained through some iterative incremental process of software development. In other word at the end of each iteration (a relatively short time frame) you get a working application which the client can test drive, and comment on. This is not just for feedback, at any time the client can change its requirements and the development process fortunately is designed to integrate these changes not just accommodate or hack a solution around it.
What does it entail?
"The function of good software is to make the complex appear to be simple." _Grady Booch
Agile methods are iterative and incremental development methods. The emphasis is on building releasable software in short time periods (time box). The customer is deeply involved with the developers in the design process and iteration planning. At anytime questions such as: "Where are we going?", "What do we have right now?", "What is the next step?" can be answered in a tangible and precise way.
But such achievement means very little unless we avoid this:
"The trouble with programmers is that you can never tell what a programmer is doing until it is too late." _Seymour Cray
Who is using it?
Every relevant software outfit uses some form of agile process at some point in there activities. Internet time demands that kind of speed, responsiveness and quality. Don't take my word for it check this article: Agile development: Not just for 'agilists' anymore By Colleen Frye
- Concrete (It exist, it runs, it works)
- Lean (no bloat, just does what needs to be done on time and within budget.)
- Easy (to use, read, understand, maintain)
- Adaptable (resilient to changing technologies, modifications)
- Neat (organized, self documenting)