AgileProgramming/xp

What is Agile Methodology?

 * Group of software development methodologies
 * Project management process
 * Set of engineering best practices
 * Business approach

Agile methodology aims to deliver high quality software which meets the customer's needs and company goals rapidly.

History

 * Seventeen professionals, consisting of experts in programming, CTO's, founders of software consulting firms such as Martin Fowler – ThoughtWorks, Dave Thomas, Andrew Hunt (co-authors of The Pragmatic Programmers), Ron Jeffries – propietor of XProgramming.com and others, got together on February 11-13, 2001 at the Snowbird Ski Resort in Utah
 * The Snowbird meet also consisted of representatives from some of the existing software methodologies such as Extreme Programming, Adaptive Software Development, Crystal, and SCRUM
 * Their agenda was to develop a 'lightweight'  process as an alternative to documentation driven, heavyweight software development processes (Waterfall, Cowboy coding)
 * Result of the Snowbird meet – The Agile Manifesto and the Agile Alliance
 * Agile Manifesto values
 * Individuals and interactions over processes and tools
 * Working software over comprehensive documentation
 * Customer collaboration over contract negotiation
 * Responding to change over following a plan

What are Agile Manifesto practices?

 * Customer satisfaction by rapid, continuous delivery of useful software
 * Working software is delivered frequently (weeks rather than months)
 * Working software is the principal measure of progress
 * Even late changes in requirements are welcomed
 * Close, daily cooperation between business people and developers
 * Face-to-face conversation is the best form of communication (Co-location)
 * Projects are built around motivated individuals, who should be trusted
 * Continuous attention to technical excellence and good design
 * Simplicity
 * Self-organizing teams
 * Regular adaptation to changing circumstances

What are existing Agile Methodologies?

 * Extreme Programming
 * Scrum
 * Crystal Clear
 * Feature Driven Development
 * Dynamic Systems Development Method (DSDM)

EXTREME PROGRAMMING
Extreme programming is a deliberate and disciplined approach to software development. Previously successful and effective methods have been emphasized to the “extreme,” while unproductive activities have been reduced as much as possible.

How to begin with XP?  Start by striving for user involvement. Always have user presence within the development team. Put tests in place. The better tests you have, the faster and more effectively you will move. Include refactoring, which lets you begin with simple designs and grow them as needed. Pair programming provides built-in reviews and learning, and can help you spread the XP practices within a team. Pairs are switched often.

Stand up meeting every morning is used to communicate problems, solutions, and promote team focus. Everyone stands up in a circle to avoid long discussions. Each person states what they did yesterday, what they plan to do today, and what, if anything, is holding them up.

User stories –
 * Written by the customer, focus on customer needs
 * Cards are moved around to create release plan.
 * About three sentences of text.
 * Used to create time estimates for release planning meeting.
 * Used instead of big requirements document.
 * Drive the creation of acceptance tests
 * How much development time to implement a story? Longer than 3 weeks means you need    to break the story down further. Less than 1 week and you are at too detailed a level, combine some stories.

Release planning meeting creates release plan laying out overall project.

Release plan is used to create iteration plans for each iteration. Release often - small releases to customer.

Iteration planning meeting at the beginning of each iteration. Individual iterations are planned in detail just before each iteration begins and not in advance.

Each iteration is 1-3 weeks long.

Use CRC cards (Class, Responsibilities, and Collaboration) for design sessions, with everyone moving the cards around. Forces us away from procedure-oriented toward object-oriented.

A spike solution is a very simple program to explore potential solutions. Build a system which only addresses the problem under examination. Expect to throw it away.

Unit tests are created early and each class is tested.

Acceptance tests verify that the user story has been correctly implemented.

The rules must be followed until the team has changed them. All developers know exactly what to expect from each other, and having a set of rules is the only way to set these expectations. At meetings, talk about what is working and what is not, and fix XP.