Developers check in all changes (whether bug fixes or new features) on task branches first, and use those branches to run tests and conduct code reviews prior to merging to the trunk. That way the trunk build almost always works, and at any point in time we can deliver the trunk code to customers.