Continuous integration and continuous delivery automate the build, test, and deployment processes, reducing manual errors and ensuring consistent output quality. Companies that ship ideas to customers quickly and learn in-market through software experimentation maintain competitive advantages. The most successful organizations treat software delivery as part of their product, with scale and adaptation determining their ability to execute.
Pipeline maturity stages
Organizations move through distinct maturity stages. The initial stage establishes the pipeline with manual interventions still required. At the managed stage, most processes are automated though opportunities exist for improvements in efficiency and scalability. The defined stage brings clear metrics, stable performance, and predictable outputs. Quantitatively managed pipelines use data-driven insights for continuous improvement, with pipeline observability becoming central. The optimizing stage represents the pinnacle—pipelines are stable and flexible, allowing teams to focus on strategic improvements rather than maintenance.
When to advance your practices
Pipelines that cannot scale with increasing complexity create bottlenecks. Teams building from large monorepos find build times increase due to data volume or test execution counts. Builds that suffer frequent failures indicate problems with standardization around security practices and governance. When teams spend more time troubleshooting than delivering features, visibility becomes the problem. Without ways to prioritize builds and offload different build types to different agent pools, systems can experience build storms where low-priority tests block high-priority hotfixes.
Performance strategies
Parallelization delivers the most significant time savings for teams migrating from legacy platforms. Test suites that take hours when run in series can be reduced to minutes by parallelizing across many individual agents. Teams building from monorepos benefit from selective building and testing based on changes rather than building entire projects each time. Dynamic pipeline capabilities prove powerful for implementing these selective builds, particularly when combined with plugins that simplify implementation.
Caching strategies speed up build times by reusing previously computed results. Creating multiple job queues with different specification hardware allows build jobs to be assigned to agents with appropriate resources. For teams that manage their own build agent infrastructure, seeding build machines with cached repository copies significantly reduces checkout time, reducing checkout times from fifteen-plus minutes to seconds.
Static versus dynamic pipelines
Statically configured pipelines have steps written beforehand. When a build triggers, those steps perform the build. Dynamically configured pipelines generate steps at runtime based on user-defined logic. For monorepos, dynamic pipelines can examine changes in the current commit and determine what steps are required without building and testing everything. Static pipelines are easier to set up but lack flexibility. Dynamic pipelines require preparing the logic to generate pipeline steps, but once established, they increase efficiency and reduce unnecessary runs. Organizations have replaced thousands of lines of YAML with programs that generate sophisticated capabilities without unwieldy configuration files.
Operational excellence
Comprehensive dashboards should reflect essential metrics including build status, deployment frequency, failure rate, mean time to recover, and lead time for changes. Combining service-level metrics with traces of individual build jobs provides deep visibility. Advanced CI/CD users employ these metrics to identify issues before they manifest.
Organizations using CI/CD at advanced levels rely on modular, hierarchical approaches to templating. High-level pipeline templates define everything every build should include: pre-flight checks like security scans and linting, build steps, tests, and where appropriate, deployment. Stage templates can be designed to allow individual project owners to define custom steps within stages, providing governance while giving teams flexibility.
Flaky tests pass or fail unpredictably without code changes. Regularly review and update tests to ensure reliability. Implement quarantine processes for flaky tests until they are fixed. Test Engine can instrument test runners and collect test data in real-time, detecting flaky tests during builds.
The hybrid architecture model
Build agents run on your infrastructure or on hosted compute, executing one build job at a time. You can run as many agents as needed, and the orchestration system coordinates work between them. Agents can be deployed securely across different networks and environments. The hybrid model means customers provide their own infrastructure for running agents and managing secrets while the control plane handles user authentication, build orchestration, and stores logs and metrics.
Working with monorepos
The monorepo plugin watches for changes in specific folders and runs custom pipelines depending on what changed. Configure pipelines to watch for file or folder changes and run necessary steps based on what changed. Dynamic pipelines allow teams to generate builds at runtime rather than having to define them before a build starts, enabling teams to dynamically generate necessary build jobs based on file changes in the current commit.