Should software be built by teams that are disciplined and factory-like, or by teams that are flexible and highly self-motivated?