Raja Nagendra Kumar outlines FOUR habits to clean coding
Firstly, whenever we say ‘DONE’, it is not actually from the business angle. Expect a lot of problems to come in, and handle them i.e. what we should keep as the scope of ‘done’, rather than the project manager declare it with whatever information I give.
Most of the time what actually happens is – from the definition of the process once it is done, there is a lot of bugs, regressions and fires. All these are actually telling you where the gap is in the ‘DONE’. The philosophy of a clean coder should be “ Don’t enjoy fire and never be in in fire”.
The best way to clean coding, is to understand issues as opportunities, treating bugs as inputs to make code better. At some point you will achieve, ‘Nirvana’ where you see the code you’ve written is actually scaling well, performing well, is able to adopt to new changes very well. That is my definition of clean code, rather than trying to measure it as a metric.
So, as long as you’re able to control the fire by a certain structure of the code, you are achieving clean code and there is a great benefit for a product to evolve faster.
Summarising Habit #1 ‘Understand that DONE MOVES’.
Habit# 2 ‘Well, there will be bugs, and for heaven’s sake, LEARN and ADJUST’
Habit #3 ‘It is not just about functionality, constantly focus on NFRs’
Habit #4 ‘Continually re-factor right so that you don’t get ‘fire’.
Question: In this age of Automation and AI what do you believe is the role of human intellect for QA?
Arun – I always maintain that analytics is a platform, AI or ML is a platform that is going to enable humans to make decisions. For example, there are already models that can predict based on looking at X-rays, the propensity of somebody having cancer for instance, but would we completely stop using human intellect? I think that would be a mistake, in any field. A recent case in point is the air crash that took place in Ethiopia, where the plane completely controlled by an algorithm. If only the humans had disengaged this, the crash may have been averted. A recent Twitter spat between Elon Musk and Mark Zuckerberg was if AI will be beneficial or pose an ethical issue. Well, I am the side of Elon Musk, while Zuckerberg has a very rosy vision, which I don’t think it is at all.
I grew up reading Asimov, the robot series and the three laws of robotics got into me when I was a kid. In the book, those laws of robotics were circumvented in very unique ways in certain circumstances. I read that Google is starting to think about the ethics of AI, which means you do not only build in the ethics programmatically but also have the human override. While I am all for AI helping testing, I think it still is a role for the human intellect. It might sound a little wishy-washy but I think you still have to ensure that human intellect has a veto power so that you can shut off the AI switch if you think it is isn’t telling, if it can be catastrophic.
I think that fear is real, I don’t think a lot of people realise how soon we’re going to lose many jobs, people relate to the industrial revolution. When the automobiles came, the guys who were shoveling horse manure moved into the production line, but that’s very different because the training cost for that was very minimal. To train somebody to be an AI expert is not easy. It’s not going to happen. So what do we do, if we move away from testing?
I think that fear is real, all I’m saying is if you think about whether it can be completely divorced from human intellect, and the ability of humans to influence what the final outcome should be, we are a little far from that. Not saying it won’t happen, but we are a little far, I think.
Question: In this digital age, what do you believe is the role of human intellect in QA?
Vivek: Understanding the business context, acting as the voice of the customer are things that are not reproducible as yet and ultimately may never be because AI, ML will depend on the quality of the data that you get and probably. What we get is a biased data, that is not a representative sample of the world, but a sample of a certain subset of people and if you try to extrapolate that to everybody you end up pushing that bias into the system and into the results of the AI as well. So it’s that human understanding, the ability to say whether this is the right thing. It’s the ethics of the situation. It’s the humanness, it’s the connection, It’s the empathy, it’s the emotional connect with the end user which is the problem that we as intellectuals need to solve and that’s what we need to propagate and that’s what we need to be the spokespeople for as part of the QA function.
Ashok- Is it not the fear that AI is going to take over my job story, right?
Vivek: It is the fear that AI is going to take over my job story, but the fear should not be there because you can outsmart AI by changing the data. Recently the whole internet is full of that thing that made a Tesla car change its lane by physically changing the markers on the road overriding its automatic sensors and telling it to shift lanes. And then you keep hearing about this where it’s not able to understand that, it is the side of a truck and not the blue sky. Those things have happened, not to pick on Tesla, but basically just showing that it is bias-in-bias-out. It depends on how much data you give it. What’s the quality of data? So if I can validate the AI then AI can’t take my job because I am the one who did it.
With the way artificial intelligence and machine learning is coming into play, there will come a time where a developer doesn’t need to write code. Just tell the chat bot, the business logic that you are thinking, it spits out the code. In fact, to some extent it’s happening today where the template code is ready. Just plug in the business code, even in the testing world that is going to happen. Someday automation is going to be so intelligent which can be termed as intelligent automation systems where one just points at the software . Let’s take for example a UI automation, just point it to the URL. It probably captures everything. There is no need for human intervention. And it self-corrects whenever the things change in the website or URL.
Sometimes when we say test automation, we unfortunately focus only on UI automation, whereas a big birth piece of the world actually is platform automation because as companies are transforming themselves to be known as platform organizations in the world. There is more technology on the platform side. The human interface on the UI side will minimize itself and this is where the transformation of the shift is probably focusing more on the backend side The front end is going to be driven through mostly intelligent systems.
Our intervention as quality Engineers on the front-end side will get minimized over a period of time. Whereas on the piece of code. Ain’t always requires you to focus on code. It is not easy for any computer system or whatever system you build to understand the piece of code and magically write a unit test code. Because you understand the code and you can write the computer systems, can write positive and negative test cases, but that may be about 50% of the coverage the remaining 50% of the coverage on the code comes still through human. That is where the intellect is still needed. no chatbots, nothing will take over.
In summary, you talked about extreme ownership and one side you talked about , the entire notion of going from black to white shift left and then of course the end you said UI will kind of go away and then you will need intelligent people intelligent thinking to still be around in the back end and you kind of subsumed at the end the ownership card game that you know, the ownership now is extreme and you ultimately talked about meeting-less collaboration.
Systematic Inventive Thinking is a method to direct our creative energies to solving problems that have strict boundaries to coming up with solutions in an innovative manner.
The video of this “nano learning” smartbits video is available here.
Ashok: How can Systematic Inventive Thinking enable QA to re-craft his or her thinking skill ?
Tathaghat: The way I look at Systematic Inventive Thinking or SIT method, is that it is a very good way for us to direct our creative energies to a specific way of problem solving – It doesn’t stop us from applying it anywhere.
For example, one of the methods in SIT is all about “multiplying” something. For example, Febreze NOTICEables found that if they put the Febreze perfume, people after a point of time were getting desensitised. Once you have the fragrance in the room, you stop feeling it after a some point of time. So they said why don’t we put one more perfume scent there, but now this is a different perfume scent, it’s not exactly the same thing, because that’s not of a value. They multiply it, but then they actually have a different one. What happens is when you start it, the first one fills up the room and just before you are kind of getting desensitised, the second one takes over. So you feel fresh again there and that’s been a very successful product for Febreze. It’s known as a Febreze NOTICEables.
So these are ideas that help when we get stuck. In the SITmethod, we have this whole notion of what is a closed world. While it is very easy for us to go outside and get some resources and become innovative, in SIT world, the most creative ways of solving the problem or most innovative ways in which we provide a solution is within the boundaries of what we have. For example, if you are driving in a jungle and you get a flat tire, how do you solve the problem? While there might be a lot of creative ways of solving it, the reality is that you have what you have in the car. So that is a closed world right? The car is a closed world there.
I think it is more of a philosophical tool actually in which you can direct your thinking and say “Okay, how do I solve that problem?”, instead of saying “There is only one particular way of solving the problem”.
I will definitely give one example of how they used it in designing and testing a software to illustrate the point. It happened 15-20 years back when the e-commerce was not very common. When people kind of started doing it, they found that when you give a credit card number, that was kind of a security risk because the number is then stored and people are unaware. In fact, one of the case study in SIT method is about how they created a local copy of it, again using the multiplier pattern where you have created a pattern and now that the pattern is available, you can safely use it anywhere. It created some kind of a unique encrypted copy which is not a security threat anymore. There are a lot of examples available on SIT website on how it has been used in many ways. I cannot immediately think of how it might be applicable in a QAactivity per se, but I am looking at the entire product. How do we really create innovative solutions where some of that can be done ? I am sure once people understand with the SIT method, it will be very obvious how they might be able to find some creative ways to test or qualify a solution.
Ashok: Some of the patterns like add, multiply and divide, are these like a certain standard pattern in that method?
Tathaghat: That’s right. So, these are four methods and then there is also attribute-dependency. Attribute dependency is a very interesting. When we order the pizza, it says 30 minutes or free. What happens is if the pizza is delivered in 30 minutes? You pay. The moment the 30-minute timeline is over, it becomes free. So time has an attribute dependency on the prize. Now, it might help us to actually create some test cases for example where we know that a system has a behavior, which is not a linear behavior, but there is an attribute dependency on that and then I am able to actually design my test cases around that.
Ashok: So how is this in TRIZ for example ?
Tathaghat: I think TRIZ in some sense a similar kind of a problem solving method. SIT came out of a professor’s work in Israel, and they basically came up with these ideas 20-25 years back. They’ve applied it in many industries and places. I find it very interesting. It’s a very simple but in very profound way. We only have five tools and a few principles in that, but I think the applications are huge.
Ashok : As an avid visual thinker who uses Sketchnotes to communicate, please tell us the importance of visual thinking and how it can help us understand/think better and influence people?
Anuj : I think, one of the ways Visual thinking has helped me is to find a way to better stay in the moment and what I mean by that is when we are in the moment, we will be able to appreciate life even more than what it is. So, staying in the moment in one of the big benefits. While I don’t claim to be a big one, every artist seeks inspiration from life happening around them and the quest of seeking that inspiration itself is one that lets you live that moment better than in a condition without that, so that is one.
The second way visual thinking I believe has helped me is – One of my online friends is Tanmay Vora, a very good Sketchnote artist. One of the blogs that he wrote and that stayed with me, talks about one of the principles he follows – to consume less and create more. In essence, what he means by that is, people with all the revolution which has happened around smart phones are always consuming content. We can blame apps for it – in a way they have been designed to create that stickiness, but we are always in the consumption mode. What happens if we start eating lot of food? It shows up on our body. Ironically, consuming lot of content does not show up as visibly in our minds. We can feel our minds getting bloated up, getting overwhelmed with lot of stuff, but you got to catch those signals. So, in order to balance it out, one of the principles of consuming less and creating more comes into picture. How it helps the visual thinker in me is that if I read stuff, I try to restrict myself to reading good stuff, and whatever I read I have a kind of pact with myself that I will create something out of that, be it a blog, a sketch or some other consumable form. That really creates balance because you are not holding up information for too long and getting it to stale in your mind without it being put to the right kind of use.
Third way visual thinking has helped me is – I will tell you an instance where I had organised one of the sessions on quantum computing. As complex a subject as that is in today’s times, it was equally important for people to figure out how to explain it simple. So, one of the things that I had set myself to do in that session was to Sketchnote the session live. Eventually, it turned out to be a good summary and in doing so, I realised that Sketchnoting is helping me actively listen to the speaker. What I mean by active listening is that again I am not consuming the content for the sake of consuming the content. I am creating something out of it and also actively removing the noise out of the whole experience of listening. You can’t write each and every word in a Sketchnote, but you can write the key points and summarise it. I did present it to the speaker after the event. So, bringing in the ‘intention’ in the listening is one of the key traits that I learnt.
Overall, the main areas where visual thinking has helped me, is to be more aware, be more present in situations and listen intently and balancing that continuum of creation and consumption which is important.
Ashok: So what you are saying is it does help you certainly be more mindful, absorb better and obviously assimilate it and keep up with the most important things so to speak and do it very continually along with the person who is doing his job.
Anuj: I would like to add how will it help QA professionals.More often QA professionals find themselves in a situation where the bug reports, unfortunately still are considered as the key output. In absence of any innovation happening in creating new bug reports, they are again thought of as one of the predictable outputs from the profession. What if you create a Sketchnote out of a bug report? I think that might help people look into your bug with more interest and getting more motivated to fix them.
Q: In this digital age, what do you believe is the role of human intellect in QA? Raja’s view: The products meaning is not that selling it to one or two clients. It will have millions of clients coming in the QA role has become 10x, the way I want to classify is now QA has to start behaving as a first client themselves So they have just to not get into the requirement, but they have to always be wearing the hat of a customer in the digital age which could be hundreds of verities of customers. That is one thing they have to really start acting on. So no more just say I’ve compiled to SRS. Second is cloud has given them too many configuration approaches. How do you deploy? How do you scale? How do you perform? so one in the software scale and other is coming from Hardware. Now all these configurations are not easy to be done even by QA if they want to do it manually, they have to become coders. So basically the DevOps and QA. Previously they were actually no human. Yes. I think that’s where you said no brain required, but now they have to start their intellect so well that they are able to handle so many verities of deployment, so many customers intent they’re able to bring it to the developers that’s one and then if they have any problem in testing it they have to communicate to development saying that, this is a requirement. I am not able to test. Make sure that the developer addresses it because that is a good input for a great developer. If it is not testable if it is not maintainable which means it is not verifiable, which is not a good way to say I have done as a developer. Lot of information in Enterprise is coming from various sources, one is the QA one is the support other is production. All they are supposed to do is the first level of filtering why they were not able to capture that and then give it in a way where developers are able to consume it faster if they can really do that well, they are fulfilling not just a QA job, they are representing thousands of varieties of customers thousands of configurations in the cloud. All that complexity they are able to bring in lot of intellect and then making. They’re not totally depending on the developer or they have to become developers at a next level. So they have to know to code to some extent or if they know in a larger extent it is good, but they are not small things which can be just said, if you train somebody and then they will be accurate.