Tag: Pattern

End-To-End Testing Considered Harmful

End-To-End Testing is deemed valuable by many organisations, but the false confidence and opportunity costs it generates are at odds with Continuous Delivery. Why is End-To-End Testing so commonplace, and yet so ineffective?

Read More

Organisation Pattern: Trunk Based Development

Trunk Based Development minimises development costs and risk

Read More

Application Antipattern: Hardcoded Stub

A Hardcoded Stub constrains test determinism and execution times When testing interactions between interdependent applications we always want to minimise the scope of the System Under Test to ensure deterministic and rapid feedback. This is often accomplished by creating a Stub of the provider application – a lightweight implementation of the provider that supplies canned…

Read More

Pipeline Pattern: Analysis Stage

Separate out analysis to preserve commit stage processing time The entry point of a Continuous Delivery pipeline is its Commit Stage, and as such manages the compilation, unit testing, analysis, and packaging of source code whenever a change is committed to version control. As the commit stage is responsible for identifying defective code it represents a vital feedback loop for developers, and for…

Read More

Organisation Pattern: Trunk Based Development Branching

Trunk Based Development supports Optimistic and Pessimistic Release Branching Trunk Based Development is a style of software development in which all developers commit their changes to a single shared trunk in source control, and every commit yields a production-ready build. It is a prerequisite for Continuous Delivery as it ensures that all code is continuously integrated…

Read More

Application Pattern: Proxy Consumer Driven Contracts

Proxy Consumer Driven Contracts simulate provider-side testing When Continuous Delivery is applied to an estate of interdependent applications we want to release as frequently as possible to minimise batch size and lead times, and Consumer Driven Contracts is an effective build-time method of verifying consumer-provider interactions. However, Consumer Driven Contracts assumes the provider will readily share responsibility…

Read More

Pipeline Pattern: Stage Strangler

The Strangler Pattern reduces the pipeline entry cost for multiple applications When adding an application into a Continuous Delivery pipeline, we must assess its compatibility with the Repeatable Reliable Process already used by the pipeline to release application artifacts. If the new application produces artifacts that are deemed incompatible, then we can use a Artifact Interface to hide the implementation details. However, if…

Read More

Pipeline Pattern: Artifact Container

A pipeline should be decoupled from artifact content Note – this pattern was previously known as Binary Interface In a Continuous Delivery pipeline, a simple Commit stage implementation may equate an application artifact with the compiled artifact(s) e.g. a JAR or a WAR: This approach may suffice for a single application pipeline, but the coupling between start/stop behaviour and artifact file…

Read More

Pipeline Pattern: Aggregate Artifact

Aggregate Artifacts can incrementally deliver complex applications When pipelining inter-dependent applications, the strength of the pipeline architecture directly correlates to the assembly cost and scalability of the packaging solution. If the Uber-Artifact approach is tacitly accepted as a poor implementation choice, is there an alternative? The inherent value of any packaging solution is the version manifest…

Read More