In software development, maintaining a sustainable pace is crucial for success. It enables teams with the ability to continuously deliver value without stopping, and in regards to future predictability, we can accurately estimate when that value can be delivered. In this blog post, we'll explore why a sustainable pace is desirable, the factors that can impact development speed, and the proven practices to keep the rhythm going.
Why a sustainable pace matters
Software development is often an expensive endeavor. Sponsors and investors want to know when the software will be "finished" and what return they can expect on their investment. Other stakeholders—marketing, customer relations, people working on downstream systems—may also be impacted by release dates, and therefore might put pressure on a delivery team to commit to timelines and deadlines. However, estimating delivery dates based on some assumption about the pace of development is challenging due to the unpredictable nature of building software. Each application is unique, possibly involving unknown integrations and supporting new business processes. What’s more, each team building those applications is unique, composed of different individuals with their own skills and characteristics. The pace of development can therefore vary significantly. On top of all that, we humans are generally bad at predicting how long something will take to do.
Then there’s the factor of human cost—people under delivery pressure risk burnout as they try to accelerate the pace of delivery when approaching deadlines. This may impact motivation and productivity, and often results in a deceleration following the deadline. It may even lead to team attrition which can further increase volatility.
Factors impacting development pace
The individuals involved in software development introduce complexity that can disrupt the pace. People work and learn at different speeds and have different working habits and communication styles. Additionally, personal factors such as vacations, stress, and motivation can affect productivity.
Building great software involves a great deal of communication and decision-making between individuals. Decisions about what and how to build, in what order, how to validate/test/release, etc. Communication and decision-making processes can also slow down or cause volatility in the pace of development, due to delays and misunderstandings. The following are some issues that affect development efficiency:
- Long feedback loops – This includes waiting for code reviews, finding and getting assigned bugs a long time after working on the code, getting late feedback from users and having to go back and change things before moving on to working on the planned features.
- Heavy context switching – An example of this is shifting between working on features and bugs, or between the current backlog and discovery on some later item on the roadmap
- Misalignment on scope and priorities and communication silos – When decisions are made and not communicated clearly to all concerned, there’s a risk of misunderstandings and potential rework. This problem can be exacerbated in larger teams with more lines of communication.
- Personnel changes – A team loses context and knowledge when a person leaves and must spend time onboarding new joiners, which can take longer if there is no clear documentation.
Proven practices for achieving a sustainable pace at Tanzu Labs
Over the past 40 years, VMware Tanzu Labs (formerly Pivotal Labs) has learned and established proven practices to create a sustainable delivery pace. These practices focus on collaboration, communication, and efficient decision-making. For example:
- Close collaboration – Bringing the entire application team together, either physically or through collaborative communication channels, ensures minimal misunderstandings and enables fast feedback.
- Clear working agreements – Understanding each team member's working and communication preferences and establishing norms helps optimize speed and reduce volatility.
- Pairing – Two heads are better than one. Pair programming allows developers, designers, and product managers to work together on the same problem, providing fast feedback and preventing bottlenecks such as lengthy or delayed code reviews.
- Test-driven development (TDD) – Automated tests cover the code, ensuring that changes don't break existing functionality and eliminating time-consuming bug fixes. This allows the team to focus on high-priority features. It also provides clear documentation to help ramp up new joiners on the codebase.
- Well-sized user stories – Breaking down the backlog into well-sized user stories and estimating their relative complexity helps to make estimations and track delivery pace more accurately.
- Lean product releases – Releasing early and often, and gathering user feedback, allows for quick iterations and adaptation. This reduces stress and eliminates the need for rushed or overtime work toward big bang releases.
- Retrospectives – Reflecting on team performance regularly helps identify and address issues that impact the pace of delivery. Continuous improvement is a key aspect of maintaining a sustainable rhythm.
- Experimentation and research – Trying out new ideas and conducting user research helps minimize waste and reduce risk and rework. It also ensures that the team is building software that users will love and find valuable.
Case study
In Singapore, Tanzu Labs worked with an enterprise customer who consistently faced delays in their software delivery and missed deadlines, leading to anxiety and ultimately mistrust between delivery teams and stakeholders. When a team working on a critical application had failed to deliver a new product in 18 months, the customer engaged us for a period of 4 months with a specific goal to increase the delivery cadence and predictability. By applying each of the practices mentioned above, we were able to release our first MVP to production within eight weeks of starting development, and were consistently pushing new features to production multiple times per week for the remainder of the engagement, reducing overall lead time for new features to around 30 days. We were able to estimate deliveries for major releases for the product over the subsequent months that were accurate within days! And best of all, throughout this journey our client team left work at the same time each day and was energized and motivated to continue.
Next steps
Maintaining a sustainable pace of development is essential for successful software delivery. By identifying factors that impact delivery volatility, reflecting on team performance, and adopting proven practices, teams can optimize their workflow and achieve a predictable rhythm. This reflection could be in the form of a retrospective or value stream map to identify potential issues, prioritize them, and ideate mitigating actions for the team to take.
If you're interested in learning more about sustainable software development, please get in touch with us. Together, we can help your teams make software development fun, fulfilling, and predictable!