SmartQA Community

TEN suggestions for SmartQA

T Ashok @ash_thiru  on Twitter

Summary
SmartQA is a beautiful combination of thinking styles, a mindset of brilliance and minimalism,  tech prowess, heightened clarity and  great design and meaningful pauses, outlined as ten suggestions in this article.


#1 Embrace multiple thinking styles
Inculcate the deductive ability of a mathematician, creativity of an artist, mind of an engineer, value perception of a businessman, technical savviness, empathy, doggedness and nimbleness.


#2 Have a mindset of brilliant engineering
Step into end user’s shoes, architect/design robustly, inject code to aid testability, strive to test minimally, do test related tasks lightweight.


#3 Analyse well, exploit tools for doing
Much like the skill of a doctor to diagnose with exploiting the machines in the process. “Doing SmartQA”s a brilliant combination of “human powered and machine assisted” . The WHAT to-do is human while HOW-to-do is powered by machine/tools.


#4 Do minimally
Strive to prevent issues, embed testability, review code carefully, use smart checklists, write minimally, regress intelligently.


#5 See better, cover more, test less
Continuously see and assess product from multiple views – USERS, ATTRIBUTES, ENVIRONMENT, CODE, ENTITIES


#6 Pause to speed up
Periodically pause and analyse to be sure that you are staying on the right track, reflect on outcomes to ensure you are doing it right and efficiently.


#7 View system from multiple angles
View the system from internal, external, regulatory/compliance, operations, maintenance and release like code structure, architecture, technology, terms of behaviour, end users, environment, usage, standards.


#8 Be sensitive and aware
Be sensitive and aware to issues you encounter and potential causes of issues, after all issues creep in due to untold expectation, accidental omission, quiet assumptions, incorrect implementation,inappropriate modifications,interesting side effects ,deliberate abuse , and innovative usage.
Sharpen your senses  to smell better!


#9  Design for robustness 
Don’t just test, design system robustly. Codein firewallsto be disaffected by inputs, configuration/settings, resources or dependent code.


#10 Design for testability
Hook in code to be able to inject inputs to stimulate, check status, create traces/logs  to debug/check-for-correctness, even embed ‘self-test code’.

You may want to read a detailed version of these in these two articles FIVE thoughts on ‘Doing SmartQA’and FIVE *MORE* thoughts on ‘Doing SmartQA’.


8 things I do to solve problems creatively

T Ashok @ash_thiru on Twitter

Summary
Over the years there are a few things that I do consistently to solve problems technical or business. The process is magical, to see the larva of an idea become a beautiful butterfly, the solution. This article outlines this as eight things I do as a collection of posters with crisp text.


Explore problem by puttering around, to understand it better,
to try out mini  experiments of potential solutions to germinate ideas.
The path to solving a problem is never straight line.
Focus, meander, move continuously,
observe to form a good mental picture.
After all, great clarity is key to brilliant problem solving.

As you explore, picturise the various facets of problem and
various solution bits as doodles, mind maps, or diagrams.
Be non-linear, use colours to enhance stimulation of thoughts.

Experiment with the problem,
see if you can spot similarities to prior problems,
connect to get a better handle to understand
and vigorously pursue possibilities.

As you explore,experiment,
jot down interesting observations,
ideas, solution possibilities.
Be terse, so that you are
not distracted from what you doing.
After all, quick notes help in assimilating better
and jotting down quick ideas as they come by.

Describing the problem, explaining ideas,
solutions to a willing listener is something I do every time.
It clarifies my thoughts,
enables me to identify solutions that have been dogging me.
And this is just me explaining,
not including suggestions and more ideas
that I get from the listener.

Sometimes when mind is filled with information,
struggling to process, clueless about coming with ideas, solutions,
I stop whatever I am doing, empty my mind 
and in the utter calm, ideas/solutions fly in gently.

At times when it has been frustrating
to see nothing emerging to solve the problem,
I have found it wise to discard the pursuit
for solution and do something else.
Deflect my mind and engage in something else .
And after some time, suddenly ideas flash.

Once an idea to a solution presents itself, I work feverishly on it.
Implementing, refining, continually polishing by working feverishly.
Totally immersed, all senses absolutely tuned to the act of implementation.
Magical it is to see a larva of the idea become the beautiful butterfly of a solution.


Efficiency -> Productivity -> Creativity

T Ashok @ash_thiru  on Twitter

Summary

Efficiency is a given now , high productivity aided by intelligent systems will become a norm, so what is our role?  In this age of automated & continuous testing, efficiency gains are given and productivity is on the increase. In this era of AI systems, it is time we shift from productivity to creativity. 


