To answer this question, what I first ask is that people think about their current environment. Assuming you’re not a startup – a domain which I’m not considering in this post – then you are undoubtedly dealing with a mature system which is now or quickly will resemble Frankenstein’s monster more than anything else. If your system is successful to any degree – and if it isn’t, then we aren’t really having this conversation – what you find is that your system is a victim of its own success. Grizzled veterans remember the “good old days” when builds would take less than an hour and everyone could sit in a room and share a common understanding of what the hell was going on in this money maker of yours.
Sadly, one day you look up and find that no one knows what the hell is going on anymore. Build times – perhaps one of the more visceral measurements of complexity we have – have jumped dramatically. These days, people fire off builds and then go on lunch breaks. Worse, your projections are that in just a short time in the future, the nightly “integration” builds you kick off will still be running well after your developers have shown up for work. It’s at this point that one panics and decides that dramatic action is required. Something MUST be done. Well, as long as that something doesn’t require any change to what you’re currently doing – i.e. one starts searching for a silver bullet which will slay this beast of chaos that you’ve collectively created and return your life back to the way things used to be. Before “IT” happened.