Crucial Concepts
How can a software development organization improve quality and speed time-to-market? By shifting left.
Think for a moment about a traditional development “waterfall.” First requirements are gathered and codified. Then, programmers implement the requirements. Then, testing and documentation take over, and after they finish, the result is released to operations. In this framework, any “shifting left” moves a segment of the process closer to the beginning of the timeline, on the left. “Shift left” largely began with testing. The idea was that starting testing before programming ended — perhaps as early as it began — helps reduce risk, identify problems earlier and at lower cost, and improve communications between development and testing.
Continuous delivery (CD) starts with that same waterfall timeline and aims to improve it with a different but related emphasis on “shifting left.” In the original waterfall timeline, a programmer’s source code is typically built into an application, the application is staged to a test environment, the app is tested, and if all goes well, the staged application is eligible for promotion to production or release. Each of these steps involves considerable human involvement and delay. CD automates most or all of these steps. With CD, a programmer completes, submits, or commits a code change, then automated systems immediately compile and test the application. Specific enhancements are available to benefit consumers within minutes or hours rather than weeks or months.
Shift-left and CD yield a software pipeline that’s sometimes orders of magnitude faster, as the descriptions above hint. That’s not all, though; the methodologies and automations of shift left and CD tighten the links between programmers and customer experience so that it’s far easier to validate and correct features. Most defects introduced into source result in errors reported that same day. CD greatly reduces the frequency of needing to “debug” an error found “on the right” due to a source change “on the left” from weeks earlier. Shift left and CD make software development faster and more reliable.
Most of the processes actually involved in CD are familiar to experienced programmers and administrators. The topic has collected a number of specialized terms, though, to help identify or emphasize a particular perspective:
Agile
Computer developers and managers use “agile” to emphasize “customer satisfaction through early and continuous delivery of useful software … close, daily cooperation between business people and developers …” and related principles. The two quotes here are among the dozen of tenets of the original Agile Manifesto written in 2001. Note that “continuous delivery” appears right at the very beginning of the manifesto, and therefore of agile culture.
Several Refcardz are already available that explain various aspects of Agile development:
- Design Patterns
- Getting Started With Lean Software Development
- Software Configuration Management Patterns
CD
The initialism CD stands for either “continuous delivery” or “continuous deployment.” The practices remain novel enough that practitioners don’t yet use the labels consistently. Generally, though, “continuous delivery” means that all the steps from programmer-commit through integration tests are automated. “Continous deployment” does everything “continous delivery” does, plus automatically delivers the latest tested code changes to customers.
The understanding of the words automation, validation, and delivery has changed throughout the years. In 2001, continuous deployment might have implied a daily release to a customer. In 2018, it generally brings to mind that end-users see an update a few seconds or minutes after a programmer checks in new code.
CI
“Continuous integration” (CI) is the first step of CD. CI automatically builds or compiles a usable application from the latest code changes in a software repository and ensures no changes overlap with each other. Grady Booch first wrote about CI in 1991, when the emphasis was on consolidation of the output of an entire programming team into a single authoritative source image. Discussions of CI now generally focus on optimizations or automations valuable for large bodies of code with complex build procedures.
Containers
A container virtualizes an application at the level of the operating system. While Docker is the market leader, many other container technologies are in widespread use, including OpenVZ, Hyper-V, and so on.
DevOps
Traditional computing differentiates development from operations. Different people work in the two domains, and communication between them is limited.
DevOps aims to bring these perspectives together. If a problem turns up in production in a traditional model, operations has the responsibility for diagnosing and correcting it, often without help. DevOps aims for problems to turn up sooner, before they reach production, and, when production is the location of a symptom, programmers pitch in to find and fix it. Presumably, this leads to programmers with better perspective on what can go wrong in operations and operators with more understanding of how programmers put the applications together.
Docker
Docker is a Linux-based container implementation in widespread use.
Hello, World
Programmers often focus on a minimal example of a technique or tool under the label of a “Hello, world.” A model introductory program in the C language appeared in an influential book printed “Hello, world” to the screen, and halted. As over-simplified as that might seem, experience proved that even such a minimal program usefully illustrates important principles, and therefore is good practice for beginners.
Lightweight
Digital solutions that emphasize ease of use, minimalism, or simplicity are often called “lightweight.”" The contrast is with “heavy” technologies that give more capabilities at the cost of more restrictions, computing resources, or procedural investment.
SDLC
The software development lifecycle (SDLC) is the comprehensive process an organization uses to plan, budget, develop, validate, maintain, replace, enhance, support, and eventually retire specific software assets.
Shift Left
If we built houses like software programs, we wouldn’t tell the roofers how big the house is until after the electrical wiring had passed inspection, let alone give them a chance to purchase their materials.
Shifting left rearranges the work of different computing specialists so that they can do more in parallel and cooperation, rather than isolation.
“Shift left” aims to begin acceptance testing far earlier, and more nimbly: left-shifted testing is far more likely to yield insight that informs fundamental architectural improvements. Left-shifted testing also involves deeper and more frequent communication between specialists in testing, operations, and development.
While “shift left” was first applied to testing, it now applies with even more force to operations and other segments of the SDLC.
Waterfall
The sequential development methodology is labeled “waterfall.” First, all requirements for a project are gathered and written; then, the completed requirements are delivered to architects, who design a solution. Programmers implement the design until they believe the application exhibits all necessary functionality. After the completed application passes to the hands of testers, the testers identify all defects they can find. These handoffs continue through stages of correction, delivery, operation, and maintenance. Waterfall communication focuses on “deliverables,” with a minimum of interactions between teams or stages.
{{ parent.title || parent.header.title}}
{{ parent.tldr }}
{{ parent.linkDescription }}
{{ parent.urlSource.name }}