Over the years there has been an interesting shift in how we engineer software. Starting with emphasis on process systems in the 90s to ensure consistency and repeatability, we moved on to enhancing efficiencies with tools and Agile processes. Now the focus has shifted to productivity and value by fostering re-use(components, libraries, patterns, frameworks etc), cross-functional teams and more recently, using AI systems.

Efficiency is a given now, high productivity aided by intelligent systems will become a norm, so what is our role? The future is about creativity, a lot of people say. 

In testing with extreme focus on automated & continuous testing, efficiency gains are given and productivity is on the increase. With systems built using multiple frameworks, deployed in various environments, with high business criticality, high expectations of users, the demand of future demands tech savviness and serious creativity – ‘SmartQA , that implies how to get work done efficiently with value focus driven from creative angle’. 

Here is a short summary from two interesting articles on the Efficiency -> Productivity -> Creativity shift.

Focus on productivity, not efficiency

In the article Focus on productivity, not efficiency   Aytekin Tank says Ford reduced the manufacturing time of car from 12 hours to 2.5 hours by improving efficiency, breaking the company’s Model T automobile assembly into 84 distinct steps, with a worker specialising in a task and using power-driven machinery to do the work.

The tide changed in 2015 from being focused on productivity over efficiency. Efficiency is about doing more with less whereas productivity is about doing more with the same.

He then shares four tips on how to lead an organisation with productivity:

1. Team productivity > individual efficiency – Cross-functional teams work on one project at a time.
2. Get out of the way – Stop interrupting  the workflow of team members with meetings that don’t necessarily require their presence.
3. Maximize your MVPs – Do not box talented individuals placed in organizational roles that limit their effectiveness.
4. Lose the “more is better” mentality – Focus on impact not staying busy

Creativity is the new productivity

In the age of A.I and machine learning, just being more productive won’t cut it. The future belongs to the creatives says Scott Belsky in the article Creativity Is the New Productivity.

In his picture of Human Productivity Parabola , he says we have now passed the point — call it the “Productivity-Creativity Inversion” — where machines (algorithms, robots, etc.) have become a better investment for future productivity gains than humans. At this point, we as humans are better off spending our energy on creativity than on productivity.

From Creativity Is the New Productivity
https://marker.medium.com/creativity-is-the-new-productivity-d287d6ad7533

Productivity, previously scarce and valuable, is now abundant and commoditized, and hence we need to creativity, a truly scarce resource whose value is on the rise, he says. He depicts this as a picture consisting of three phases – The Era of Productivity Scarcity, The Era of Productivity Abundance, and The Era of Creativity.

From Creativity Is the New Productivity
https://marker.medium.com/creativity-is-the-new-productivity-d287d6ad7533

He continues on to state that AI will liberate creativity, by allowing machines to take over the mundane tasks, enabling us to be more creative.


39 tips to being productive – Do SmartQA

In an era where we are obsessed with productivity, it is not about doing more, of being busy that is deemed as high productivity. In fact it is the converse, of being smart, of doing less and accomplishing more.

Software tools help in increasing productivity by allowing us to do faster, cheaper and better. But the most powerful tool “the human intellect” can help us do lesser ad coupled with tools of speed, productivity scales geometrically. In these times of AI, it is necessary to exploit HI (Human Intelligence) to do stuff beyond intelligent machines to deliver a higher value.

Here are 39 tips to being productive, in the article “39 tips to being productive – Do SmartQA“.

Shift Right to Shift Left “Being creative”

T Ashok, @ash_thiru on Twitter

Summary

With machines become more intelligent enabled by AI, it is time we focus on creativity to think differently and exploit machines for its intelligence.
A focus in shifting to using right brain more will certainly help in the goal to “Shift Left” – that of prevention or doing less.
Good testing demands a great logical ability to dissect, decompose, analyse, synthesize, correlate, question, hypothesise, experiment, ascertain and make appropriate choices. It is surely a left brain activity. And tools take the outputs of these activities in becoming scripts to be used in an unattended mechanistic manner to reap significant benefits.


Having exploited the logical abilities and the technology to do well and faster, what next?

Testing is not just about finding issues, it would be valuable if this can help prevent issues or find it earlier before issues fan out. This is what we call as Shift Left, the ability to move left-ward in the software dev cycle to find earlier, ideally prevent. Today automation is seen as an enabler here too with the process, forcing one to think and come with scenarios/scripts before code commences or very immediately after code so that whatever is coded is validated. Given that tools are available in plenty, does not imply they have to be used every time, as it takes effort to script and maintain it.

