Measure how much build time you save from Docker layer cache hits versus misses.
Docker caches layers by instruction hash. If a layer's inputs haven't changed, it's served instantly from cache. Time saved = (cachedLayers × avgBuildTime) − (cachedLayers × cacheLoadTime). Higher cache hit rates yield dramatic build speedups.
Time Saved
saved = cachedLayers × (avgBuildTime − cacheLoadTime)
Docker's layer cache is linear — if layer N changes, layers N+1, N+2, etc. must all rebuild because they could depend on N's output. This is why ordering matters: put stable layers first.
Use BuildKit's --cache-from with a registry cache, or mount package manager caches (e.g. --mount=type=cache for npm, pip) so dependencies aren't re-downloaded on every build.