Thinking as a train of dual transitions

Y. B. Karasik,
Thoughts Guiding Systems Corp.,
Ottawa, Canada.

Recently I was assigned to fix several bugs in the software of a play-station that plays live video of a roulette in casino and allows one to play roulette remotely. One of the problems was reported as follows: "if one double clicks on the video of the roulette the video freezes."

I asked the QA (Quality Assurance) man who reported the bug why one needs to click on the video. So that to expand the video to the full-screen was his answer. By double clicking on the partial-screen video it expands to the full-screen and vise versa.

I tried to reproduce the bug but could not and returned to QA.
- You have to click right after you clicked "Play", - they said, - at the very moment that video appears.

I returned to my desk and after clicking "Play" button quickly moved mouse cursor to the area where video was anticipated to appear and clicked there. My click coincided with the very moment that video appeared and it indeed appeared frozen. In this way I was able to reproduce the problem and also refine its description. Now I had to find its cause and fix it.

- Why would clicking on the video at the moment when it is about to appear freezes it ? - I would ask myself, - How does this moment differ from the moments when video appeared already ?

I examined the code and found that after clicking "Play" the following line was executed:


There were no traps in the code for the subsequent clicks on the video. So, analysis of the code did not answer my question of how does the first moment when player appears differ from the others.

But then it entered my mind that instead of searching for answer to this question (which may never be found) I better forbid clicking on video at the very moment that it appears.

- How could I do that ? - I thought, - and decided to forbid clicking at all, not on the video only.

Forbidding clicks regardless of where cursor is located means disabling mouse clicks. I knew how to do that. I only needed to know the moment when I have to disable clicks. This moment was the moment when video starts to appear.

- How could I know this moment ? - I was wondering.

In search for answer to this question I started examining all fields and methods of class "player". Very soon I noticed such a method as isPlaying(), which returned true if player started playing and false otherwise. I conjectured that the moment when video appears is the moment when isPlaying() turns true from false.

Based on this conjecture, I inserted a piece of code that disabled mouse clicks right before the line


and added the following code after it:


This solved the problem.

In retrospect my train of thoughts was the sequence of the following problem transformations:

Find why video freezes when is clicked upon when it starts and eliminate the cause

Find the moment when video starts and disable clicking after "Play" is pressed until that moment.

Find a sign/flag that changes its value when video starts and disable clicking after "Play" is pressed until the flags clears.

Most real life problems are not solved as stated but first transformed. Although TRIZ has some techniques of problem transformations the emphasis is laid upon solving the problems as stated. TRIZ does not have techniques of significant or radical problem transformations as a means of their solving. I started collecting such techniques back in the 1970s. The above example can be generalized as follows:

  1. a) Substitute search for "Why ?" by search for "When ?"
  2. b) Substitute fixing the hidden effect that causes the problem by disabling its trigger
  3. c) Substitute finding the moment when trigger has to be disabled by finding an indicator of when trigger has to be disabled
All these transformations are transitions from one side of a duality to the other side. "Why ?" is dual to "When ?". Effect is dual to its trigger. The mark in time is dual to mark in space (indicator/flag).

Generally, the thinking process is the train of such dual transitions.