Minimalism and simplicity are popular today, these can help in doing less by heightening sensitivity to aid in prevention and leveraging existing assets. Being creative enables sensitivity, the ability to not be pre-conditioned, to be random, to see beyond the visible and to come up with interesting possibilities. We know that covering everything from all angles seems impossible, certainly costly in terms of time, effort and money. Yes, we do resolve to use the logical ability to analyse risky areas and appropriately channel our energies.

The fertile right brain can cut through the chasm rapidly and enable significant benefits beyond the logical right brain. What does it take to cultivate a fertile right brain? What are the ingredients to fertility?

  1. Constraints – Setting up constraints enables creativity. When we are faced with pressure, we find means to do less, do quick and do well. It is like the survival instinct kicking in. Testing in short sessions helps in here.
  2. Write less – Writing long sentences as part of note-taking or worse still using software to document outcomes distracts you from exploiting the full power of creativity as we become logical in forming sentences and ensuring its correctness. Writing tersely in short phrases. Colours – Stimulate the visual senses too. Use colour sheets, pens, pencils, highlighters. Go beyond the black and white.
  3. Be non-linear – Sketch, mind-map, draw to express. Let not the act of writing be left-right & top-bottom deaden your senses. Sharpen creativity. After all minimalism is a constraint forcing us to go beyond to express sharp and crisp.
  4. Plan, yet stray – Before commencing a session, draw up a quick plan as to what you want to accomplish. As you go about the work, stray when you find something interesting, explore and improve understanding. Be sensitive to the clock though.
  5. Flow –  Enjoying the work enables one to stay immersed in the work, and that is where time stops, a state of being in the ‘flow’. This is when the creative side is most fertile. Sharp and observant, super efficient, light and nimble a state when the work and the worker become one.
  6. Favour paper – During a session, to take notes, to jot down observations/questions, pen down to-do-actions, adopt a lightweight method. Using paper to do this is the easiest, also using Post-It notes, white board is super light, enabling one to stay immersed in the work and not be bothered about the act of writing/drawing. Using a heavy weight word-processor or a spreadsheet IMHO is a no-no, as it is seriously high friction. If you prefer software, use a light weight note taking software.

Testing is not a mundane job of evaluation bereft of fun. It is not a clinical act of evaluation that is done by machines. Our job is not just to write scripts and feed these machines.

It is true that in these times, the focus is on speed, on the act of evaluation. Yes, a machine executes tests really fast and is useful in continuous assessment. In a continuous development scenario, it gives us a sense of confidence that we are marching forward and nothing is broken. But remember that the ability to trust that it is not broken is a function of test scenarios/cases.This is normally the result of intelligent thinking.

With machines become more intelligent enabled by AI, it is time we focus on creativity to think differently and exploit machines for its intelligence.
A focus in shifting to using right brain more, will certainly help in the goal to “Shift Left” – that of prevention or doing less.


Blockchain – What, How & Where

T Ashok, @ash_thiru on Twitter

Summary

This article is a short primer on Blockchain outlining ‘What is blockchain technology’, ‘How does it work’ and ‘Where is it useful’. Curated from four articles which are nice and easy reads.


Blockchain 101

The interesting article “Blockchain explained” is about “What”,  and outlines What is Blockchain?, How Blockchain Works, Is Blockchain Private?, Is Blockchain Secure?, Blockchain vs. Bitcoin, Basics of Public and Private Key, Practical Applications, Pros and Cons of Blockchain, Disadvantages of Blockchain  and What’s Next for Blockchain? A quick and easy read it is, check it out!

How Blockchain Technology Works. Guide for Beginners” is a nice and easy read on the “How”, covering Hash function, Nonce, Nodes, Wallets, Digital signatures, Protocols and Principles of Blockchain.

Blockchain networks

There are different Blockchain networks – Public, Private, Permissioned and Consortium.  In a public blockchain networkis one that anyone can join and participate in, such as Bitcoin. In a private blockchainnetwork, one organization governs the network. It controls who is allowed to participate in the network, execute a consensus protocol and maintain the shared ledger. A private blockchain can be run behind a corporate firewall and even be hosted on-premises.
In a permissioned blockchainnetwork, there are restrictions on who is allowed to participate in the network, and only in certain transactions. Participants need to obtain an invitation or permission to join. In consortium blockchain network multiple organizations share the responsibilities of maintaining a blockchain, predetermining who may submit transactions or access the data.

Read about this in “What is blockchain technology?”. 

Applications of Blockchain

