Corners are interesting as they are subtle, invisible really. They could be complex with many things that intersect and therefore display an unique behaviour. They may not necessarily be symmetrical at ends, nor be similar to behaviour in the middle.
As a developer focused on solving a problem for typical or generic cases one may not see the interesting extremities. For example we do everything right for a system in normal state, but miss out what happens when it is brought up the first time. This article outlines eight heuristics I discovered when testing a product that we were building, a SaaS platform. The heuristics outlined are based these aspects : Time, Lifecycle, Transformation, Position,Space, Size, Linkages and Limit.
#1 Heuristic based on TIME
The first time when something is used. Thinking from the perspective of time. Doing something on an absolutely fresh system. Creating the first project, registering the first user.Doing the final action, removing an user. First time when a transaction is done on a empty system. Purging a system of content, signifying removal, the end.
#2 Heuristic based on LIFECYCLE
Repetition of system states in terms of cycling through. Starting off, then doing activities and coming to an end. Then restarting and continuing. A workflow that is half done, suspended and then continued to finish. Finish by abandoning it or ending with to a logical closure.
#3 Heuristic based on TRANSFORMATION
Changing something like say formats, views an act of transformation. In the case of UI, this could be relate to responsiveness like reaching the extremities of views? In case of content transformation, reaching the extremities of too large or too small or null content being transformed.
#4 Heuristic based on POSITION
Looking for interesting behavior in case of the elements that are right at start or end. What happens when elements in the middle move to either ends?
#5 Heuristic based on SPACE
The nation of space as when contents close are far, shrunk or expanded, especially when at extremities of too close or distant, too small or large. An example of responsive UI, when screen is shrunk or expanded.
#6 Heuristic based on SIZE
The notion of volume, size when some is really small or extraordinary huge. Say uploading super large files, or really nothing or rally small ones. In case of display, showing tiny/large content/diagram, maybe via zoom?
#7 Heuristic based on LINKAGES
Using notion of linkages like 1-1, 1-N, N-N or thinking in terms of increasing chain length like 1-1-1, N-1-N. Could linkage integrity be violated when N=0 or when chain is long? The notion of propagation especially in longer chains with differential N.
#8 Heuristic based on LIMIT
The most commonly understood that of min/max, the typical extremities of value given an definitive range.
When you are building large systems that transform other’s business, stay defensive. Don’t assume that every action will be done, be it by a human or by another systems. Some of these can break the chain and the business.
Last Friday the SmartQA site went into a blink, inaccessible, socially distanced to use the modern terminology! A story of how some simple choices made by software developers while implementing an automated workflow can bring down a business, especially when humans in support decide to become inaccessible.
Let me tell you the story. The site smartqa.org became inaccessible last Friday and after a few minutes, I discovered that the site was not down, but unreachable. That is when my tryst with support started. Telephone, chat, emails were unanswered and after five days of relentless pursuit it was sorted without the help from support. So, what was the issue and what can we learn from this?
Well, the issue seemed to be that the domain expired on Friday despite it being renewed many weeks ago. The renewal process seems to have been botched up. A process that is completely automated, without any human intervention. What went wrong? After five days of being at it, I was given to understand that current domain registrar has possibly shifted his business partnership of buying domains to a different bulk domain provider. This required the new bulk domain provider to authenticate every domain owner with the current registrar. So an email was sent by them to each domain owner (I guess, as I got one) which was supposed to be responded to by a certain date. In my case, the email seemed to have found its way into the ‘read’ folder somehow and therefore I did not respond by the given date. So, on the date of domain expiry, the site went blink. All because of ONE email that I did not respond to! The email that somehow did not show up in my inbox. This email was never resent when response was not received. So, I as a customer never knew about this and my business stopped.
All because of ONE EMAIL THAT BROKE THE WORKFLOW of automated renewal! Know what is the cost of renewal? About Rs 1000 ($12)! Just imagine if this has been an online business. $12 shuts down the business! All because of a developer making a choice, of assuming that a critical action in an automated workflow is done. Never contemplating what if it is not done, how can I ensure that it is indeed done? In these times with businesses becoming fully digital, these kind of simple choices can break a business. In my case, I pursued the problem relentlessly, by analysing, by talking to a lot of people and finally a good samaritan helped me nail the problem and then poof, the solution happened. We all know that a problem is a problem, until the solution happens. And in most cases, the solution is simple! On a lighter note with support going into quarantine, the site socially distanced, I went into the ICU 🙂 A happy Covid19 story this turned out to be at the end.
“A typical accident takes seven consecutive errors” quoted Malcolm Gladwell in his book “The Outliers”. In the chapter on “The theory of plane crashes”, he analyses airplane disasters where he says that it is a series of small errors that results in a catastrophe. The other example he quotes is the famous accident – “Three Mile Island” (nuclear station disaster in 1979). You may want to read a nice article that I wrote on this <Seven consecutive errors = A Catastrophe>.
When you are building large systems that transform other’s business, stay defensive. Don’t assume that every action will be done, be it by a human or by another systems. Some of these can break the chain and the business. Have a great day.
Intelligent testing is a brilliant set of opposites. Is it finding more bugs or enabling brilliant code from start? Is it about frequent and continuous evaluation or being sensitive and pre-empting issues? Is it an act of doing or a state of mind? In this article I relate intelligent testing to Yin & Yang, where the tension of opposites keeps one in the perfect state of balance enabling one to deliver the very best.
As we mature we see more opposites. Find more bugs or prevent by being sensitive? Automate more or use human smartness to do less? Continuous frequent checks or smart minimal tests? Things that seem contrary, creating tension of choice. It is really not a tussle, it is a perfect state of balance.
What is Yin & Yang? Well it is the really opposites that exist.
The FOUR main aspects of Yin & Yang are :
Let us switch to software testing now. What is Yin & Yang in the context of UNDERSTANDING a SUT?
What is Yin & Yang in the context of DESIGNING test cases?
What is Yin & Yang in the context of EVALUATING the SUT?
What is Yin & Yang in the PROCESS of evaluation ?
What is Yin & Yang in the context of the OBJECTIVE of testing?
Philosophically Zero = Infinity Nothing is everything.
The ability to be empty, to be unattached, to be in the moment, no past or future, mindful and observant enables one to deliver great outcomes.
Yin and Yang are not opposing forces, it is the tension to keep you in a perfectly relaxed state.
Summary High Performance QA is about enabling the path to brilliant code, of doing lessand accomplishing more. High performance occurs when you articulate crisply, think clearly, organise well & execute nimbly. It requires a high performance mindset that is strong, clear, agile and value oriented.
TWELVE interesting and counter intuitive perspectives to High Performance QA , beyond the typical beaten track of process, technology and skills. The perspectives are organised into FOUR themes of LANGUAGE, THINKING, STRUCTURE & DOING.
CLICK HERE to go to the special page on High Performance QA. A summary of each of these articles is listed below under these FOUR themes.
Theme #1: LANGUAGE – “the EXPRESSION of problem/solution” High performance communication to exploit power of expression in ’what-we-do’, ‘how-we-do’, ‘how-well-we-have-done’.
(1)High performance thinking using the power of language Here I outline how various styles of writing, various sentence constructs & sentence types play a key role in the activities we do, as a producer of brilliant code from the QA angle. CLICK HERE to read the full article.
(2)Three communication approaches to brilliant clarity Here I outline three communication approaches of storytelling(descriptive), rules/criteria(prescriptive) and visual that play a key role in activities we do as a producer of brilliant code, from QA angle. CLICK HERE to read the full article.
(3) To express well, choose the right medium Here I explore the role of medium to expressing a thought/idea. A frictionless paper medium is very suited for early stage ideas whilst a strict template/tool is more suited for capturing ideas fully and clearly. CLICK HERE to read the full article.
Theme #2: THINKING – “the THINKING to solution” High performance thinking is goal focussed, user centric, spatial, approximate, immersive and contextual
(4) Left brain thinking to building great code In this article I examine how a logical ‘left brained’ thinking plays a key role in the activities we do, as a producer of brilliant code from the QA angle. CLICK HERE to read the full article.
(5) It takes right brain thinking to go beyond the left Here I examine how a creative ‘right brained’ thinking enables us to go beyond what we do with logical thinking to discover new paths or discard potential ineffective paths of application to improve outcomes to deliver brilliant code.CLICK HERE to read the full article.
(6) Ultimate power is in the “empty” middle In this article I examine the infinite power that we have, which is neither in the left or right brained thinking but in the space of middle, the silence when one is absolutely mindful. CLICK HERE to read the full article.
Theme #3: STRUCTURE- “the STRUCTURE of elements” High performance structure is about great arrangement, to connect better
(7) The Power of Geometry In this article I outline how structure(or organisation) of elements plays a key to doing more with less. CLICK HERE to read the full article.
(8) The 4W to structuring a problem well Here I examine how a great arrangement of various elements of system-under-test enables one to see the problem clearly in terms of facts and questions and set the stage for efficient evaluation.CLICK HERE to read the full article.
(9) 10 ways to smartly organise test assets In this article I examine how organisation of test assets (test scenarios and cases) plays a significant role in the effectiveness and efficiency of testing. CLICK HERE to read the full article.
Theme #4 DOING – “the act of DOING” High performance execution is about doing less, doing early , staying engaged
(10) Doing less and accomplishing more Here I analyse as to what it takes to do less and accomplish more by not doing at all, by doing early, by doing what is only necessary and finally delegating the act of doing to tools. CLICK HERE to read the full article.
(11) Move rapidly by doing less In thisarticle I outline how the act of execution can also be speeded up by use of a smart checklist, which provides a significant intellectual leverage to how we do. CLICK HERE to read the full article.
(12) Stay engaged and do brilliantly In this article I outline how staying engaged by being mindful can significantly enhance session based testing in an ‘immersive’ manner, and introducing “Immersive Session Testing”. CLICK HERE to read the full article.
All these are laid out beautifully in an exclusive page on High Performance QA. CLICK HERE to see go there.
Want to be a successful leader? Let animals be your guide. Assemble varied skills to build a great team. Let good techniques and methodical action unleash the power. Watch progress and steer continuously. Be confident. Make decisions. Enable each individual to unleash their full potential. Finally enjoy the journey.
Many years ago, we went on a holiday to Masai Mara, a lovely 1510 square km game reserve in Kenya. Here the animals are free in their natural habitat whilst humans are inside open top jeeps. Seeing the Big-5 (Lion, Leopard, Rhino, Elephant and Wildebeest) and others in close quarters was just wonderful. Observing their behaviour, mannerisms at close quarters was not only enjoyable, but educational. Here is what I learnt about leadership from these wonderful creatures.
A lion is busy eating a fresh kill of wildebeest whilst a cackle of hyenas sit a little distance away patiently waiting for the lion to finish. Once the lion is satiated and moves away to rest, the hungry Hyenas will finish the rest. Their teeth are so powerful that they can crush the bones. At another place a wake of vultures are fighting fiercely to eat the remains of a carcass killed by a lioness. In nature, nothing is left to waste , for each animal is specialised in its contribution to the nature’s eco-system cycle. A wildebeest is a big animal and it is a shame to waste anything at all. The Hyenas don’t mess with the lion nor do the vultures with lioness or with any other animals.
Leadership lesson: It takes multiple skills to get a job done well. Each facet of work requires varied intelligence and power; understanding this and abiding your time patiently is key to being successful. So in your team, who is the Lion(ess), Hyena, Vulture…? Each one of them is important, there is nothing superior or inferior.
A Leopard had dragged up a young waterbuck up the tree, suspended it precisely on a branch with body resting on branch and legs hanging down. It then went about methodically tearing up the rear with its canines. Though gruesome and sad, it was interesting to see the leopard periodically adjusting the dead animal on the branch as it progressed methodically with its job of eating.
Leadership lesson: The Leopard is a very powerful animal, with its sheer speed and power it can snare any animal. To ultimately accomplish its goal of satisfying its hunger, it must secure the dead animal, which it does by dragging the animal up the tree and then eating it by doing it methodically, tearing from the rear. What do we learn this? In addition to having a powerful team, it is necessary to employ powerful techniques and great processes to ensure that the job is well done. Power is best extracted by using great techniques and then going about it systematically.
A herd of giraffes are moving majestically, absolutely elegant movements as they peacefully chomp on leaves off a tree top. Giraffe by virtue of its height and its distinctive coat is indeed a majestic animal. They are not shy at all. One of them walked to our vehicle confidently, stopped, looked at us without any hint of fear and then strutted away. The movements were peaceful and seemingly unhurried. On a different note, it is interesting how a giraffe walks- Both the legs on one side go forward and then the next side go forward, very unlike the other animals where front and rear are in sync.
Leadership lesson: The majestic appearance oozing confidence, fearless attitude, grace and elegance are traits that make a leader successful. And the team will do anything to ensure that the leader stands tall always.
The vast African Savannah is filled with Zebras, beautiful they are with a shiny coat and beautiful stripes of black and white. They are an easy prey for the lions. Their excellent sense of sight and hearing coupled with their acute sense of smell enables them to detect danger which they nimbly respond to, by quickly running away. Their legs are so strong that a just a kick can kill the animal.
Leadership lesson : To survive/course-correct, it requires one to continuously measure (aka smell/watch) and respond nimbly to steer to safe places. Not only is sufficient to know the danger, but it is imperative to have enough power to move away quickly.
Hippopotamus relaxing in the water seem to be the most lethargic animals. They seem to spend the entire day relaxing in the pool when not eating grass. But do you know that Hippos are the second largest killers of humans? They are not carnivores, they attack only to protect. Their strong bite can kill humans.
Leadership lesson : Each one of us possess enormous power.It is dormant most of the time, the key is unleashing it. A great leader should be able to spot this in others and enable them to unleash it.
These animals were the most interesting. Belonging to the same family of pigs, these herbivores were constantly running, seemingly for the sheer joy of it. Enjoying themselves just running across the vast expanse. They stop suddenly only to recommence in a short while. It was sheer joy to see these “pigs with tusks” run despite no threats from other animals.
Leadership lesson: Explore. Be curious. Enjoy. To unleash your full potential, you need to be unbounded and enjoy the flow.
Masai Mara is famous for the crossing where over a million wildebeest cross over from Tanzania to Kenya and vice versa. Our trip was close to the end of ‘crossing season’. Keen to see the action up close, we went to the river Mara where the crossing occurs. And there it was, a group of wildebeests on the other side of river deciding on what to do – ‘cross or not to cross’. Upstream, nearly a kilometre ahead, a crocodile was basking on the rock while a couple of them were gently floating on water, just their tops visible on the surface, a nemesis for these crossing animals.
The wildebeests are still trying to decide, one of them pushes the other into the river, but that guy does not go any further. In fact he turns back. Then they stand still for a few minutes, one of them goes into the water and then turns back. Suddenly some of them run into the water with some running on the banks, coming to a dead stop after some time. They do nothing, each of them just stand still, waiting for the other to decide. None of them take the next step. One of them on bank is fed up and decides that he has had enough of this indecision and heads back to land. He climbs the mud embankment into the high land as he climbs, a few follow suit. One by one, others follow suit. The decision has been made, they are not going to cross now. The animals that were standstill a moment ago due to indecision are rapidly moving away following the first one to the high land.
Leadership lesson: We all suffer from indecision and do possess herd mentality. A good leader takes decision and confidently goes ahead and the team follows. Not all decisions may indeed be right, but taking a decision is indeed superior to not doing anything.
I hope you enjoyed the educational tour of the Savannah! Want to be a successful leader? Let animals be your guide.
Assemble varied skills to build a great team. Let good techniques and methodical action unleash the power. Watch progress and steer continuously. Be confident. Make decisions. Enable each individual to unleash their full potential. And enjoy the journey.
Why does a complex UI faze a tester? Is it possibly the inability to see beyond the UI, the inability to question beyond the obvious? Too many test cases, the overwhelming feeling that scientific modelling & design cannot be practised due to time constraints are some of the issues. This article outlines “How to decompose, question & analyse” to design smartly using a complex UI entity as an example.
During a recent consulting engagement, I noticed that a tester came up with a complicated decision table to represent the behavior model. On closer examination I noticed that he had arrived at behavioural conditions by examining the complex UI visually, rather than digging deeper to understand the behaviour. This is not the first time I have seen this, I have observed the challenge with behaviour modelling many times in numerous companies.
So “why does a complex UI faze a tester?” It is possibly the inability to see beyond the UI, the inability to question beyond the obvious. The result – too many test cases, and the overwhelming feeling that scientific modelling & design cannot be practised due to time constraints. Well this is the fun part of testing ‘the intellectual one’, where one decomposes an entity through a process of rational analysis and utter curiosity by thinking better to test smarter.
A rich UI typically has large number of data fields, some dependent on others or system settings, possibly in multiple tabbed dialogs, and doing the same thing in different screens i.e. a feature available in multiple places. This seems to pose difficulty in (1) “where-to-start” to model the behaviour (2) mixing test cases related to fields, UI and behaviour, business flow & environment dependencies.
Let us look a problem to see how we simplify testing of a rich UI using an airline application, done in four screens, each of one which seems complex. (From http://awery.net/pages/software.html#page-screenshots)
1.Setting up a flight schedule for a flight
2. Setting the route information -“start location details”
3. Setting up the route information – “permissions”
3. Setting up the route information – “cargo details”
4. Setting up the route information – “setting up crew”
What do we see in the rich UI?
Let us analyse… 1. Firstly we can see data fields – independent and dependant one.
2. Secondly we see feature/function (some of them a mini feature) and a business flow that is really a combination of many features.
So, this single rich UI screen consists of a set of features, and enables a complex flow to be done. How do we test this?
Let us look at good design principles “COHESION & COUPLING “. Good design of software is high cohesion and loose coupling. Grouping similar actions & data (cohesion) keeping minimal dependencies between them (coupling).
How is this useful in TEST DESIGN for rich UI?
Let us dig in…
So, what have we done to tackle challenges of complex UI?
Well, we have: 1. DECOUPLED complex UI into COHESIVE entities : FIELD, FEATURE, FLOW & UI 2. Applied behavior driven approach for feature test design (decision table) 3. Combined outputs (variations) optimally to test the FLOW (variations table) 4. Used checklist as needed to leverage prior design
In a rich UI, one tends to see HOW-to-do, whereas if it was UI-less, one seems to focus on “WHAT-is-to-be-done. The latter is important for a tester to figure out ‘WHAT-ifs’.
Good testing is a great combination of intellect, techniques, process and heuristics. What does it take to do brilliant testing ? It requires one to be immersed in the act, be focussed yet unbounded, be keenly observant but non-judgemental, with outcome that are beautiful, the activity so joyful that time stops. A state of flow. What does it take to get there?
As engineers we use good techniques, tools, process and intellect to do things well. So how can we do far better, that is brilliantly? Having possibly exhausted all things “external”, in terms of tools, techniques, process and intellect, it is time we considered the huge “internal” potential that we all possess.
It is about going beyond the intellectual mind, deeper into the sub-conscious to harness the infinite potential. A good start for this would be get into a state of ‘flow’.
So, what is FLOW? Flow is the state when you are immersed in what you are doing, where you are totally mindful. It is when all energies are harnessed fluidly to do brilliant work without tiring or trying hard, becoming an observer, fine tuning actions with extreme agility, when time seems frozen. It is when you accomplish a lot, doing work effortlessly and experiencing absolute joy.
So how can we get into the state of flow? When multiple sensory excitations converge harmoniously, there is a good chance of entering that state of flow. What does that mean? It is engaging the various senses well – colours, picture, visual test, mind maps for the eyes, using pen/pencil, paper for the touch, and maybe background music or talking to oneself for ‘engaged hearing’. Note the keyword is ‘harmonious’.
When we stimulate our creative side with interesting visuals, tactile and possibly sound, it activates us to get into an ‘engaged state, a state of mindfulness.
Exploit visual thinking by using visual text , sketch maps, mind maps to : (1) enable deeper understand the system under test (2) to sketch test strategy (3) jot down test ideas (4) note down observations, questions, suggestions (5) list scenarios (6) record issues.
Exploit the tactile sense by using pen/pencil on paper or finger/stylus on tablet instead of keyboard. The objective is to be write/draw freely rather than be constrained by the keyboard.
If you want to engage your auditory sense, quietly talking to yourself, melodious quiet whistling or if you are music person, then a suitable background song played could enable you to get into the flow.
To ensure that we can perform in the state of peak performance being in a FLOW, it is imperative that we do testing in short sessions. A session may be anywhere between 45-90 minutes. The key is to stay focussed, setup an objective at the start of session and then engage as stated earlier to get into a state of FLOW.
How does this help? When we are fully engaged, in a state of FLOW, it is no more about just left brain centred logical/deductive thinking, or the creative right. It is an expansive multi dimensional thinking brought about by the harmonious stimuli enabling one to become a keen observer and absorb deeply and rapidly. This is when we exploit the infinite power of what we possess, delving into the sub-conscious which is much larger that conscious mind. Interesting questions pop up, ideas germinate rapidly, actions are done quickly, smallest observations captured resulting in brilliant effective testing.
In closing… Test automation allows us to do more, and machine intelligence to do better. It is now necessary for us to delve deeper so that we complement the machine rather than compete, enabling us to be super efficient and effective by being smarter. Get into the state of flow to harness the power of sub-conscious to do brilliant testing.
Summary Smartness is a brilliant combination of knowledge and skill. Skill is acquired by intense practice. Intense practice happens when you have good habits. In this article I look at SEVEN habits that are key to SmartQA.
Habit #1 Visualise well, see the big picture of the system. Who uses, where, when, using what interface. See the big picture of how it is structured/architected, visualise the flow of control and data and the technologies used(aka tech stack). Appreciate the environments it should run on the dependencies of external systems and changes/modifications done.
Habit #2 Question well. Question to know. Question to know what you do not know. Ask about users and their expectations ask about the how it is constructed, ask about conditions a behaviour should satisfy. Ask, ask… The limit to questioning is unbounded. Note you may not get all the answers, the key is to question.
Habit #3 Prove with facts. Show proof of adequacy of tests, hypothesise potential issues and prove that they may be detected. Understand changes done and prove why an entity(ies) need to be regressed, after all you do not want to more that needed.
Habit #4 Iterate continuously. SmartQA is about experimenting, exploration. It is about iterating with minor changes to understand better, to observe better. Chew well to digest.
Habit #5 Unlearn. Revise what you know. Understanding is not about knowing more, it is also discarding what you know. Chew to digest and spit out the rest.
Habit #6 Empathise. Put yourself in others’ shoes and feel them. Get inside them to understand what they expect, what they will dislike, their constraints, what value they expect of the system. SmartQA is not testing the system technically, it is about delivering value.
Habit #7 Simplify the problem solving. End users use systems to solve their problems. Great software solve them well. Good testing is about ensuring systems do just enough i.e. simply.
Inspired by how the world is handling Covid19, this article as a SlideShare lists actions taken and criteria met to contain the pandemic and correlate this to how we can deliver clean code for large scale software systems. This article focuses on the process flow and criteria for delivering clean code.
Corona virus aka COVID19 is a global talking point now. What is being done to contain the COVID19? Well, there are THREE actions in terms of Prevention, Detection, Containment being aggressively pursued. Three targets of young children, old people and sick persons are the most vulnerable as of now. In this article we take a look at the actions being taken to contain the pandemic and relate to what to do deliver clean code.
Corona virus aka COVID19 is a global talking point now. A pandemic now, it has shaken the entire population of the world, busted the business and the world economy. The major stock markets are taking a massive beating driven by the sentiment that there is no medicine for this as of now.
Interestingly the suggestions posed by experts are pretty basic stuff related to good hygiene and this seems to be the only way to go given that there is no medicine as of now. What can we learn from COVID19 to deliver clean code?
So what is being done to contain the COVID19? Well, there are THREE actions in terms of Prevention, Detection, Containment being aggressively pursued. Three targets of young children, old people and sick persons are the most vulnerable as of now.
What is being done in terms of PREVENTION that we can relate to code?
Cover when you sneeze/cough => USE ASSERTS, HANDLE EXCEPTIONS
Wash hands frequently => SIMPLIFY, REFACTOR
Don’t touch surfaces => STRIVE FOR LOW COUPLING
What is being done in terms of DETECTION that we can relate
for fever => DO BASIC TESTS
for other symptoms => USE SMART
CHECKLISTS, DO DETAILED TESTS
if contact with affected => DO STATIC CODE ANALYSIS
origin on arrival (for travellers) => WRITE DEFENSIVE CODE
travel history => ANALYSE CODE COVERAGE
What is being done in terms of CONTAINMENT that we can relate