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’.
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 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.
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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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!
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.
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.
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 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.
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.
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.