Producing runnable output.
WHAT A BUILD DOES
Turns source into something executable or deployable.
WHAT IT MAY INVOLVE
Compilation Dependency resolution Code generation Asset processing Packaging Running tests
WHAT TO AIM FOR
A single command producing the complete output.
WHY
A build requiring undocumented manual steps cannot be reproduced.
WHAT REPRODUCIBLE MEANS
The same source producing the same output, anywhere.
WHAT THREATENS IT
Unpinned dependencies Machine-specific paths Timestamps embedded in output Undeclared tool versions
WHAT TO PIN
Everything: language version, dependency versions, tool versions.
WHAT TO KEEP FAST
The build.
WHY
Slow builds are run less often, and problems are found later.
WHAT TO CACHE
Dependencies and intermediate results, where the tooling supports it.
WHAT TO SEPARATE
Development builds, optimised for speed Release builds, optimised for output
WHAT TO VERIFY
That the release build actually works, since it differs from the development one.
WHAT TO DOCUMENT
How to build from nothing.