This article will give an overview of Agile Development. Let’s start with the basics, what is Agile Development? Agile Development is a practice or methodology with the goal of delivering high-quality software to customers by performing incremental and iterative deliveries to ensure the accuracy and value of the software. This approach focuses on building and delivering small parts of the project instead of delivering one large application at the end of the entire project. It also focuses on collaboration of individuals and the ability to respond to change and requires self-organization of teams.
The Manifesto for Agile Software Development
In 2001 a meeting of 17 practitioners of several programming methodologies got together to create The Agile Manifesto. Below are the main values of the group:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
Initial Requirements & Planning
Understand the project
Begin by understanding the project including what problems will be solved and how best to solve the problem. Most customers will not have software development experience so the scope of their knowledge will be limited by their experience. Having a developer speak directly to the customer to understand the problems and the needs for the solution are the first step in planning a solution.
Try to keep focus on the problem the solution will be solving. With that in mind you can narrow down the absolute minimum requirements in order to release the solution publicly. A good way to start is to outline the minimum requirements and analyze each one to see if it really is a top priority. If you are working on an existing application a good way to gauge the highest priority is to get feedback from the users currently using the application.
Analyze the minimum requirements. You can write up a list of tasks that are necessary to accomplish the solution. Then you can analyze each task and come up with an estimate. The estimate is really a high-level idea of how much work is involved. As anyone on a software development project knows the priorities can sometimes change in the middle of the project because users have found a major problem that must be taken care of before your other planned priorities. One of the core tenements of using agile development is responding to change
Determine an Agile Methodology
There are a number of different Agile Methodologies to choose from. Some of the more popular methodologies in use today are Extreme Programming (XP), Scrum, Feature Driven Development (FDD), Lean Software Development, Agile Unified Process, Crystal, and Dynamic Systems Development Method (DSDM). You can do some research on each methodology to see which one is best for your environment.
Determine a fixed iteration length. It is important to determine a fixed iteration length for many reasons including having a sense of completion at the end of each iteration, keeping focused on the issues to solve for each iteration, knowing specific times when solutions will be delivered just to name a few. Each iteration usually consists of planning which requirements will go into the iteration, coding, and testing.
Before developer commits any code they should test it. There are many different testing approaches that can be used. Some of these include unit testing, acceptance testing, automated tests, and many more.
Deliver code into production and give time to catch any unexpected errors
- Keep a full day in between iterations for this
- If the implementation goes perfectly you will then have a free day to look at bugs
- Do not try to move planning and unscheduled work forward!
Review after each iteration
Before the next planning session ask the team to give feedback about the last iteration. Collect feedback on which processes worked well and which did not. Have members work on the highest priority items/processes that need improvement for the next iteration. This enables members of the team to become more effective.
Compare how much is complete as of this iteration to what remains to be accomplished based on the original estimate. You will be able to get a good idea of exactly how much work remains and also predict how much work can be accomplished in the next iteration.