It’s important that given a project configuration, two checkouts of the
configuration in the same environment (operating system, Python
version) should produce the same result, regardless of their history.

For example, if someone has been working on a project for a long time,
and has committed their changes to a version control system, they
should be able tell a colleague to check out their project and run
buildout and the resulting build should have the same result as the
build in the original working area.

We believe that software should be self-contained, or at least, that
it should be possible. The tools for satisfying the software
responsibilities should largely reside within the software project
itself.

Some examples:

Software services should include tools for monitoring them.
Operations, including monitoring is a software responsibility,
because the creators of the software are the ones who know best how
to assess whether it is operating correctly.

It should be possible, when deploying production software, for the
software to configure the monitoring system to monitor the software.

Software should provide facilities to automate its configuration.
It shouldn’t be necessary for people to create separate
configuration whether it be in development or deployment (or stages
in between).

Software deployment should be highly automated. It should be possible
to checkout a project with a single simple command (or two) and get a
working system. This is necessary to achieve the goals of
repeatability and componentization and generally not to waste people’s
time.