Think about the experience of building a custom home. Is the first thing you see a completed structure, fully decorated and landscaped? Of course not. Working together as a team, the future homeowner works with an architect and a builder to outline the desired features. The home is built in stages by skilled professionals according to a plan, budget and schedule. Generally, the owner is actively involved and can guide the process when questions emerge, as they inevitably do in building projects.
The idea behind the agile software development process is much the same. Agile is an iterative approach to developing software where teams of Business Analysts, Designers and Developers work collaboratively with the client’s designated “Product Owner” to ensure the vision, business goals, and user needs are met.
Agile software development relies on continuous feedback from the business users. That’s because today's modern software technology frameworks and tools facilitate changes throughout the entire software development process to build exactly what the business needs. Agile has become greatly preferred to traditional software development methods, which required extensive documentation before any software was delivered.
“It is extremely rare that a customer will present us with a document specifying exactly what they need built. Most of the time it’s an idea or vision about solving a business problem,” said Kevin Rhoades, Director of Project Solutions for TDK Technologies. “Agile software development is a process that turns a vision for a business need into solutions. We use agile because it results in software that better supports our customer needs on a faster timeline.”
Benefits of the Agile Software Development Approach
The Agile movement is based on the overarching goal of building software more simply. It helps teams respond to unpredictability through incremental, iterative work which also allows the team to gather feedback and react quickly.
An article in MIT Technology Review said “…agile software development projects…start off with a vision and a set of initial requirements. The difference is that, rather than spending months detailing exhaustive specifications, an agile project will begin development as soon as the requirements are fleshed out just enough for the coders to begin building the initial core pieces of working software.”
The benefits of agile software development were summarized in the 2001 ‘Agile Manifesto’ which included 12 principles.
- Customer satisfaction through early and continuous software delivery.
- Accommodate changing requirements throughout the development process.
- Frequent delivery of working software.
- Collaboration between the business stakeholders and developers throughout the project.
- Support, trust, and motivate the people.
- Enable face-to-face interactions (co-location).
- Working software is the primary measure of progress.
- Agile processes support a consistent development pace.
- Attention to technical detail and design enhances agility.
- Self-organizing teams encourage great architectures, requirements, and designs.
- Regular reflections on how to become more effective.
“A lot of reasons customers do this is to get a market edge, to establish a differentiator, to drive costs, increase productivity or to achieve scale,” Rhoades said. “The technologies are so powerful that projects can be built very quickly if we get the right people from the client working with the right people from our team in a very collaborative way.”
Customer input is a central element to the process. The Product Owner has the power to change priorities and manage the budget as the project unfolds. The result is software that is deployed more quickly while meeting customer needs more precisely.
“While we take the time to get to know the business, no one knows it better than the customer. So, the Product Owner’s knowledge about the system being automated or created really guides developers on what product features should be included and when they should be deployed,” Rhoades said. “The Product Owner can also identify exceptions to their processes, which we sometimes call ‘edge cases’, that frequently emerge only after the project begins. Edge cases require additional development time to address or sometimes a different solution entirely.”
Elements of the Agile Software Development Process
The agile development approach is characterized by dividing the project into short phases of building working software which permits early feedback to be gathered to adjust the features needed and improve usability quickly. The terminology associated with agile development relates directly to the team approach and the pace of development activity. ‘Scrum’ is borrowed from the sport of Rugby, and refers to a professional product development team that works well together with focus on keeping collaboration processes simple and organized. Like certain competitive track events, work in agile software development ‘Sprints’ is divided into short bursts that permit frequent reassessment and adaptation.
- Scrum: A series of practices within each Sprint used to engage teams and the product owner throughout the entire life cycle of the project.
- Daily Scrum (Standup): A 10-15-minute daily meeting where each team member communicates what they worked on the previous day, what they will work on today and whether they have any blockers.
- The Scrum Master facilitates and manages the information exchanged.
- Sprint: A set period during which defined work must be completed and made ready for review.
- Sprint Planning: Prioritizing which features to include in the upcoming sprint.
- Define Requirements - List the necessary functionality needed (features) to achieve business and user goals.
- Design Architecture - Site maps, user journeys, concept diagrams, data models, tech stack, seed application.
- Wireframe - Page schematics or screen blueprints that serve as visual guides representing the skeletal framework of an application.
- Usually looks more like a sketch and in black & white.
- Prototype - Modeling an application where user testing can be performed to gather feedback before the development sprint.
- Color and branding is usually added.
- User Testing - Testing the usability of the wireframes or prototype with real users to gather necessary feedback to ensure their needs are met.
- Sprint Development: 2-4 weeks where development of the prioritized features occurs.
- Develop Features – Code is written; architecture continues to be built out.
- Test Features – Strategically and automatically run scripts that cover all scenarios to assure functionality is behaving correctly.
- Deploy Features – Push code to a central repository that gets integrated with the existing application or environment.
- Sprint Review: Reviewing working features.
- Testing and deployment may occur here.
- Sprint Retrospective: Engaging teams to share the highlights and lowlights of the sprint to gain knowledge on what worked well and what did not.
“The best thing is to start working on the vision with the right team members as early as possible. They can quickly estimate how many sprints the project will require as well as the size of the team,” Rhoades said. “The sooner we can get clients software they can evaluate and test to get feedback, the better. They will also begin realizing their return on investment as the working software is delivered in phases.”
Best Practices in Agile Software Development
Like most methodologies, learning about agile in an academic sense is certainly valuable but is no substitute for the actual practice of the methodology in a business results driven environment. In the application of agile methodologies in real world projects with business results on the line, TDK agile teams have identified several key concepts and best practices, some of which include:
- Get used to life without a big up-front design.
- Learn to guide the design by influencing the product owner to select items from the backlog in early sprints which help drive out downstream uncertainties.
- The optimal team size is 5 – 7 members.
- As team members, specialists remain valuable but should also be able to contribute beyond the confines of their specialty.
- Feature focused teams are best at evaluating the impact of design decisions and keeping the focus on delivery features.
- When components and specialists might have to be shared between several feature teams, a component based team can make good sense.
- Teams should strive to deliver working software at the end of each sprint. At the very least, deliver something valuable at the end of each sprint.
- Sprints should be strictly timeboxed to better manage scope, develop a cadence, and facilitate more effective sprint and release planning.
- Iterative demos of working software are useful to validate stories, use cases and assumptions, and to elicit regular user/customer feedback.
- Integrate testing into the entire development process, including user acceptance testing.
Agile methodology is not a panacea for every software development solution. Project risks must still be identified, analyzed and mitigated as in any other project and the delivery approach planned accordingly. When agile does make sense, organizations can utilize it to deliver high quality software with a faster speed to market, increased efficiencies, and a reduced budget. However, this can only occur through a firm understanding of what agile is, how it impacts the engagement of a software development team, awareness of key concepts, and implementation of best practices. Ultimately, as the Agile Manifesto states, individuals and their interactions are valued above all else. Therefore, assembling a team well suited to agile practices is arguably the most important factor in successfully delivering business results with agile development methodology.