What Is Agile Software Development?
Developing software is a discipline that’s still at a relatively young age, and for the most part, we’re still learning how to tackle some of the more difficult issues that can arise in a typical large-scale software project.
Different methodologies and styles have emerged in order to address the problem in various ways, and among those, agile software development is one of the currently most prominent and respected ones. Agile focuses on delivering a functional product as early as possible, and coordinating the development process with the customer’s requirements tightly.
Here is a brief introduction to how the process works and the important ideas behind it:
Agile is based around a set of twelve principles, which are outlined in its manifesto. It’s important for any team wishing to implement agile methodologies to not only fully understand the principles behind them, but to also apply them in their daily practices.
1) Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Customer satisfaction should be at the top of any team’s priority list when developing software. Even if the customer is the team itself. It’s important to properly understand the exact needs of the customer, and to communicate with them regularly in order to ensure that all requirements are being met. Frequent delivery ensures that any misunderstandings will surface early on.
2) Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
It’s not rare for software requirements to change in the course of development. While many other development methods struggle with this, agile actually welcomes it in its fullest. This means that a team should be ready to handle any changes in the requirements, even if it means scrapping a large portion of their hard work.
Compared to development methodologies which split the process into components like analysis, design, implementation and testing which can last weeks at a time, agile is very suitable for a rapidly evolving model.
3) Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Again, this puts an emphasis on speedy delivery and on ensuring that the customer’s requirements are being met in a timely manner. Not only that, but by focusing on delivering a working piece of software, teams are forced to actually think about the critical components of the project and focus on them with a priority. The standard time frame is called a sprint, and it usually occurs every 2 weeks.
4) Business people and developers must work together daily throughout the project.
This principle serves to correct a common problem in the modern software development environment. The gap between the developers of a program and the people presenting it to the customer is often huge, and can lead to significant problems in the development process. Agile ensures that all teams involved are always on the same page with regards to the future of the project.
5) Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
A more personal principle, this is based on the idea that a developer given a comfortable working environment and constant job satisfaction will be able to consistently produce higher quality work. This is a common concept in other industries, but it seems to have taken some time to arrive to the world of software in a more direct way.
6) The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
Another common issue of software development is the way it predisposes individuals to communicate through electronic means. This can significantly add to the feeling of an improper connection between team members. When the situation allows for it, a team should always prioritize personal meetings to discuss the current status of the project.
Different software development methodologies can sometimes focus on various complicated metrics for determining the current status and “health” of a project. Agile, on the other hand, puts an emphasis on the simplest possible factor – how much of the product is actually finished and works well enough to be presented to a customer.
8) Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
No matter how large a project grows, the team should always be ready to handle its new scale. The same goes for the opposite case as well – if the requirements shrink, the team must retain its current pace and not waste any effort.
9) Continuous attention to technical excellence and good design enhances agility.
Small details matter a lot in creating a solid final impression, but reaching the phase where they’re added to a project requires a solid underlying foundation as well. These two factors can significantly enhance the perceived value of the final product.
10) Simplicity — the art of maximizing the amount of work not done — is essential.
This is a rewording of a principle that’s very common in rapid software development in general nowadays. “Do just as much as is required to complete the task, and only do more if the customer says something.” This concept can be very effective in getting a project off the ground and up to speed. Often, it’s easy for developers to anticipate other customer needs, but this can add delays to the work, and it may not actually be something the customer wants.
11) The best architectures, requirements, and designs emerge from self-organizing teams.
Management structure is another common problem in software development nowadays, and agile recognizes that by putting an emphasis on a team’s ability to govern its own work. While some form of higher-level management will always be required, it should not be critical to a project’s completion on the technical side.
12) At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Software development is a constantly evolving discipline, which sees new ideas on an almost daily basis. A good team should be able to constantly integrate those new developments into their own work when it benefits them.
It’s hard to say which software development methodology is objectively “the best” at the moment. The truth is that they all fill a different niche in a very large and complex market. But when it comes to rapid development and delivering a product that actually works as soon as possible, few can beat agile’s strong principles and simplistic philosophy.