The 12 Daily Principles Of Agile Software Development
The traditional model for software development is the waterfall approach, where development “flows” downward like a waterfall through six phases: analysis, design, implementation, validation testing, integration and maintenance. Purists of this model maintain that a new phase should not be undertaken until the preceding phase has been completed, reviewed and verified.
This process is effective but has its flaws — it lacks iterative processes and wastes time due to the duration of each phase. This approach is best suited to projects with fixed requirements, a firm, stable product, and technology that is clearly understood.
The History Of Agile Software Development
Throughout the 1990s, a new process emerged as an answer to the waterfall process: agile development. This movement culminated in 2001 when 17 software developers publicized “The Manifesto for Agile Software Development.”My software company, which develops software-enabled solutions designed to create compelling experiences, relies daily on agile software development techniques.
The agile process is dynamic by nature, encouraging rapid and flexible response to change. It’s all about adaptability. As a by-product, the agile process forces a different way of thinking with regard to developing and continually improving development. And because it relies on team effort with varied levels of expertise, the process is completed more efficiently and smoothly.
Following are the 12 principles, along with notes that demonstrate their success within our daily workflow. Remember, the most effective solutions occur when all 12 are used:
The first principle is to offer early and continuous delivery of valuable software solutions for continued customer satisfaction. Note that customer satisfaction is mentioned in the very first principle.
For us, our focus is first and foremost on the customer. Providing them with software solutions early and throughout the development process creates constant rapport, which naturally strengthens client relations.
The second principle is to welcome changing requirements, regardless of whether you’re in late stages of development.
We recently had a client in the energy space that needed to implement some major changes just as we were close to project completion. The last-minute change was necessitated by a new release from our client’s biggest competitor. In order to remain ahead of the competition, our client needed us to enhance some features prior to rollout. By abiding by this principle, we were able to implement these last-minute updates without any drama or backlash.
Deliver working software frequently, preferably on a weekly (rather than monthly) basis. Clients are more satisfied when presented with a functioning project rather than just receiving some documents. This simplifies the process, keeps clients happy, and helps deliver software more quickly.
Just like in the first principle, this also keeps the focus on the clients. Shorter timeframes are a must nowadays, especially considering the competitive landscape.
The fourth principle requires close daily cooperation between developers and business people. We make sure to have weekly contact between developers and the business people on both teams. This keeps timelines tight and keeps confidence building, which naturally creates better client relations.
All projects are built around motivated developers — ones who can be trusted. This is exactly why you should only hire the best. Keep this principle in mind when bringing on new talent. There should be no excuse for lack of motivation and trust. Make your team leaders well aware of this and ensure that they keep their teams motivated.
The sixth principle says that the best form of communication is face-to-face. This way, things can be discussed in real time, which facilitates the development process. This is the most efficient form of communication, and it doesn’t have to be a physical presence. For us, we have a few remote developers who use Google Hangouts or Skype for face-to-face communication.
The seventh standard is that the principal measure of progress is working software. Nothing else. The principle speaks for itself, and should be stressed for ultimate progress.
The eighth principle requires sustained development with developers who are able to maintain a constant pace. Again, this principle requires developers with the utmost talent, so remember this during the hiring process.
For the ninth, continuous attention to technical excellence and good design is a must. This must always be at the top of the priority list. All else is worthless if the software doesn’t work properly or the design is poor.
The tenth principle is a favorite for us. It dictates that simplicity is essential. Learn the art of maximizing the amount of work not done. Polish and refine as you continue, but the maximum efforts should be expended on work not completed.
Going back to one our clients in the energy space, utilizing this principle alone sped up our development time. Too many developers get caught up in the finer details, which puts a major halt on the progress of undeveloped parts.
The eleventh principle says the best architectures, requirements and designs emerge from self-organizing teams. Make sure each team is educated in organization. The largest gains my teams realized were through disciplined training and practice of time management. These are a must for success.
The final principle states that the team should regularly reflect on how to become more effective, and adjust accordingly. This is efficiency at its best. While working on software, our developers end their day by briefly reviewing the day’s progress and evaluating whether anything can be completed more efficiently in later stages. Team leaders should make this reflection a must.
With technology changing daily, a solid development method must allow for quick changes during the evolution of a software solution. Agile provides this, helping developers to efficiently and quickly address a customer’s evolving needs.