The Tao of Tester/Programmer

Balancing a Classic Software Duality

In the West, we are very dual. Our opposites tend not to touch or integrate, much less balance. The true, intertwined and balanced nature of duality comes more easily to Eastern cultures than to us. Opposites naturally include and oppose each other in the East. Yin includes some Yang, and vice versa, as captured in the classic Taoist circular image of entwined white and black teardrops.

This balance can be hard for Westerners to grasp, but it helps us to learn balance. An odd example of Yin/Yang balance can be found in healthy programming, balanced with healthy testing.

The Yang of Programming

Yang energy is creative, moving, active, striving, masculine, intense, goal-directed. It is represented by the dark teardrop in the Yin/Yang circle. Ashtanga Yoga is a classic, Eastern Yang activity. Programming is a classic Yang activity too, and in unhealthy software development environments, where programming has no Yin energy, programming is Yang out of balance. It can become thrash, churn, movement without progress, movement with panic, creation without business value, stressful striving, aggressive striving. “Don’t distract me with facts!” might be the battle cry of pure, arrogant, unbalanced Yang programming.

The Yin of Testing

Yin energy is witnessing, curious, investigative, being, still, resting, observing, listening. The white teardrop. It can be directed or undirected — exploratory in an improvisatory way, without making up any stories beforehand. Meditation is a classic Eastern Yin activity. You could say that the Yin of Testing is, in its purest form, perfectly skeptical and empirical, without either positive or negative expectation. In its worst form, the Yin of Testing becomes submissive, overly passive, retreating, denying, disengaged, and dissociated. It retreats and hides.

Balanced Yang/Yin Programming

Healthy programmming embraces its creative power and juice, while reserving some energy and disposition to witness and check its predisposition to not witness, to be biased, to blast across the observable data. TDD is a perfect tool for balancing Yang and Yin in programming. You create a small, observable goal and its criterion for empirical verification; you then engage in just enough creative Yang passionate activity to satisfy that empirical goal. Then you pause in a Yin Testing moment to observe that you have returned to the balance of the green bar. Then you rest further in another Yin Testing moment of dispassionately observing the fact of the mess you made. Then you engage in just enough creative Yang refactoring to restore the balance of Clean Code.

Healthy programming is lots and lots of passionate, creative Yang, with just the right amount of Yin observation and Testing. It is creative engineering and artistic passion balanced with a bit of skeptical, empirical Science. It is the black teardrop with the small white circle at its heart.

Balanced Yin/Yang Testing

Healthy testing embraces the calm, dispassionate, empirical, deeply-concentrating power of witnessing, observing, and noting the truth of reality, without preconception. It delights in defects not merely because it is fun to break things, but also because it is fun to find precise, repeatable, deterministic discoveries of any kind. A bug is just another kind of delightful new discovery that happens not to be desirable by the customer (in most cases!).

Balanced Yin testing begins with the open, empirical, unscripted extemporizing act of manual Exploratory Testing. This demands that ET skills have already been deeply somaticized by the tester, rather like the kata of programming, or like the “forms” of Tai Chi. Before you can deeply explore the behaviors of an application, you must already have internalized the skills of that exploration. I dare say that masterful ET has a meditative, contemplative aspect to it. You allow the application, as it truly is, to you draw you in, without agenda, without story.

And, healthy Yin testing is then balanced by the passionate Yang activity of test automation. Automating regression happy paths and unhappy paths is such a Yang activity. Another balancing Yang activity is courageously sharing results with programmers, and with the team. The best testers, Agile Testers, are powerfully creative in their own right as Yang programmers. But their Yang programming tends to serve their Yin goals of observation, gathering empirical results, witnesssing. Balanced Yin testing: the white teardrop of observation with the small black dot of Yang creation at its heart.

Balanced Testing/Programming: Conversations and Careers

Programmers can and should consider transitioning to periods of at least partial self-identification as testers. Spend 10,000 hours at it. Let your first 10,000 hours be Test-Driving and refactoring Clean Code.

