...
It should provide the ability to do a repeatable controlled build so that a software product can be compiled in the same way for release process.
This is particularly important for critical infra-structure software that customer organizations depend on.
It is easier to make builds repeatable if they occur on machines which are separated from developer machines
It needs to give quick feedback to developers when they commit code to a repository which breaks the build
Especially when the breakage happens on other operating systems or platforms which are different to the primary system that a developer works on.
For myself I primarily work on Mac Book and so it’s very convenient to know if a commit breaks the windows or linux build.
Speed is important - getting fast feedback to developers is more efficient than discovering the next day etc.
Unit tests will part of a good automated build system
It should have place the end software product in a place that can be downloaded by quality assurance engineers.