Wednesday, June 8, 2016

The Tao Agilist

  1. Taoism is a spiritual, philosophical and religious tradition of Chinese origin that emphasizes living in harmony with the Tao, which is both the source of, and the force behind, everything that exists. Tao resembles the "way", "path", or "principle" and emphasizes wu-wei (action through non-action), "naturalness", simplicity, spontaneity, and the Three Treasures: jing (the essence of the physical body), qi (energy of thoughts and emotions), and shen (spirit or spiritual power)
  1. Agile software development is a set of principles for software development in which requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.

In February 2001, 17 software developers met at the Snowbird resort in Utah to discuss lightweight development methods. They published the Manifesto for Agile Software Development, aimed to:

"uncovering better ways of developing software by doing it and helping others do it"

They defined that Agile values:

  1. Individuals and interactions over Processes and tools,
  2. Working software over Comprehensive documentation,
  3. Customer collaboration over Contract negotiation, and
  4. Responding to change over Following a plan.

On the other hand, the Tao Te Ching, a compact and ambiguous book containing teachings attributed to Lao Tzu (Chinese: 老子; pinyin: Lǎozǐ), is widely considered the keystone work of the Tao.

Over the years, I’ve come to study both subjects separately, but some time ago as I dig deeper and deeper into the Tao, I started to see some resemblance between both of them. It struck me to start sensing that the very essence of both are, in my opinion, completely aligned, and hence my attraction to both of them.

I believe the most important idea that creates this link in my mind is the fact that both disciplines, one for the spirit and the other one for software development, are based on the principle that flowing through the reality is more valuable and effective than opposing it or planning too much around it, and both are based on agreeing to empty your mindset from what you think you know in order to let yourself discover “on the way” what is the real path for every situation, adapting yourself (flowing) to the changing events, sometimes discovering a new and better destination that was hidden on the real essence of the path.

If you apply this to Tao, then you start to see why this meta-philosophy does not deny other spiritual or religious beliefs or systems (something that almost all religions do - invalidate each other) but states that all of them might be true if they obtain the best from the human being (add value, in Lean terminology).

When you become Agile, you begin to understand that perfection, if ever achieved, is a matter of evolving deliveries, reinforcing what seems to be adding value to the final product or need, and taking away what seems that has been added initially as a good idea, but proved not to be so effective at the end, providing by this a sense of value even on what looked like an “error”, but if not tested, never proved not valuable.

In Tao, there is no sense of bad and good, as they are understood as complementary: one could not be differenced from each other without the existence of the other one. If one starts to look to the world like that, then one starts to understand that bad is necessary for good, destruction for construction, error for success, etc.

A third concept goes to an idea that is shared among both, Agile and Tao: nothing is permanent and no expectations / attachments should be created because of this. The reality is the master: of course, on an agile project, an objective is defined in order to direct all the effort of the project and the team, but a lot of times, during the execution of the project, new goals and objectives are identified and the project can turn easily towards them if they prove to add value to the solution created for the problem / need.

Since Agile values “Responding to change over Following a plan” in the face of resolving a need or problem, something that seemed to be valuable at a certain point, can be dismissed with no cognitive dissonance due to an attachment to it. Its as natural as dancing: you make one false step, but you recover and keep dancing, as the final goal is to dance.

The same way we analyze tao and agile and their similarities, we could do the opposite exercise: analyze traditional software development methodologies through the eyes of traditional religions. But before I jump into this, I want to clarify that there is no judgement pretended, since in Tao there is no bad or good. Let’s remember that for a taoist other phylosophies or religions are also true and valid, just different. Let’s also remember what’s the buzzword nowadays: Bi-Modal IT, a concept that allows organizations to use both traditional and agile methodologies depending on the case.

Tradicional methodologies (I will refer to them as "waterfall" just to shorten the term) and traditional religions keep similarities too. They state that each one is the only true path, and are based on specifically defined and unbreakable rules (some times called commandments), that if ever broken, are the reason for breakup. What happens at the end with this approach? In my opinion they are not fully able to unveil the real human spirit because people is reacting or “behaving” to the rules just because of the rules, and sometimes away from their inner nature or intention, sometimes just because of the fear of not doing so. In religions you have to comply with the commandments even if you don't agree or see value on some of them; in waterfall - just to mention one example - you write a lot of documents even when you know sometimes they will not map the reality or will become outdated as they go out of the oven.

By doing this, both religions and waterfall end up denying the very core of our human nature that is everything but aimed for perfection at once, but more prone to evolve or become better in time based on the experience. The result for all of this is that people gets tired of being judged / documenting (to use the same example) and they end up living their religions / methodology "half-way" or worst, stating that they follow them, but not doing so. That is the negative power of being rigid, in oposition to the flexibility provided by Agile and Tao.

In traditional software development methodologies change is feared and avoided as the chain reaction backwards can destroy the "all-mighty plan", objectives or designs, even when a lot of them are not completely right, since they were written on stone before they were understood deeply by the natural course of action of resolving them. It's common that an organization comes knocking on the door for a software development company asking for a "solution" that they thought they needed... but guess what? that was not what they needed and they find that out too late and when the investment is gone.

This is due to the fact that they are not IT experts and their perception of the problem is usually not well defined or identified, neither the possible solutions, as they are not completely up-to-date on the trends, emerging technologies or technological paradigms because that's not their field of expertise!!. And usually what happens is that the software development companies rush into coding (because that's what we love to do, coding, our passion) without making a pause to see if that is really the solution needed. Results are that amost 70% of traditional projects fail on time, scope or cost by using traditional methodologies that DENY change.

In my upcoming deliveries, I will be analyzing the Tao Te Ching book teachings from the Agile perspective and you will be astonished to see how much similar they are. Stayed tuned.. ;-)