Also consider becoming, for awhile, an Agile Tester. You think you understand every aspect of software testing, and how important all of the kinds of testing are? Rest more fully in the Yin of Agile Testing for a few days, weeks, iterations, or years, and think again. (Also, do not make up stories that this is somehow beneath you, or insufficiently challenging or stimulating, or not worthwhile, unless and until you have tried it in good faith, and found that to be so.)

Testers, on the other hand, should consider mastering much of the inherent craft demanded by healthy professional programming. Spend 10,000 hours at it. Let your first 10,000 hours be finding ways to write beautiful automated tests, especially Storytests. Embrace the Yin and Yang of bringing together small communities of customers, programmers, testers, and others to write Storytests as an excellent Definition of Done.

Also consider becoming, for awhile, an Agile Programmer, or a Software Craftsman. You think you understand all of the craft and technical depth and pure creative striving required to test-drive all manner of production implementations through all manner of technology stacks, with least defects and cleanest code? Strive powerfully in the Yang of Agile Programming and Software Craftsmanship for a few days, weeks, iterations, or years, and think again. (Also, do not make up stories that you cannot do that, unless you have already tried in good faith, and failed.)

It’s Already Happening

Agile Programmers and Agile Testers are already learning to pair on Storytests, to pair on Definitions of Done, to pair on design, to pair on implementation, to pair on testing. Programmers and Testers are already learning to balance their Yang and Yin through good faith conversation, good faith learning, and the softening of old, rigid boundaries, role definitions, and personality types.

Balance is possible between programming and testing, and it may help us to remember and honor our natural inclinations as Programmers and Testers as we work toward that balance. As programmers we are Creators, Engineers, Artists. As testers we are Observers, Skeptics, Research Scientists.

Let it Happen More On Your Team, In Your Career

And one avenue of balance, for the very brave and perhaps very advanced, is to push ourselves past our old internal stories about our inclinations and limitations. Specializing Generalists can shift their specialties occasionally. Creators: I dare you to master Observation. Obvservers: I dare you to master passionate Creation.

In the future, as teams become increasingly agile and healthy, I hope we will see a natural flow back and forth between the communities of those who self-identify as Testers, and those who self-identify as Programmers.

Because balance is better than good. Balance is at the heart of true excellence.

Learning Always Happens: a Gratitude Practice

Pleasant and unpleasant things occur to us. This is a fundamental Buddhist tenet, but also a pretty obvious fact of life. The older you get, typically, the more obvious it grows.

Life is often inconvenient, disappointing, frustrating. On the other end of the pain spectrum, life is sometimes quite painful. It sometimes seems unbearably painful. Eastern thought councils us to learn to evolve the quality of our reaction to unpleasantness of all kind. When we set about to evolve our “equanimity” and poise, the Masters recommend we start with the easy stuff, and work up to the hard stuff. Don’t start with something like losing your foot to the lawnmower, or your spouse having just said the one thing that is always guaranteed to completely send you off the deep end. Your temper is gone in such a case. It’s too late to work on your reaction, most likely.

No, start with things like work situations that are less comfortable or creative or productive than you hope for. I have been doing a lot of that lately. It sounds flip, but I mean it.

One of my recent spins on this is to look back at regular intervals on the lessons I have learned from unanticipated unpleasantness in my recent past. Examples. In 2007, I worked in several situations that seemed, at first and on the surface, quite intractable. How can I get my job done here? How can I make progress? Why don’t these people understand me or accept my message? Blah, blah, blah. Victim-talk.

I look back now and think, My Goodness, I have learned a lot in a year. As always happens, as I always say, Learning Happened. Learning always happens, and in retrospect is so much more golden than I have recognized in the past.

So, this is to say I am grateful for my learning opportunities, past, present, and future. I am grateful for my knowledge, my experience, and also for my ignorance and my mistakes. One friend says that experience is a tough teacher because she gives the test first. Another friend says that good judgment comes from experience, which comes from bad judgment.

So again, thanks. I am grateful for learning at a faster and faster rate. The learning keeps on flowing, and keeps on happening. And most blessedly, I am learning to be more and more grateful for my learning, and for each new day of it. The number of such days is finite for us all, and puts my mostly minor inconveniences in healthy perspective.