Agile development is grounded in principles. These principles guide how things are done and are more important than processes and procedures. The processes and procedures are the best way we know how to implement the principles. This means that as we learn better ways the processes and procedures will change, but the principles won’t.
Agile was famously defined in the Agile manifesto, which had a number of principles. At ITX we have defined the principles slightly differently around our core values. This aligns our process more closely to who we are and, for us, ensures that Agile is embedded into our culture and is not just something written on a poster and forgotten. For Agile to be successful, the principles underlying it must be integrated into a company’s culture, beyond just development, including hiring, coaching and evaluating team members. Great people, aligned around common values and principles, create great results.
- System Integrity – A user has an expectation of a system; a system in integrity meets these expectations. A system out of integrity doesn’t meet these expectations. It is important, therefore, for a system to reliably be in integrity. To maximize the integrity of a system, we can employ three strategies.
- First, design and develop the system with the end user in mind. By focusing on end users and their expectations when building the system, we can design the system from the start to meet their expectations.
- Second, prioritize features based on the value they deliver and build the features that deliver the most value, and thereby meet the most user expectations.
- Third, don’t build features that don’t meet expectations of users. Many studies show that as much as 50 percent of software systems’ features are never used. While the extraneous features may sound nice in theory, they cost money, they don’t enhance the integrity of the system since they are ignored, or worse, make the system cluttered and harder to use.
By following these strategies, we get products that are reliably in integrity and therefore maximize the value to the end user and ultimately, the business. - First, design and develop the system with the end user in mind. By focusing on end users and their expectations when building the system, we can design the system from the start to meet their expectations.
- Elegance — Elegant solutions solve challenging problems and make them seem easy. They “hide” the application complexity and allow the user to obtain what is desired. Unfortunately, elegance is often more difficult to create. Studies show that it can take up to six attempts to get a product right or, as we would say, have it elegant1. The challenge becomes balancing elegance with the return on getting that elegance. That is the art of great development. There are three broad categories of elegance.
- For the end user —A system needs to be easy to use in order for it to be elegant. The user must intuitively understand what to do without reading a manual or calling a help desk.
- For the developer —The architecture (how the technical pieces are designed to be put together) needs to be simple and logical. It must create a coherent whole and not be a bunch of isolated pieces cobbled together over time. This sounds simple, but it is very challenging in a complex system to create an elegant architecture, especially as needs change over time and so the architecture must adapt.
- For maintenance — easy to use, well-documented, clean architectures and functionality/design are easier and less costly to maintain. Some studies show that maintenance consumes up to 80 percent of typical IT budgets2. Maintainability is a key goal of an elegant system.
- Purposeful Experimentation — Great results happen through experimentation and not through linear learning. You don’t create an elegant and inspired solution on the first try (well, not often and not predictably). It takes experimentation. You have to remove unknowns, challenge assumptions and do this through experimentation and learning. This is a key principle upon which agile is based. As an example, one of Apple’s leading designers stated, “A single button on one of Apple’s phones or tablets might have gone through 50 or more iterations before ending up in the final design.”3 Clearly, Apple is experimenting, even on something as small as a button, to get a great end result. While not every company has the budget to do 50 experiments on a button, simply doing some experimentation can make a dramatic difference. Note that this isn’t blindly trying things out; this is purposeful, well-thought-out experimentation.
- Mastery — You have to have great people on your project. They must understand their craft and know how to apply it. The novice creates complexity out of ignorance; it is only a master who can create a truly elegant solution.
- Partnership — Partnerships among clients, end users and the team are critical to success. If everyone isn’t working together towards a common goal, it will be significantly harder to achieve that goal. Each parties’ interests and incentives must be aligned toward that goal. If any parties’ interests and incentives aren’t aligned, an effective partnership becomes much more difficult.
All of these need to be done in a way to motivate and engage team members in delivering these results. Effective and valuable software products are the result of key stakeholders, clients and team members, partnering to deliver something that is reliably in integrity, elegant, has incorporated purposeful experimentation, is built by masters, all in the interest of the relationships at stake with each of these projects.
Sources:
1“Lean Software Development: An Agile Toolkit,” Mary Poppendieck and Tom Poppendieck, p. 140.
2 http://tynerblain.com/blog/2007/02/28/agile-development-roi-2/