The Continuous Delivery Pipeline Problem
A Perspective on the Current State of Continuous Delivery
Modern software teams need better tools for managing their Continuous Delivery pipelines. Today's CD pipeline ecosystem is fragmented, rigid, and inefficient. We believe pipelines should be code-first, developer-friendly, and designed to handle the complexities of modern engineering workflows.
1. A Single Source of Truth
Pipeline definitions are scattered across multiple tools—GitHub Actions, Jenkins, ArgoCD, Kubernetes—and environments. This fragmentation leads to confusion, configuration drift, and duplicated effort.
Your pipelines need a single, version-controlled source of truth—a unified definition that's easy to understand, audit, and evolve.
2. Reusable, Typesafe, and Composable
Pipelines are often duplicated across projects, leading to redundant code and maintenance overhead. Each pipeline must be rewritten for each project, even if the core logic is the same. Without types, it is difficult to compose pipelines together.
Build pipelines like software. Modular, reusable components allow teams to share jobs, templates, and logic effortlessly. Leverage proper typesafe languages to ensure safety and composition.
3. Pipelines Should Be Dynamic and Flexible
Most pipelines today are static, unable to adapt to dynamic inputs, environment changes, or complex dependencies. Conditional logic and runtime decisions are hacked together (e.g. using shell scripts or conditionals in YAML).
Pipelines need the power of real code: loops, conditionals, runtime logic, standard libraries, and more. Flexible pipelines adapt dynamically to a team's needs without hacks.
4. Transparent, Visual, and Debuggable Pipelines
YAML and text-based pipelines are opaque. Visualizing workflows, understanding dependencies, and debugging failures is tedious and error-prone. A view of the entire flow is not easily provided as there are many tools and services involved.
Pipelines should be transparent, visual, and debuggable. Teams should be able to see the flow, understand the logic, and easily debug issues via a single pane of glass.
5. Pipelines Are Evolving and Change Can Lead to Instability
Whether the boundaries between components in your pipelines are explicit or not, they exist and are ever changing. Failing to identify all the places that need updating when one component is changed is an easy mistake to make. With other software, automated testing is established to defend against regressions and unexpected behaviour. The same should be possible with our pipeline definitions.
Use a full modern programming language, with its existing testing frameworks and tooling.
6. Slow Feedback Loops, Lead to Slow Recovery and Slow Progress
Many will be familiar with the pain of a slow remote build system or release pipeline. Having to make a small fix or improvement, add, commit, push, wait for a build, wait for it to be published, wait for it to get deployed and so on, all add up. Often, due to limitations of the tools we use, this is the only way to understand if a change behaves as expected
Have the ability to run and debug the entire end-to-end process on our local machines with minimal configuration and without unexpected side effects.
We're a small team of engineers behind Flipt, passionate about creating better tools for software teams. With experience working at companies like GitHub, InfluxData, and Cloudbees, we've witnessed firsthand how broken CD pipelines can be—and we're committed to fixing them.
▸Why Do You Think You Have the Solution?