The Big Idea

"Agile" and "having agility" within an engineering team might sound similar, but they represent different, though related, concepts in the realm of software development and team management.

"Agile" (capital “A”) is a set of principles and practices designed to cope with unpredictability and change in the software development process. It values individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan, as stated in the Agile Manifesto.

The Agile principles promote adaptive planning, incremental delivery, early delivery, and continuous improvement, aiming to provide flexibility and customer satisfaction by rapidly delivering working software.

On the other hand, "having agility" within an engineering team is more about the team's ability to respond to changes swiftly and efficiently. It's a broader concept that refers to the flexibility, adaptability, and speed at which the team operates. An agile (little “a”) team can pivot when requirements, technology, or market conditions change, irrespective of the methodology they are following.

Having agility involves the capacity to alter workflows, adjust resources, learn new skills, and change direction as necessary. This could mean adopting new technologies rapidly, reorganizing teams to better address changing needs, or being able to handle unexpected obstacles or opportunities without significant disruption.

In essence, "Agile" is a structured method of managing software development, while "having agility" is more about a team's flexibility and adaptability in the face of change. Both are valuable in today's dynamic and fast-paced software development environment. Both are required for a CTO to build an effective engineering organization.

Bringing more agility into your work

There are several ways an engineering team can foster more agility in their work, enabling them to respond swiftly and more effectively to changes. Here are some strategies to consider:

  1. Adopt Agile Methodologies: Utilize frameworks like Scrum, Kanban, or Lean, which promote iterative development, continuous delivery, and active stakeholder involvement.
  2. Promote a Culture of Continuous Learning and Improvement: Encourage team members to learn new tools and technologies, and to constantly look for ways to improve processes and systems.
  3. Empower Decision-Making: Empower team members to make decisions related to their work. This reduces bottlenecks and encourages a sense of ownership.
  4. Emphasize Communication and Collaboration: Regular communication - whether through daily stand-ups, pair programming, or regular feedback - is key to identifying and addressing issues quickly.
  5. Focus on Customer Value: Foster a mindset that prioritizes delivering value to the customer. This can guide decision-making and help the team focus on the most impactful work.
  6. Implement DevOps Practices: DevOps practices like continuous integration and continuous delivery can increase the speed of software delivery and reduce the time to recover from problems.
  7. Automate Wherever Possible: Automation of repetitive tasks (like testing, deployment, etc.) can free up time for more valuable, creative problem-solving work.
  8. Promote a Fail-Fast Mentality: Encourage the team to experiment, learn from failures, and quickly iterate towards the right solution. This can lead to innovative solutions and continuous improvement.
  9. Focus on Technical Excellence: High-quality, clean code is easier to change and maintain, leading to more agility. Practices such as code reviews, paired programming, and adherence to coding standards can improve code quality.
  10. Use Feature Flags: These allow developers to disable or enable features without deploying new code, enabling faster response to issues and more controlled feature rollouts.

Remember that agility is about more than just speed. It's about being able to respond to changes effectively and efficiently, without sacrificing the quality of your work or the well-being of your team.