Control flow under uncertainty.
Deliver software frequently, from a couple of weeks to a couple of months, with a preference to the shorter time scale.
Develop on Cadence, Release Any Time Abstract
Develop on Cadence. In a flow-based system, basing routine development activities on a fast, synchronous cadence—a regular, predictive rhythm of important events—is the best strategy for managing the inherent variability in systems development. Building complex, large-scale systems is, after all, research and development. This is a fundamental premise of SAFe, and its effects can be seen directly on the Big Picture with the fast cadence of synchronized, short Iterations, then the further integration of those iterations into larger Program Increments.
Release Any Time. However, SAFe provides a separation of concerns that gives development teams the cadence and synchronization tools they need to manage the complexity and rapid change in their environment, while allowing for either synchronous or asynchronous Releases to the market. This is another fundamental premise behind SAFe, and it is also expressed directly in the Big Picture by those little iconic, asynchronous boxes of working software.
Details: Develop on Cadence
Cadence and synchronization are the key constructs we use to build our Solution assets. Cadence is the use of a regular, predictive development rhythm. Synchronization causes multiple dependent events to happen at the same time.
Together, cadence and synchronization allow us to make routine that which can be routine, including PI Planning, System and Solution Demos, and system integration, as well as less frequent items such as adjusting resources and realigning work to teams. These principles (thanks to Don Reinertsen, Principles of Product Development Flow ) are so critical to understanding why SAFe works the way it does that we describe some of Reinertsen’s basic principles—along with how SAFe applies them—in Tables 1 and 2 below.
|Principles of Flow: Cadence||SAFe Practices|
|F5: Use a regular cadence to limit the accumulation of variance||Planning at regular Program Increment (PI) intervals limits variances to a single PI timebox, thereby increasing Agile Release Train and Value Stream predictability.|
|F6: Provide sufficient capacity margin to enable cadence||In order to reliably meet PI objectives, the Innovation and Planning Iteration is unplanned and provides schedule margin. Uncommitted, but planned, stretch goals provide capacity margin. Together they provide the schedule and scope margin needed to reliably meet PI goals.|
|F7: Use cadence to make waiting times predictable||If a Feature doesn’t make it into a PI (or Release) and it remains high priority, its delivery can be anticipated to be on schedule in the next PI (or scheduled, frequent release), thereby avoiding the temptation to load excess WIP into the current increment.|
|F8: Use a regular cadence to enable small batch sizes||Short Iterations help control the number of Stories in the iteration batch. Feature batch sizes are controlled by short PIs and frequent releases, providing high system predictability and throughput.|
|F9: Schedule frequent meetings using a predictable cadence||PI planning, iteration planning, backlog refinement, Inspect and Adapt, architecture discussions, etc., all benefit from frequent meetings. Each meeting needs to process only a small batch of new information. Cadence helps lower the transaction costs of meetings and other significant events.|
Table 1: Cadence principles applied in SAFe
|Principles of Flow: Synchronization||SAFe Practices|
|F10: Exploit economies of scale by synchronizing work from multiple projects||Individual Agile Teams are aligned to common iteration lengths. Work is synchronized by system and solution demos. Portfolio business and Enabler Epics drive common infrastructure and Customer utility.|
|F11: Capacity margin enables synchronization of deliverables||Teams plan with stretch objectives; these are sacrificed as necessary when plans meet reality.|
|F12: Use synchronized events to facilitate cross-functional trade-offs||Value stream and program PI events synchronize Customer feedback, resource and Budget adjustments, mission alignment, inspect and adapt improvements, and program review and governance. They also drive collaboration and team-building.|
|F13: To reduce queues, synchronize the batch size and timing of adjacent processes||Teams are aligned to common timeboxes and similar batch sizes. The System Team at the Program and value stream levels supports integration on a regular cadence. Backlogs are kept short and uncommitted to support rapid delivery of new ideas.|
|F14: Apply nested cadence harmonic multiples to synchronize work||Teams integrate and evaluate (at least) on iteration boundaries; programs and value streams integrate and evaluate on PI boundaries.|
Table 2: Synchronization principles applied in SAFe
Taken together, cadence and synchronization are critical concepts that help us manage the inherent variability in our work. This creates a more reliable, dependable software development and delivery process, one that our key business stakeholders can come to rely on.
Details: Release Any Time
As we have seen, developing on cadence is indeed well and good, but when it comes to actually Releasing value, a different set of rules may apply. Given a reliable stream of Program Increments, the next and even larger consideration is to understand when and how to actually release all that accumulating value to the end user. The Big Picture illustrates releases at various times during the flow of each Agile Release Train (ART). But that’s just a picture, and every Enterprise, and every Program and Value Stream, has to have a strategy for releasing software that suits its development and business context. In the next section, we will discuss considerations with respect to release frequency.
Toward Continuous Delivery
For many, the prospect of Continuous Delivery may represent a desired end state. After all, none of us panic when an automatic update becomes available for our phone; we assume it will deliver value and hit that update now button without much thought or concern. And surely there is as much or more software in that phone than there is in some of our enterprise systems. However, the enterprise world often marches to a different drummer. Perhaps, for reasons of security and availability, or for financial (banking, trading) or personal (medical equipment, man-rated systems) criticality, the customer’s operational environment may not be suited to continuous updates of significant new value. Perhaps our enterprise’s development and release capabilities have not advanced to the point where that is a largely risk-free approach for our Customers. Perhaps, for whatever reason, it just doesn’t make economic sense.
In addition, systems that support continuous delivery must be designed for continuous delivery. Even then, releasing is not a homogeneous thing. Even this simple website has multiple release paradigms. If, for example, we updated the Big Picture every week, those supporting SAFe with tooling and courseware would not think that was a good approach. At the same time, if we didn’t have the ability to roll out new content (through the blog, Guidance, and updates to articles), we’d be inhibited in our goal of continuous value delivery. We couldn’t be as Agile. You have to design for these things.
Separating Development Concerns from Release Concerns
We therefore recognize that developing and releasing systems may be unlike events. For maximum flexibility and agility, SAFe provides a separation of concerns to decouple them. Each program value stream defines the development cadence for its Agile Release Train when it picks its Iteration pattern. With this conceptual model, there are three separate cases for releasing.
Releasing on the Program Increment Cadence. The simplest case is when an enterprise can release on the program increment boundaries. It’s simplest because PI planning, releasing, and Inspect and Adapt are coordinated by the same cadence and calendar dates. In addition, Innovation and Planning Iterations can be timed, designed, and coordinated to support the more extensive release activities, which can include final verification and validation, UAT, release documentation, etc. Plus, all release dates can be known well in advance! (Fix the date, float the scope.) If an organization wants the efficiency and convenience of this model, and since the overall PI pattern is arbitrary, many enterprises find their way to this simple construct. (See Roadmap, Figure 1, for an example.)
Releasing Less Frequently. In many cases, however, releasing on a fast PI cadence may not be possible or even desirable. For example, in some enterprise settings, deployed systems constitute critical infrastructure for a Customer’s operating environment. Even if the Customers would like to have the new software, service level and license agreements may be prohibitive, and there is the overhead and disruption of installation. In other cases, the time lines of enterprises that are building systems that contain both software and hardware, such as a mobile phone or geophysical mapping satellite, are driven by long-lead hardware items—displays, chip sets, and the like. The new hardware must be available first, so releasing early and incrementally is not an option. In these cases, releasing on PI cadence may not be an option, and the planning and releasing activities may be completely decoupled.
Releasing More Frequently. For enterprises building complex solutions (e.g., systems of systems), either of the above two cases are probably overly simplistic. While the larger system may lend itself to either of the models above, various components of the system may have to be released more frequently. The periodic planning function still provides the cadence, synchronization, and alignment the enterprise needs to manage variability and limit deviations from expectations, but forcing the release of all assets to the same cadence is unnecessary and constrains the system too much.
Release Any Time
Let’s be practical. Big systems are not homogeneous. They may contain different types of components and subsystems, each of which requires its own release model. So elements of each of these three models above may all be present at the same time, in which case it’s probably easiest to consider the most general model: Release whatever you want, whenever it makes sense within the governance and business model, as the example in Figure 1 illustrates.
In all cases, enterprises that apply SAFe can rest easy in the knowledge that development and releasing are not the same thing, and they can release any quality asset at any time required to meet business conditions.
Learn More Reinertsen, Don. Principles of Product Development Flow: Second Generation Lean Product Development. Celeritas Publishing, 2009.  Leffingwell, Dean. Scaling Software Agility: Best Practices for Large Enterprises. Addison-Wesley, 2007, chapter 16.  Leffingwell, Dean. Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise. Addison-Wesley, 2011.
Last update: 21 April 2016