When you’re first learning about Agile, it can feel a lot like standing behind the glass at the ice cream parlor. There are so many flavors to choose from, each with their own methods and practices. From rocky road to rum raisin, SAFe to Kanban, the choices can be daunting. Just like all ice cream is made up of cream and sugar, so do all prescriptive flavors of agile have values in common. Understanding and implementing these values is the key to a smooth agile transition. More so than picking the most optimal flavor. Let's take a look at what those fundamental ingredients are of what it truly means to be Agile.
For the uninitiated, wrapping your head around all of this - as well as understanding how to implement this with your team - can be a bit daunting. Rest assured, you have come to the right place. At VMware Tanzu (formerly known as Pivotal), we have built our business on ensuring successful digital transformations. This includes not only getting teams access to the right tools but more importantly to the right practices, as well as coaching leaders (live sessions at SpringOne Platform!) on how to scale these Agile teams to the rest of the organization.
Facilitate Open Communication
"Talent wins games, but teamwork and intelligence win championships." --Michael Jordan
While there are many responsibilities within a team, communication is critical. A study specifically concerned with software teams found suggestive empirical validation of their TWQ (Teamwork Quality) framework as a factor correlated with project outcomes. According to this study, "The most elementary component of TWQ is the communication within a team." The factors that lead to successful team communication include:
Encourage informal, spontaneous communication - While formal communication is important, informal and spontaneous communication allows for the sharing of information more quickly and efficiently.
Allow for direct communication between team members - Any team member should be able to communicate directly with any and all other team members, regardless of their rank within the organization.
Provide an environment that allows for open communication - All team members should be open to sharing information and ideas without fear of criticism or retribution. "A lack of openness hinders the most fundamental function of teamwork, namely the integration of team member's knowledge and experience on their common task."
So you may be thinking to yourself, “This all sounds great! But how can you help facilitate these outcomes? Glad you asked. While this is by no means a comprehensive list, below are some ideas to get you started making an impact on your team's communication patterns.
Hold daily stand-up meetings - Everyone should know what the team is working on, and can help unblock tasks allowing for faster resolutions.
Conduct retrospectives (see below) - Continuous improvement is a core tenant of any Agile model. Retrospectives are a great framework for implementing this.
Hold team-building/bonding exercises and make them fun - Too often teams get bogged down in the day-to-day and forget about the personal connections. Remind them.
Lean toward more, smaller teams - While there are many factors that influence team size, smaller teams tend to foster better communication in general.
Consider an open floor plan - This is admittedly a contentious topic for some, but getting people out of cubes and offices, and into team rooms and open floor plans can aid more effective communication
Consider async communications tools - Especially if your organization has a strong work from home or remote-team culture, you will need some sort of tool where teams can post messages for others to read later. While email filled this role in the past, it is often not the best medium for engineering teams to communicate day-t- day.
Regularly include stakeholders in the work - In the same way Agile moves teams to get products in the hands of customers faster, it also moves teams to involve stakeholders regularly for the same reasons.
Learn more: How Organic Communication Helps Teams Succeed
Always Be Improving
"Coming together is a beginning. Keeping together is progress. Working together is success." --Henry Ford
For Agile teams, “maintain the status quo” is never the goal. Agile strives not just to improve software, but to continuously improve team practices, as well as the skills of those involved. Much like Agile itself, continuous improvement can be very nuanced and mean different things to people. But most share the same goals: learn from the previous iteration, share skills and knowledge, and plan improvements for the next iteration. Specifically, many teams will find themselves doing many of the following:
Retrospectives - As discussed above, retrospectives are the basis for improvement is learning from your experiences. Positive experiences show what to continue, but more importantly, is to learn from what didn’t go so well. Many teams will record these pain points throughout the retrospective, review them, and rank them to see where the biggest impacts can be made. These serve as stakes in the ground. A way to measure if the current iteration was an improvement from the previous.
Share and Record Lessons - A lesson learned but not shared is missed potential. Having a process in place to capture improvements such as an internal wiki, lunch-and-learns, or other forms of internal documentation allows processes to improve, and greater shared knowledge.
Support Teams and Encourage Experimentation - Making sure you have a culture that facilitates growth is the groundwork for much of what’s been discussed. Education and training expose teams to not just new technologies, but new practices as well. Ones that may not have grown organically otherwise. Additionally, ensuring that experimentation is encouraged allows teams to kick the tires on something new that could potentially benefit your entire organization. Try a new way of running tests or tracking stories for a couple of weeks, regroup at the next retrospective, and evaluate if it was useful.
Shortening Your Feedback Loops
“Everyone has a plan ‘till they get punched in the mouth.” --Mike Tyson
Building great software starts with understanding your users. And you can’t understand your users until you receive their feedback. Feedback can be in the form of interviews, surveys, or product usage data, but here is the key: you need continuous feedback all of the time. In the best-case scenario, you would have your users pairing with product teams 100% of the time, constantly refining the approach to building products to solve their problems. But this is obviously not feasible.
Instead, look for ways to incorporate user feedback on new releases as quickly as possible. There are many methods for collecting this data, but it starts with getting new and innovative ideas in front of users, faster. Many toolchains and agile practices exist to automate these workflows. Continuous integration and continuous delivery/deployment (CI/CD), release orchestration, Test Driven Development (TDD), blue/green deployments, and canary releases are all common practices to increase the velocity of this feedback loop while decreasing the risk of deploying new code into production.
Dynatrace is a software monitoring and performance management company that went from shrinkwraped software deployed twice per year, to a SaaS offering with 26 major releases per year and over 5,000 daily deployments. This allowed Dynatrace to get feedback from their users on a much more regular and accelerated basis. See how they did it in this video interview.
And Tanzu Can Help You Get There
A strategic partner can be an integral part of transforming how your organization builds software. Changing the way you work does not just mean changing technology, it means changing the team process as well. During these cultural shifts, having a partner to guide you can help ensure success.
With VMware Tanzu Labs, we focus on incorporating Agile in everything we do. Before we go any further, let’s be specific about what we mean. At VMware Tanzu, we define Agile as a set of values and principles that promotes iterative delivery, flexibility, teamwork, and communication. In today's evolving landscape where customers need to respond quickly to technology updates and changes, it’s essential to adapt quickly. Our agile software development is a way to build software in the face of changing requirements. It drives the evolution of a product through an iterative development cycle based on ongoing end-user feedback. Rather than a “big-bang” approach, releasing every few months, with our agile method software is built and deployed much more frequently - iterations of days, or even hours - in order to get immediate feedback as a product takes shape.
We incorporate agile into all of our practices, here are some examples:
TDD - Instant feedback if tests fail.
Pair programming - Feedback on the code as it is coded.
Dev rotations - Daily/weekly feedback by outside eyes.
Retros - Team provides weekly feedback on how it operates.
Empowered teams - Support teams to be collaborative, sustainable teams.
Continuous improvement - See above.
We help customers by enabling them to learn new methodologies, discovery and framing, paired programming, and test-driven development. These deliver products in a predictable, productive, and sustainable pace. The agility and flexibility of their frameworks accelerates time-to-market and enables them to quickly react to a changing market through continuous iteration.
Interested? Want to learn more? Check out Agile: The Way to Develop Great Software or join us at SpringOne Platform with discount code S1P_Save200!
About the AuthorMore Content by Tony Vetter