Pipeline and Infrastructure

Anti-patterns in build pipelines, deployment automation, and infrastructure management that block continuous delivery.

These anti-patterns affect the automated path from commit to production. They create manual steps, slow feedback, and fragile deployments that prevent the reliable, repeatable delivery that continuous delivery requires.


Missing Deployment Pipeline

Builds and deployments are manual processes. Someone runs a script on their laptop. There is no automated path from commit to production.

Manual Deployments

The build is automated but deployment is not. Someone must SSH into servers, run scripts, and shepherd each release to production by hand.

Snowflake Environments

Each environment is hand-configured and unique. Nobody knows exactly what is running where. Configuration drift is constant.

No Infrastructure as Code

Servers are provisioned manually through UIs, making environment creation slow, error-prone, and unrepeatable.

Configuration Embedded in Artifacts

Connection strings, API URLs, and feature flags are baked into the build, requiring a rebuild per environment and meaning the tested artifact is never what gets deployed.

No Environment Parity

Dev, staging, and production are configured differently, making “passed in staging” provide little confidence about production behavior.

Shared Test Environments

Multiple teams share a single staging environment, creating contention, broken shared state, and unpredictable test results.

Pipeline Definitions Not in Version Control

Pipeline definitions are maintained through a UI rather than source control, with no review process, history, or reproducibility.

Ad Hoc Secret Management

Credentials live in config files, environment variables set manually, or shared in chat - with no vault, rotation, or audit trail.

No Build Caching or Optimization

Every build starts from scratch, downloading dependencies and recompiling unchanged code on every run.

No Deployment Health Checks

After deploying, there is no automated verification that the new version is working. The team waits and watches rather than verifying.

Hard-Coded Environment Assumptions

Code that behaves differently based on environment name (if env == ‘production’) is scattered throughout the codebase.