I once had a program manager ask me: “Are you for or against agile?” By way of context, I was taking over a large existing software team, and he wanted to ensure his role as scrum master was intact. I thought about it for a few seconds and answered him as honestly as I could: “Yes.”
My answer was not intended to be evasive. I have used agile practices in the development of software - and even have the odd distinction of being a member of the first Scrum team in my first job after college. I also have used waterfall. And to be honest, I have used about every variant in between. But my answer reflected my philosophy: there are no sacred cows in software development.
Okay, let me modify that slightly. There is one and only one sacred cow: to drive real value, to real customers, through the delivery of quality software. Everything else is just a means to achieve this goal, and there is always more than one way to achieve the same goal.
This got me thinking about all the sacred cows I have encountered over the years: development methodologies, management philosophies, programming languages, programming paradigms, organizational models, tools, platforms, and so on. Each time I have encountered a sacred cow, it is often a point of great passion for the individual or group of individuals driving the initiative. And each time, its correctness is highly subjective to the specifics of the situation.
This is not to say that in a given situation, there is not one option that is better than another. But if you were to write a mathematical formula for the delivery of great software, it might look something like this:
gs = gp + wdp + ge + gl
gs = great software
gp = good people
wdp = well defined problem
ge = good environment
gl = good leadership
No where in the formula for great software is a requirement that you must use a Agile, Java, object-oriented programming, offshoring, Eclipse, Subversion or Linux.
So when you encounter someone who applies absolutes to software development, ask them to take a deep breath, look around at the diversity of successful software teams, and realize: there is really no sacred cow other than to_ deliver quality software, that drives real value, to real customers_.