Are you wondering "What Agile Is All About?"
Or interested in knowing more about the benefits of Agile?
Here's a brief look at how Agile works and how I apply it to deliver solutions.
A major benefit of agile is that it accelerates the delivery of initial business value and through the short cycles there is continuous feedback and demonstration of delivered features while engaging the product owner (customer) to prioritize those features from a product backlog. Having visibility of progress along the way for a set scope in each sprint, yet also the flexibility to re-prioritize between sprints, has continued to prove agile as a dynamic and very productive software development process.
Agile Scrum Methodology
Agile has a few variants, one called scrum methodology is ideal for new project development and lightweight to easily get started with. It helps keep continuous focus on rapid delivery of features which are prioritized for value in short cycles, known as sprints.
The product owner is responsible to set the priorities of features and to make decisions that drive the most business value. They also need to describe clearly, in their own words, what is expected for those given features.
Each sprint is tracked by seeing which stories are completed and then those stories are demonstrated ensuring progress is always known clearly.
Stories and Backlog
Stories describe how something will work to the end user, ensuring it is clear what something will do. They don't cover the how or any technical details. Each story is given an estimate or complexity, so the backlog of items can be organized with this complexity and timing in mind for each sprint.
Visibility ensures project success and is available by see story completion progress within each sprint and by demonstration during development. These ensure the product owner knows how things are progressing and can adjust priorities if needed.
Running Agile Projects
There are many elements of running an agile project and so its important to get some training or find someone well experienced in agile scrum to help. I've learned agile scrum through training, books and experience and have learned many of the things that make it effective for different teams and customers, so its also something that needs to be adjusted to fit the project and organization involved. As a contractor, this is especially true, as the roles and familiarity of agile changes with each customer. These are the common elements I use for any agile project and can easily take a customer through them, even if agile is new to them.
Story Backlog - This is the complete list of all stories or deliverable that make up the project or product. It is ordered by the Product Owner to provide highest value first and stories should be broken down into small enough elements to always fit with a sprint.
Small Component Estimates - Estimates or complexity is provided as a gauge for every story in the backlog. The rate at which stories are completed is known as the velocity and this requires that stories be broken down to estimates them as small components, each with its own deliverable to demonstrate. This can include bug fixes, partial or complex features, but all have estimates for planning.
Sprint Planning - This is needed and performed before each sprint is started and its purpose is to determine what stories will be completed and in what order for each development sprint. Sprints can be any length, but commonly 2 weeks is used so the sprint plan sets the priorities for that 2 week period. The product owner and development team are both involved to do the sprint planning.
Short Cycle Releases - Continuous integration, short sprint cycles and repeatable testing all help ensure short release cycles. More importantly, delivering the highest business value items first also creates urgency and value to release as soon as items are completed. These methods to produce short cycles provide early critical feedback and allow time to adjust when needed.
Review & Tracking Progress - Typically, an agile software tracking board is used for this to expose progress and to see what stories are completed within each sprint. The burn down rate at which stories are completed is used to guide sprint sizes in sprint planning sessions and for feedback (known as retrospectives).
Continuous Improvement - Regular reviews known as retrospectives are held after sprints to discuss what went well and what needs improvement. Applying changes to ensure these points of feedback are repeated where working or adjusted where improvement is needed, ensures a continuous improvement of the team and results throughout development.
Agile development requires the proper skills and approach to be effective at it. It requires many things to understand as a developer and they each have their place in a agile development environment. These are some of those elements that need to be in place to make agile development effective.
Refactoring - Continuously simplifying and evolving the code without breaking or changing working behavior. This is critical in agile, to make adjustments for new features and to always rework code to support the best, and simplest design to meet the needs of the application and architecture. This is necessary with agile to ensure code maintains quality and maintainability.
Test First - Knowing what to test and building tests first, ensure understanding and that the minimum code is built to meet that test. Using repeatable and automated tests also ensure changes, refactoring and future sprints do not inadvertently break previous work without knowing. Build tests first ensure the tests are in place and that they can be repeated, ideally with automated tests.
Continuous Integration - Is when code changes are built into the main application at every change or at least at a high frequency during development. This achieves two things, it ensures the build system is working with successful builds at any code change, and it also produces a build that can then have tests run against it to ensure the quality remains high.
Simple Design - Simple designs help ensure code is extensible, which helps in agile development to pivot and switch tasks on new sprints at any time. Avoiding complexity until its absolutely needed also ensure excess is never built in, slowing progress. Modular code and extensible designs require things to be kept simple, which makes evolving them much easier.
Coding Standards - Code must be easily transferable to other team members and be easy to understand with common best practices so that the maintenance of that code doesn't require specialized knowledge or skills. Coding standards also ensures portability between platforms and languages as libraries and often open source can be integrated more easily to extend functionality.