What are areas where Blockchain can be very useful? Well these are:
1. Payment processing and money transfers
2. Monitor supply chains
3. Retail loyalty rewards programs
4. Digital IDs
5. Data sharing
6. Copyright and royalty protection
7. Digital voting
8. Real estate, land, and auto title transfers
9. Food safety
10. Immutable data backup
11. Tax regulation and compliance
12. Workers’ rights
13. Medical record-keeping
14. Weapons tracking
15. Wills or inheritances
16. Equity trading
17. Managing Internet of Things networks
18. Expediting energy futures trading and compliance
19. Securing access to belongings
20. Tracking prescription drugs

The article “20 Real-World Uses for Blockchain Technology” outlines the “where”,  that is areas Blockchain can be used in, and how these applications could benefit from this technology.


Seven habits to healthy code

T Ashok @ash_thiru on Twitter

Summary


Healthy code is not about just working correctly. It is about future-proofing, maintainability, adaptability, reusability and so on. As in real life where face shines when you are in the pink of health, beautiful code also shines!

“Healthy code is not the outcome of review or testing, it is from doing simple things diligently.”

What comes to your mind when you hear the word ‘HEALTHY’?

It really is a combination of healthy mind and healthy body. So when I say ““HEALTHY HABITS”, what do you think of?

Now, let us relate to code. What is healthy code?

So what are the habits to stay healthy? Let us correlate these habits to software.

Let us reorder these seven habits …

“Healthy code is not the outcome of review or testing, it is from doing simple things diligently.”


Deep dive to rapidly understand an entity

Summary

Deep dive is about going deeper, by reading available spec, by exploring, and using information from past experiences to understand an entity. This is done rapidly with a sharp focus and a 360 vision in eight steps.

The original article is at https://stagsoftware.com/dosmartqa. CLICK HERE to read the complete article.


The smart coverage framework

T Ashok @ash_thiru on Twitter

Summary

Coverage, an indicator of test effectiveness is really multidimensional and has not been dealt with rigour most often(excepting for code coverage). This article outlines a “Smart coverage framework” that looks at coverage from multiple angles summarising it as a beautiful picture. 

The original article is at https://stagsoftware.com/dosmartqa. CLICK HERE to read the complete article.


7 Pictures to ‘Doing SmartQA’

T Ashok @ash_thiru on Twitter

Summary

In article are seven interesting thoughts each outlined as a picture on what it takes to do SmartQA. These are on Smart thinking, Smart Understanding, Smart Design, Smart Plan, SmartQA Test Organisation and Smart Planning.


SmartQA Thinking

Yesterday a good friend of mine told me about his recent conversation with a senior engineering manager in a product dev org. The Sr Engr Manager, a great believer in code coverage told him that he just focuses on covering close to 100% code as the only measure to ensure quality, and as a means to implement shift-left. Absolutely right, isn’t it?  After all, ensuring all code written is at least executed once & validated is logical and necessary.

What is/are the fallacy in this? (1) Well you have assumed that all code needed has been written (2) Well, non-functional aspects of code cannot be completely validated (3)Well, it assuming that this is what users really wanted, even if code is working flawlessly (4) Well, the number of paths to cover at the highest level of user oriented validation is just to many to cover, next to impossible! Code coverage is a necessary condition but simply not sufficient.

Doing SmartQA requires multidimensional thinking, of looking of the system from various angles both internal in terms of code, architecture and technology and external in terms of behaviour, end users, environment & usage and then making appropriate choices of what to validate later or earlier and what to prevent or detect statically.

Smart Understanding

Prevention occurs due to good understanding. Detection occurs due to good understanding. Understanding of what is needed, what is stated and what is implemented.

Doing SmartQA is about great mental clarity of visualising what is intended, what is present, what-may-be-missing that could-be added to enhance the experience. The intent to seek this clarity is what one drives to question well, build better, prevent and detect issues.

The act of testing is really discovering what-should-be-there but-not there, what-is-there but not correct, what-should-be-there but should-not-be-there. Finally it is about understanding the impact of something that been changed, be it in the system or outside the system.

Smart Understanding is about scouring the ‘landscape’  to understand overall context and the static structure of how it is built and then ‘deep-diving’ to understand  the intended dynamic behavior. Landscape and Deep dive are great mental tools to explore the system rapidly to do SmartQA. The associated picture illustrates these two thinking tools well.

Smart Design I

Doing SmartQA is not just evaluation. It is about enabling code that is being built to be robust. To resist errors creeping in, to code-in firewalls. To ensure that I have all I need in good condition before I consume it. This implies that data (inputs) process are clean, the environment I operate in is clean and the resources I need are indeed available, and the dependencies that I have on others are indeed working well.

