Thursday, January 31, 2008

Briefly Agile

Agile can be defined as a conceptual customer driven framework generally centred on iterative and incremental delivery of working software. The iterative part means repeating or iterating, a complete lifecycle of development over a short, fixed span of time. And with each iteration, some working sub-set or increment of features is delivered to the client.

Agile Methods
Several agile methods, such as, extreme programming (XP), lean software development, Crystal, DSDM (Dynamic Systems Development Method), Scrum, and feature-driven development (FDD) are some of the well-known ones holding similar values and principles, with each method emphasising the following:


Lean - close customer relationship, shorter cycles, waste elimination, late decisions, team empowerment and building in integrity.


DSDM empowers team decisions, emphasizes frequent product delivery, integrates testing throughout, promotes collaboration and cooperation between all stakeholders.


FDD centres development around the feature, creates a domain model with domain experts.

Crystal emphasizes people, gathers techniques from other methods, improves communications, adapts the process itself (shrink or grow to fit).

Scrum manages a prioritized list of requirements on a product backlog, collaborates through daily meetings, exhibits the product upon iteration completion, uses retrospectives to correct the process.

XP emphasize communication values, simplicity, feedback, and courage; uses specific technical and collaborative practices, including TDD, re-factoring, pair programming, continuous integration, open workspace, and automated acceptance tests.

Highlighting the human aspect in software development, Agile arose out of frustration with ‘heavyweight’ methods and phased approaches.

Work on an Agile project involves working in a team that emphasizes cutting to the chase, with little or no time spent on large detailed design or requirement documents, as working software must be delivered every week / two weeks. Rather, contributing to designing automated tests; or brainstorming ideas for new features is likely more on the cards.

· The outset of an agile project is usually short, as no one spends weeks or months to gather and refine
requirements before working on a detailed design.
· Once the project has begun, all work takes place in iterations of fixed length - most typically one or two weeks
each.
· Each iteration begins with a plan, wherein the customer decides the most important features the team is to
build. The meeting finishes when the team commits to a set of features that can be delivered by iteration end.
· The next important aspect of an agile method is the deliverance of working software at the completion of each
iteration. Each iteration aims at updating production software, meaning it has to be fully integrated and tested
before an iteration is completed.
· Teams get together frequently to discuss who’s doing what and what issues exist. Agile practitioners work best
in a bullpen, in earshot of fellow developers, even pairing for software development, in order to improve the quality of design and code.
· Throughout an iteration, completed business functionality is required to be delivered, after effectively determining
whether you're done or not by, using defined automated acceptance tests. Or, a test can be designed and developed for successful execution by working in concert with a QA or testing team.
· To conclude, at the end of each iteration, it is essential that a demonstration be held of newly-completed
features to interested parties and stakeholders.

Agile software development is great for many situations, isn't always appropriate for every team within a company. Not a surefire guarantee for success, it requires an appropriate attitude, an eye for spotting deficiencies in the process, and a willingness to correct the process itself with every iteration.

No comments: