Principle #9: Continuous attention to technical excellence and good design enhances agility.
We need to be technically excellent – that is, we need to pay attention to the details, build things right the first time, and not gold-plate the things we build. Keeping things simple and repeatable adds increased speed and agility into the team’s processes, and over time, builds trust within the team that extends to your stakeholders.
Designs should be simple, flexible, and easily understood. Good design is when we build things in a way that does not create a significant amount of rework or technical debt. Good designs are repeatable in whole or in part, and shareable due to their simplicity and communicable nature. This enhances team’s agility.
Technical Excellence
Technical excellence is about doing things right the first time. Doing so, avoids rework and allows for team members to move onto the next valuable thing. It means that you’ve learned from mistakes and can apply those lessons repeatably. Technical excellence is progressive in that everyone can be and become more technically excellent as they continue to learn, evaluate, and improve their skillsets. With greater technical excellence comes more confidence in ourselves, as well as from our peers and stakeholders.
Organizations can make or break this principle. It begins with hiring the right staff with the right skills to create the product. They then must cultivate a learning organization, encourage lifelong learning to acquire new knowledge and improve individual skills, and enable teams to do so by providing the necessary time and resources. Without this, individuals and teams become entangled in the tyranny of the urgent and may find themselves falling behind in their respective fields. As you can imagine this stifles progress for the individual and the organization.
Individuals must then take advantage of opportunities provided to them by their organization. While every company fancies themselves a learning organization these days, few regularly provide the time necessary for their employees to progress themselves. So, when individuals are provided time for learning and innovation, they need to be prepared to take full advantage.
As an agile team member, consider being proactive and looking ahead at opportunities and classes in your field to build on your technical expertise and skillsets. Understand agile practices well enough that you can steer estimations of your work toward more accuracy, providing greater predictability and the likelihood that you will be able to use provided time accordingly (the innovation and planning sprint for example). Look ahead at your schedule and plan courses, cross-training, and hackathons early so that any required coordination and or funding can be approved early. Doing so shows ambition, organization, and the perseverance many organizations look at regarding employee’s performance.
Additionally, Agile teams must beware of BAU! Individuals need to stay focused, avoid distractions, and keep their concentration high on the product they’re working on. When we task switch or are regularly distracted, we are unable to provide our best work. This also implies we should take breaks, as needed, when unable to focus. Do not force yourself to go on if you’re distracted, overworked, or unable to focus. The product will suffer.
Develop technical excellence continuously. Don’t work at such an unsustainable pace that your team doesn’t have time to improve their technical excellence regularly. Reserve time for it in each sprint and develop new skills regularly.
Good Designs
In aspiring to good design, we empathize with and focus on the customers’ needs, delivering greater value. Good designs use a customer-centric development process creating desirable products that are both viable and sustainable throughout their lifecycle. Using artifacts such as personas, as well as empathy, journey, and story maps, we can truly understand the problems of the customers and how we can best design a solution. Making these artifacts available to the team, or team of teams developing the solution, we can take a more wholistic approach to how we think about the product.
While we want to design well, we should avoid Big Design Up Front (BDUF), a software development approach in which the program’s design is to be completed and perfected before that program’s implementation is started. That is better suited for a waterfall process. Instead look to provide just enough design to start development on a product and allow the team to continue to emerge the design over time. After all, few designs are ever perfect up front.
Additionally, we want to avoid the pitfalls of waterfalling our iterations. If your teams are practicing agile, there should be no such thing as a design sprint. Design should be a part of every story and emerge over time using methods that maximize flexibility, learning, and fast feedback.
Consider using Set-Based Design. Through modeling, prototyping, and simulations we can preserve many design options while minimizing the costs involved in doing so. As the product continues to emerge and we gain feedback from our stakeholders, we continue to fix that which was variable and narrow our solution design options.
As we create good designs, we save time. Good designs require fewer revisions and are repeatable in part or in whole – which saves time and resources in the future – increasing productivity as teams can reference design templates, reusable code, or helpful checklists.
Lastly, designs should account for and embrace the necessity of change. Your design shouldn’t be so overly engineered that it becomes fragile. Too often, well-intentioned over-engineering is a major source of technical debt. So, avoid trying to anticipate all the possible changes that could be needed and instead keep it simple and flexible. Keeping it simple will provide the flexibility that may be needed in the future.
Summary
Continuous attention to technical excellence and good design enhances an organizations agility. By providing the time and space for individuals and teams to pursue and refine their technical skills organizations improve their likelihood of success. With greater technical expertise and through practicing sound agile practices, teams can design simpler, more flexible, products that meet or exceed the customers’ needs.