I have been seeing more and more the importance of paradigms in guiding software development. I am even including a chapter on it in our upcoming book: Lean-Agile Software Development: Achieving Enterprise Agility.
What is a paradigm? It is the set of experiences, beliefs, and values that affect the way you perceive what is real and how you should react. A paradigm is a habit of reasoning. Your world view.
A paradigm is deeply held and you may not always be aware of it. For example, when you were learning how to drive, you learned which side of the road was the "correct" side. It affects every aspect of how you drive, where you look for threats, and even how you cross the street. You do it without even thinking. Doesn't mean it is right, but it is "real." If you have ever traveled to another country where they drive on the "wrong" side (note the value judgment!), it probably took you a long time to adjust your way of seeing, in spite of lots of evidence to the contrary.
Because paradigms affect our view of what is real and true, we are slow to change them.
Why am I talking about this in a software development blog? Because the paradigms we developers hold affect our behavior as developers. And if we are going to grow and improve as developers, we have to become conscious of the paradigms that keep us in place.
In other words, we should always be investigating our beliefs as developers.
We can examine our hypotheses and see if reality provides evidence to support or reject them. Hold on to what is accurate, what works, and let go of what doesn't. Shouldn't that produce a better guide for our actions and behaviors? That is what I want to do here, briefly: examine the paradigms of software development... because they imply certain actions will be affective and others will not.
The paradigm underlying the Waterfall method is based on the following assumptions:
The paradigm underlying Agile is based on the following assumptions:
This, of course, is just the beginning. In follow up blogs, I'll discuss the paradigms of Lean vs. Agile vs. Scrum (they are not the same).
I believe that being clear about your foundational beliefs is useful because if your actions are inconsistent with them you should expect to be heading for trouble.
What do you believe?