For build architectures, it is useful to use a CRISP build:
- Complete (recipe lists all ingredients)
- Repeatable (version control time machine)
- Informative (radiate valuable information)
- Schedulable (complete and repeatable)
- Portable (machine-independent)
In the latest project for which I worked we use a continuous integration system.
At some point, it can be annoying because we do receive a lot of uninteresting mails.
But once configured it is really good to insure quality and reproducable results.
As a developer, I know how easy it is to deploy something on the server,
which is not exactly what is on the server.