All I do is to protect myself. How can I handle when irritants are hurled at me? Well I have three choices :

(a) reject them and not do what I am supposed to do (b) flag them (log) and not do what I am supposed to do (c) intelligently scale down and do lesser.

The key focus is be robust, to be disaffected by inputs, configuration/settings, resources or dependent code. The act of designing for robustness makes one sensitive to potential issues that may arise and ensuring we are edged into a corner.

SmartQA Design II

Let us talk a bit of test design now. We focus a lot of execution, and therefore the ability to cover more. The focus has veered to how frequently we are able to execute the tests and therefore on automation. Let’s step back and ask to what the objective was, it was to primarily deliver clean code. So a deeper sensitivity to the quality of tests. This is where design becomes important.

So what is a smart way to design to come with good scenarios, ideally few that can uncover issues that matter most. Smart Design is about looking at the system from multiple views to ensure:

“I want | expect | would-like behaviours to satisfy needs that are implemented well and comprehensively covered to help me do well on my environments with no side effects”.

Then decide what you want to prevent, statically detect or test, be it via human or a machine. Focus on intent and then the activity.

SmartQA Test Organisation

Once upon a time software engineers developed code and also tested them. Then dedicated QA teams became up the norm of day and testing was ‘owned’ by these teams. In current times with rapid dev driven by Agile, it is kinda merging back into dev, with dedicated QA becoming thinner.  A recent article in SD times talked out “who owns QA” – Is it dev org or a dedicated org? So what is the right fit?

What ‘dedicated QA’ really means is – focus on QA/testing is indeed there. In a software org we need specialists, be it analysts, architects, developers, support and testing too. Dedicated QA does not mean reporting only into dedicated QA leadership position, it just means that we have QA specialists who have deep knowledge to systems validation.

So what may be a right fit for building a Smart QA organisation? Think of QA as a mixture of Dev QA, System QA and Solution QA with a different objective of validation.

In addition to validation, a dedicated QA (System/Solution QA) is suited well to provide enablement & governance.  This implies test infrastructure setup, tooling frameworks, setting up process, metrics, publishing aids and doing reviews and improving the system.

Smart Validation

The approach to validation of software has typically been ‘manual’ or ‘automated’ Nah, that is really not the right phrase, it is really ‘human-powered’ and ‘machine-assisted’.  So when we decide to validate in a non-automated manner, what could be smart ways of ‘doing’ ?

Well, there are FOUR approaches :
A: Completely scripted, where we understand completely, then design and then evaluate. The typical way we do, when specifications are reasonably clear and complete, mostly employing the logical left brain to the hilt.
B: Completed unscripted, the typical approach to test when faced with severe time crunch or by a casual person wherein one jumps into evaluation largely guided by one’s creativity, luck and experience.
C: Evolving script, an exploratory approach where understanding, design and execution happen concurrently using a good mix of left and right brain.
D: Evolving script done in short sessions, where we setup up a clear objective of what we want to accomplish/do and then perform ‘only understanding’, or ‘understand & design’ or ‘understand, design & evaluate’ and only largely ‘evaluate’ using a good mix of left and right brain.

What approach you chose depends upon the context. You may veer towards (A) when specs seem clear, you may end up using C or D when system is evolving are when specs are at a higher level. whilst B is useful to complement A,C,D as quick checks or exploit the power of random.

Oh, “Immersive session testing” builds upon this and attempts to enable one to ‘immerse’ in the act of evaluation, to get into a state of ‘flow’. It is a session-based approach that has a suite of ‘thinking tools’ to understand, design and evaluate with the prime objective to ‘doing less and accomplishing more’.

Smart Plan

Smart plan is simple & objective based – what entity to test, test for what issue(by conducting what test), test in what environment, test by whom (in case of a team), test from whose point of view ad finally how to test (human or automated). A concise plan that is a collection of these, enables sharp focus enabling rapid evaluation, be it human powered or building nimble automated suite(s).

A higher level of what kind of issues to be uncovered at different levels of entities on specific environment(s) would be a strategy, whilst specific issues on specific entities would form a plan. Oh this form of thinking facilitates two kinds of scenarios to be designed: (1) an ‘objectiveScenario’ from an ‘output focus’, that are simple one-liner(s) that outline what issues to uncover for what-entity on which environment (2)an executableScenario from ‘input focus’, that is a set of inputs to stimulate with, for an entity to uncover specific issues for a given environment.