free html hit counter
Posted on: Monday, May 24, 2021 by Rajiv Popat

Simple Experiments With Learning New Skills - Part 1

Part 1 – Juggling

The obvious silence on this blog is a reflection of what’s been going on in my life since Covid-19 hit the world. With some of my family impacted and (by the grace of god) recovered, I finally had a realization that it’s time to get back to an intentional life.

For the last two month’s I’ve been on autopilot. Executing all my responsibilities impeccably, but doing no more. Covid-19 and the stress associated with it has triggered (for most of us), what I would like to call a loss aversion based ‘growth hibernation’.

We are afraid of loosing things, so we do everything in our power, to do what is expected of us at work, and we ignore our personal life and growth. When you are low on the Maslow’s hierarchy of need, where the basic safety of your loved ones and your own safety is challenged, you don’t think of ‘growing’ professionally or doing something ‘interesting’ in your free time.

Last month, after finishing my work and binge-watching depressing news for over four hours late in the evening, I had a realization that I was drifting away from intentionality into helplessness. Frustrated, I turned to the ancient Hindu and Stoic concept of only focusing on things that you can control and not getting depressed about anything you cannot.

To get back to intentionality, I looked at my old logs of things I always wanted to learn. I randomly picked one item from the list; which happened to be juggling. And that’s how it was decide that I was going to learn juggling during this lockdown.

I had tried juggling before when I was younger and had never succeeded with it. Never reached a point where I could even do basic juggling with three balls.

So I decided to get off the couch and give juggling one more sincere shot. This was going to be a proactive hobby to keep me occupied in these dark times, especially when I am not working and my mind is free.

So I go out and grab three simple sponge balls which cost me less than a couple of dollars. There is a lockdown where I live so ordering juggling balls online will take days; so that’s not an option and that’s actually a good thing because that forces me to start with simpler options.


Like I said, I’ve tried juggling before and failed at it. So this time I decide to take it step by step. I look up a bunch of YouTube videos on how to juggle and realize that like any art form, juggling can be broken down into simple basic fundamental steps which are actually not that hard to learn, practice and even master when you break them down and focus on them individually.

This by the way is true with most art forms. When you look at the final output it looks daunting and intimidating. But break it down into small fundamental steps and practice those steps individually long enough and very soon you realize that the output that looked so hard to generate isn’t all that hard after all.

Juggling, as it turns out, is more about throwing than it is about catching. The foundational steps of learning how to juggle a three ball cascade (which is one of the most common juggling style with three balls) is all nicely documented here.

It’s just three basic steps. You learn how to throw and catch a single ball so efficiently that it becomes second nature to you. Then you do the same with two balls. And then the hardest part is you let go and do the same with three balls one time. Once you’re here, you’ve won half the battle because now you just focus on increasing your repetitions from two to six to ten to twenty.

I was able to efficiently juggle a three ball cascade 40+ times non-stop, in less a week. Since then I’ve continued practicing. I’m not a juggler, but I can now impress friends and family with a juggling trick and pull it off rather confidently. The only reason why a lot of people try juggling and don’t succeed at it, is that they are trying to learn way too much in one shot. And then giving up way too soon because they come to a conclusion that it’s hard.

Like any other thing, learning the art of juggling can be summed up in the following steps:

1. Start low-key:

Don’t go around buying expensive juggling balls. Roll up a pair of fresh SOX or buy the cheapest balls that you can get your hands on and start. The same is true for piano, drawing, running or anything else you want to start out with. You don’t need the most expensive instrument, painting brush or running shoes. The key is to start, with the crudest simplest instruments you can lay your hands on and see how serious and consistent you are about learning the art.

2. Remove the Resistance

I kept the balls on my study table or bed. So if I had a few minutes free during a meeting I was juggling. If I had a five minute break from studying late evening I was juggling. If I was going for a nap, I would spend a couple of minutes juggling and when I woke up I would again spend a few minutes juggling.

I didn’t have to look for the juggling balls. I didn’t have to find time or even prepare to juggle. Again, something that is true for any art form. If you want to draw leave a pencil and drawing paper right on your desk and draw during any free time that you get. We don’t learn art by chopping out hours of focused time for learning new hobbies. Trying to do that, often results in excuses like, “I’m so busy”, “I don’t have the time”, “this is not my profession, so why learn this at all?” or “this isn’t going to help me in my life”. Learning an art form is a game of inches and the inches we need are all around us. We learn new art forms by clawing for that inch. And to do that it’s important you remove any resistance in practicing that art form.

3. Break It Down In Smaller Basic Steps

I’m not an artist but if you give me long enough and some basic tools and a picture of my wife on an android phone, I can draw my wife’s face good enough that anyone can recognize her from the face. Is it because I am good at drawing? No! I’ve just learned that a face includes basic structures like the eyes, nose, eyebrows, lips, chin and if you can break the anatomy of a face down into small simpler to understand objects that you can practice, drawing a face isn’t suddenly all that hard.

Juggling is exactly the same. Tossing one ball in the air and catching it isn’t hard.  Boring? Maybe. Monotonous? Sure. But tossing one ball in the air and catch it is not hard. Neither is two balls. And when you’ve done those two steps long enough to make it second nature to you, adding a third ball into the equation isn’t exactly all that difficult for your brain.

Most people fail with drawing because they find drawing simple lines and circles boring. Most people fail with juggling because they find tossing a single ball in the air and catching, and then repeating that for minutes, monotonous and boring.

As Ray, the famous fictional character of uptown girls puts it: “Fundamentals, are the building blocks of fun”. Most of art (and even science) is about breaking something complex into its fundamental steps and then analyzing it and / or practicing it over and over.

4. Enjoy The Failures.

The most frustrating thing about compiling code is that it doesn’t do what you want it to. The most frustrating thing about drawing is that you end up drawing something so far away from reality, or from what you imagined that you feel ashamed of yourself.

The most frustrating thing about juggling is that when you start out the balls will fall all over the place. You have to bend, run around them and pick them up. There is a reason why juggling balls aren’t designed to bounce. I learned that the hard way after spending way too much time and effort chasing sponge balls (that do bounce) all over my bed room and living room. It was down right frustrating; so I started juggling right next to my bed. While these failures do cause frustration and are why most people quit hobbies and art forms, the kick you get when the graph of these failures starts falling is what makes the hobby worth it.

5. Believe The Process

I am not talking about the self-help pep talk based ‘believe you can do it’ style of belief. The belief I am talking about is a subtle belief in the process. You can see someone who juggles expertly, showing you the process of how he / she learned to juggle. The process is pretty straight forward and demands your time and effort. Trusting that the path you are taking will eventually lead you there is hard in artistic endeavors, but it’s the only option you have.

With juggling, I was able to juggle with one ball instinctively by spending some time. But spending minutes or hours just tossing one ball from one hand to another isn’t as easy as it seems. Not because it’s hard; but because it’s boring. You need a belief system and conviction that this step is one of the steps needed to eventually get you there. So you don’t try to cheat the system, skip the step or give up.

When I moved to two balls I wondered if that was enough and if I really need to juggle with three balls? When I moved to three balls, I often wondered if juggling with three balls a couple of times is fine, but would I ever be able to juggle for minutes without having to stop? Was juggling three balls a couple of times enough? Had I learned enough to now stop torturing myself and give up this hobby?

This was not going to be my profession or career, so why go beyond tossing three balls a couple of times? I could still show off that I can juggle without having to put in the extra hours. The reason behind that self-doubt was my lack of trust in the process. Sure I had followed the process and reached a point where I could juggle three balls a couple of times, and there was no reason for me to doubt the process, but doubt is a monster that bites you the hardest when you least expect it to. So part of learning any artistic endeavor is to gently brush aside that doubt and continue with the process of learning and practice that you had laid out. Lay out the process of practice, and don’t have plans or deadlines.

6. Enjoy the Art Itself – No Love Or Passion Needed.

I am not a professional juggler and I have no intentions of becoming one. I won’t say I love juggling. But I was curious about learning how it works, and I do enjoy it. That ‘fun’ that you get out of any art form is the only reason why you should try out that art form. If you are doing it for the money, simply to impress others, to get a promotion or to get face time with people (I’ve seen people learn golf so that they can get some face time with the bosses), the  practice may not eventually scale. But overall if you enjoy the art form – that’s good enough to keep that art form as a hobby for the rest of your life – a hobby that doesn’t make you a million dollars or doesn’t benefit you in any way, but simply brings you some joy and keeps your idle mind occupied and away from binge-watching depressing news seven hours a day. I don’t love juggling, I don’t even feel ‘passionately’ about juggling, but I am curious enough about it to learn it and enjoy it enough to keep practicing it. Passion and love are overrated after all.

Cornerstone Habits

The concept of corner stone habits is something I’ve known for a long time. It’s why people who pick up running often stop smoking. It’s why people who make their bed in the morning often get really productive during the day. The concepts of learning a new art form and the fundamentals of it are all the same. When you engage in the act of learning how to juggle, you aren’t exactly just learning juggling. Your mind is engaging in learning how to learn things. It’s why, last month I was not just able to juggle, but my overall productive time outside of work, shot up a bit, and my idle YouTube time came down drastically.

I’ve also started working out again and started learning how to touch type (which is another one of those things I’ve always wanted to do). Start one cornerstone habit and your brain gets wired to do more and learn more.

Hobbies Bring You Back On Track Of Intentionality.

We like to think of hobbies like these as trivial, but every time I fall off track in my life, it’s learning a new art form or hobby that often gets me back. Not because the hobby itself is something I love or am passionate about, but simply because, by engaging in learning the new hobby or art form, I am indulging my brain in the fundamentals of focus, dissecting and breaking down complex problems into smaller steps, repetitions, practice and learning how to learn. These are not just things you need to learn a new hobby but also the same skills you need to get your life back on track of intentionality.

This lock-down I learned how to juggle, I learned how to touch type, and now I’m moving on to other items in my bucket list of things that I always wanted to do. The lock down has been scary, depressing and yet, by the grace of god, my loved ones are healthy and safe, I’m alive and still able to learn new hobbies, art forms and skills and for that, I genuinely thank god.

Depending on which part of the world you live in, most of us are going to be indoors and locked out of normal life for another year at least. There is generally no certainty of anything around us, including life itself; and that fact has never been clearer to us than now. If your loved ones need your care and attention, focus your entire time on that. If you aren’t well, focus and spend time on your health.

But if you are not busy taking care of a loved one who is sick or aren’t sick yourself, taking out some time for learning new hobbies and art forms is something you should definitely try out, because learning is one thing that can at-least create an illusion of intentionality and control in uncertain and dark times like these. Learning something new is one of those things that heals me and I highly recommend you try it too.

Go pick a thing that you always wanted to learn and apply the above concepts to see if they help with learning a new skill or art form. I wish you good luck.

posted on Monday, May 24, 2021 7:48:45 AM UTC by Rajiv Popat  #    Comments [0]
Posted on: Wednesday, February 10, 2021 by Rajiv Popat

Processes Over Written Goals And Plans.

As Managers we love plans. There is something heroic about a person who makes a plan and then executes it to the tee. The Self Help and the Management world wants us to believe that everyone should have a written goal and a detailed written plan to execute the goal.


The central premise behind having a written goal, is that if you are at Point A and want to go to Point B you have to know what Point B is. And even if you know what Point B is, you need to have a map to get there.

The Self Help Industry wants you to believe that writing down your goal is like defining what Point B is, and having a written plan to achieve your goal is like having a map that will help you get there. Both premises behind having a written goal and a written plan are fundamentally flawed though.

The Fallacy Of Trying To Guess What Point B Is.

Life is not as linear as travelling from Point A to Point B. When it comes to life, given Point A is where you currently are, Point B is some illusive distant reality where 'you think you may want to be'. But you invariably have no way of knowing exactly what that Point B should be.

Instagram was not a photo sharing application when they started, Twitter was not a micro blogging platform during it's inception. Steve Jobs was making blue boxes and working in Atari and trying to score acid before starting Apple. I can give you a dozen other startups which have now become household names, but had no clue of what their Point B was when they started out. A dozen hugely successful people who had no idea about what their Point B was. They didn't take out a pen and paper to write down their Point B. The stumbled upon their Point B, by continuous trial and error; some even serendipitously. By trying out different things.

When people become successful they talk in hindsight and their body language often gives us a perception that they know what they are talking about. In reality, no one knows what their Point B is.

Trying to find out exactly what your Point B is, often turns out to be an exercise in futility. Even trying to move in the general direction of Point B is a waste of time because you put in effort based on the basic assumption that you know what your Point B really is. You don't.

As an individual you can realize that there are fundamentally two states you are in. You are either diligently and mindfully moving, or mindlessly stagnant. If you are diligently moving and aiming at Point X, Y, Z and a dozen other points, you have some chance of stumbling into your very own Point B. Or you may find yourself happier at different Point Y.

Trying to constantly find out what your Point B is and then feeling dejected when you realize you made a mistake is a depressing and dangerous game to play. One in which the only people who win are self help gurus trying to sell you a book they wrote or make you see a YouTube video they made.

The Fallacy Of Having A Map.

Let's say with some divine intervention you knew exactly what your Point B was going to be, would you still be able to chalk out an exact plan and follow it to the tee?

Anyone who has tried to loose weight knows their Point B (X kilos lighter), and at some point has even made plans about loosing weight. And then life happens. Your sister decides to get married and you are feasting on delicacies. Your work pressure mounts up and you are living on takeaways. Go on, set a goal of saving Y dollars a year, and see what happens to your meticulously planned goal when Covid 19 decides to show up on this planet, your organization decides they are downsizing, your loved one needs your financial support and your taxes go up because of global recession.

When you are navigating from Point A to Point B, a map works because the roads to get to Point B are finite and they aren't changing in real time. Life on the other hand is ever changing set of situations and consequences where most of us are jumping and hopping from one shifting tectonic plate to another.

Try living in a world where the traffic rules are constantly changing, the destination itself is changing, the paths to get to the destination are changing as old paths get closed and new ones are formed in real time. Now try using a fixed paper map to navigate from Point A to Point B and we'll see how you do. That's how life usually is. The analogy of going from Point A to Point B simply doesn't work when navigating life.

So the bottom line is, there is no way for us to find out where we want to be, and literally no way for anyone to find out how they are going to get there.

Processes - The 10 Inches In Front Of You.

Like I said before, there are two states you can be in. Well intentioned deliberate motion or stagnation. So if you realize you need to lose weight because you are panting like a Labrador when you have to take a small flight of staircase, you can set yourself in deliberate motion by wearing your running shoes and going for a tiny 1K walk every single day.

No Goals of losing 10 Kilos. No Goals of running a marathon. No big talks. No discussions with relatives on how you are going to change your health. No big plans. No stupid visualizations of becoming a lean mean machine. Just a simple tiny 1K walk every single day. Day after day. Do it for a few days and lo and behold, you have what we call a process. You can have a goal in the back of your mind, but you are not constantly burdened by the psychic weight of not accomplishing that goal. All you do is get up each morning and go for a small walk.

The amazing part about processes is that when you do a 1K walk and feel good about it for a week, you can decide you want to do 2K walks, or a 1K run. But you still wear your shoes, dress up and go out every single day. Your accomplishments may be different but your process is still the same. And you don't just do it for a goal. Maybe you do it because you like the idea of getting up every day and leaving your home to go out. Maybe because you like being in nature, maybe because you like the ambience of the park you go to or maybe because walking makes you feel good. Not simply because you want to lose 10 kilos. A process happens when even if you forget about loosing those 10 Kilos you would still keep getting up and going for a walk.

The central idea of most processes is to move you from a state of stagnation to a state of deliberate motion. And once you get into that motion and enjoy that motion, directions, plans, goals can change and beautiful things can happen. From that point onwards, instead of sticking to a goal and a plan, you give serendipity a chance to change your life in real and meaningful ways without constantly bearing the stress of controlling the next 10, 15, 20 years of your life and then getting depressed when outcomes don't align with your expectations. You stop living in result oriented hustle culture and start focusing on mindful small efforts and initiatives which you can do for years without getting frustrated if the results don't show up.

There are dozens of books which cover this idea, from the Motivation Myth, Atomic Habits, How to Fail at Everything and Still Win Big to Seth Godin's The Practice. The goal of all your processes collectively, is to find out what your day to day life looks like. No Goals, No Plans. Even if you have goals they are really short term goals and they often take a back seat. You set a goal and then you forget them while you work. You do remember the processes, you internalize these processes and you do engage with them, daily.

What do you do every single day after waking up? What do you do every single afternoon? Every evening? Every night before you sleep? What does your day look like? Do you have the courage to get up and move? Can you get up every day and go? Without a map? Even when you feel like crap? Even when you feel scared? Can you plan the 10 inches in front of you and trust your process to take you towards serendipity?

Of course you don't know what your Point B is or how to get there. No-one does. But true artists have the courage to draw the first stroke and then another and another and then repeat, day after day after day, because they trust their processes to shape their art; their hobbies, their side-gigs, their businesses, their projects, their work... and their lives.

Processes and actions inculcated in your day to day life are much more effective and much less stressful compared to goals and plans of trying to find and get to a Point B. This year instead of focusing on your plans and goals give your processes a chance. They might change your life. After all, life is a game of inches and your processes are all about building motion and starting to inch forward; consistently; every single day. Unlike the self help gurus, I can't promise you'll be the world's best programmer or the richest man of the world; but you might be a tad bit happier, a little more focused and a lot more balanced than you are right now.

posted on Wednesday, February 10, 2021 7:39:09 AM UTC by Rajiv Popat  #    Comments [0]
Posted on: Monday, May 25, 2020 by Rajiv Popat

Remote Misses, Corona And Why You Should Take Extra Precautions.

The Corona / Covid lock downs in most countries are being opened up and life is getting back to normal as far as most folks are concerned. The number of infections however, in a lot of countries are still creeping up. Take for instance India. India declared its lock down when there were barely a couple of hundred cases and now 100000+ case later (with over 6000+ new cases a day) India is opening its lockdowns.


The media narrative has gone from, "the virus is very dangerous you need to stay at home" to "we have to live with the virus and you need to get back to work". The CEO of Infosys has now been asking people to not just go to office but to take a pledge to overwork themselves. And the governments which were particularly concerned about our health and well being are now equally concerned about the health and well being of their country's GDP and the economy.

All of that is fine and makes business sense. If you look at it economically, I'm not going to complaint about any of that. Most businesses and governments are always known to give more importance to macro economics over individual lives, but what I find most fascinating amongst all this is the way people are reacting to this pandemic lately.

The same people who were wearing masks and scared to death are now hanging out and chilling and even going to work with very little precautions. And as much I find this fascinating, there is already a documented psychological phenomena / fallacy that describes what is happening with people.

So how does fear and panic of death transition to a case of denial and perception of invincibility so quickly?

How did people go from being bad s#it scared to not giving a sh!t?

Turns out, Malcolm Gladwell described this phenomena years ago in his book David and Goliath using a famous fallacy called remote misses vs. near misses. I am not going to quote the entire chapter from the book, but Chris Irvin does a really awesome job at describing this concept in his blog. His conclusions though, are radically different from mine.

Long story short, during the world war just as Germany was going to bomb the UK, the British government had predicted that when the bombs begin to come down the civilians would be scared and would panic. And when the bombing started there was some fear, but within months Londoners grew resilient and stopped giving a damn about the explosions. As Irvin explains in his post:

Just a few years later the bombings began. Just as the British military predicted, thousands of people died and were injured and a million buildings were left standing in ruin. What the British military didn’t get right was the assumed panic amongst its people.

As the bombings continued, the people of London became resilient. One English psychiatrist wrote that as bomb sirens were alarmed, “Small boys continued to play all over the pavements, shoppers went on haggling, a policeman directed traffic in majestic boredom and the bicyclists defied death and the traffic laws. No one, as far as I could see, even looked into the sky.”

While Londoners were known to be a tough bunch, this wasn’t just a miraculous behavior unique to the people of London. As Gladwell puts it, “Civilians from other countries also turned out to be unexpectedly resilient in the face of bombing.”

The central idea here is that the phenomena of people growing resilient and developing almost an unhealthy courage towards the bombs which could kill them was never really courage or resilience. It was a convoluted form of belief or a mass scale societal delusion in large groups of people, that nothing was going to happen to them.

Malcom in his book, presents a hypothesis that in cases of bombing (or any tragedy) two kinds of things can happen to you. If you are alive you are either:

  1. A Near Miss - this means you are someone who were almost or partially hit by a bomb (or whatever tragedy we are talking about). The near misses see first hand the trauma and damages a tragedy can cause and most near misses are left in shock and trauma from that experience. These are people who can feel and spread panic but in a larger population this group is usually pretty small and contained.

  2. A Remote Miss - These are people who have heard about a bomb explode, or have had a bomb explode a sizable distance away and have just witnessed the report in a television show. Repeat this a few time and these folks who Malcolm calls, remote misses, start believing that the bombs or tragedies are never going to hit them. They distance themselves from the people who are getting hit and start developing a false sense in invincibility.

As MacCurdy, the researcher who did this research puts it:

Remote misses are the people who are essentially unaffected. The bombs have fallen far enough from them that the consequences are much less than the first two groups. As MacCurdy puts it, “a near miss leaves you traumatized. A remote miss makes you think you are invincible.”

This research is important because a lot of remote misses are happening to us right now and creating a false sense of invincibility in a lot of people who are taking their cars out and driving to work without any precautions. A lot of companies which are literally arm twisting their employees to show up for work when they should be working on giving them infrastructure and supporting them to work from home.

I do understand that the economy is suffering and some folks would need to go out there and start providing essential services and most need to also go out and work to make ends meet and pay the rent. I am absolutely cool if folks take a deliberate calculated risk and then step out of their homes to go to work. But stepping out with an illusion that "nothing is going to happen to me" is nothing but hope and hope alone is never a good strategy.

If your work demands you to work or even if you yourself have take an active decision to work I respect that. Totally.

Go ahead and do to work, but please do it safely and carefully! Wear the dammed masks and then wear shields, and then gloves and them some more protective equipment if you can. Wash your hands, wash everything that comes into your house starting with groceries to the stuff you order online, take showers and change your clothes when you come back from work and even distance yourself from your family as much as you can and sleep in different rooms temporarily so that if something happens to you they can be there for you and help you and take care of you. There is no glory or love in falling sick collectively as a family, just because one person in the family has to, or chooses to, go out and work.

And most importantly, never say, I am careful, nothing is going to happen to be. Instead focus on awareness and mindfulness (and prayers) so that nothing does. Observe every mistake, every oversight and every miss that happens on your part and fix it. Remember that time when you forgot to wash that milk packet? Remember that so that it doesn't happen next time. Remember that time when you took your mask off for a meeting? Please don't do that again in your next meeting.

And even more importantly, just the fact that everyone in my team is working, everyone in my workplace is working or even everyone in my company is working is never a reason for you to be driving to work. You should work if you have to or want to work. A huge number of people indulging in an act doesn't make it safer or reduce the risk in any way. With a virus the risks only go up.

With Remote Misses, the entire fallacy lies in the fact that a huge population of people are not going to be directly impacted by something dangerous and there fore are going to end up feeling invincible. That doesn't make the overall environment safe to be indulging in the act.

I know this because I actively chose to travel to a family member's wedding right before the lock downs began. But not for a second did I have a false illusion that I was invincible. My wife and I discussed this and concluded that it's a risk we are collectively willing to take in return for an experience. And we went ahead and took the risk with prayers and all necessary precautions. Not because we were emotionally arm twisted or guilted into being there, not because we wanted to impress someone or prove a point or flex our courage mussels, but because we genuinely wanted to be there and were okay with taking the risks in return of the experience of being there. The number of cases back then were really low. Would I take the risk today to get an experience of being a part of a family member's wedding? No way!

As we move ahead I can only pray that deaths are none, but the reality is that this is getting worse in a lot of countries and The Remote Miss Fallacy, which ends up causing a feeling of invincibility at a mass scale, is just going to make things worse. I know people who have even stopped following the news and stopped tracking the numbers and are just blindly going to work without any persuasions what so ever. The other day I heard the story of a lady at a friend's office bragging about how she doesn't feel the need to wear a mask.

All I can do in this post, is tell you that the Remote Miss fallacy might be f@#cking with your head and that following the heard is not always the right answer. You must definitely go to work if that's what you need to or want to do, but be very honest about why you can't work from home, why you are going and if the reason revolves around following a herd, flexing your courage mussel, impressing your organization or anything superficial, take a pause and think if it's worth the risk. Don't work under the assumption of your invincibility and don't get complete rid of that bit of healthy fear in you that's keeping you safe.

And then if you still decide to go because you have to or want to, that is absolutely fine! Just be careful and take necessary precautions. I genuinely wish you good luck from the bottom of my heart and pray that you and your entire family, loved ones, friends and acquaintances stay out of harms way.

posted on Monday, May 25, 2020 6:57:52 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Thursday, May 21, 2020 by Rajiv Popat

Boxing Your Help Time.

The other day someone was talking about pair programming at work, and someone said, "I already pair 5 hours of my day every day helping others".

Help Time - is a time in your schedule that is usually not accounted for. It's really hard to plan for and it usually begins any time someone walks to your desk and says, "Got a minute? I need your help."

And that's paid help. One of my bosses believed that as seniors we get paid to help. His belief was simple:

It's a silent part of our work profile. We are paid to help, mentor and train others. You should have an open door and an open heart when someone walks up to you for help specially at workplace.

To an extent I agree, but when your entire day goes in helping others put out the same kind of fires, it's often time to introspect philosophically if helping folks is really helping them? Or just making them dependent on you and boosting your self ego? Is that what you are really getting paid to do? When it comes to professional life, help without training and mentoring usually harms both the giver and the taker.

Then there is unpaid help. Someone, somewhere, who is remotely related to you, whose laptop just broke down and merely by the virtue of the fact that "You are in IT" you are expected to replace their RAM.


You know, the kind of help we all know about.

A lot of folks and self help gurus speak at length about the power of No. 'Just say no' is what almost every book out there says. But no is not always an option. Specially for people who are reluctant at saying no. As a regular nice guy (or girl) your chances of being exploited using the help bait are much higher than a jerk who can say no and get away with it.

There is nothing wrong with helping, but there are a few simple things you can do to not bite into the help bait more than you actually want to. Here are some:

#1: Help using advice, direction or artifacts: Advice and direction are easy to provide. A five minute conversation which says 'look at this' or 'google that' and you give the seeker a general direction he or she should go towards. If you want to be a little more involved give them an artifact which others can reuse. Scott Hanselman has an excellent post on the topic of building reusable artifacts while helping others, so I won't repeat that material.

#2: Help but in a timeboxed duration: Sometimes advice, direction or artifacts aren't enough. There are times when takers will seek for explicit customized help. For example that uncle of yours's who wants a full blown accounting system and he is expecting you to build it for free. This is where you don't have to say no to helping, but make it very clear that you would love to help but you're busy (see point #4 on excuses) and so you're only going to be able to do X.

This X, could be as simple as - "I won't be able to design an entire application for you but I can connect you with someone who does this really well and at a reasonable price. I'll also be there in the first half hour meeting to connect you two and then you guys can negotiate a rate and take this forward. It's the only person I know so I won't be able to connect you to others but you can look at others online if you don't like this guy."

Whether you are helping your fellow developers or personal acquaintances, time boxing your help time is a good idea and when that time runs out, schedule for a different day in your calendar. The other day a school friend called for a help he needed and I told him I'm completely booked (again, see point #4 on excuses) but, "let me get that done for you by Friday late evening". There was a slight awkward silence because he just needed an hour of my time and he was probably expecting immediate help, but he was finally ok with Friday late evening and we both were happy with the arrangement. As much as I wanted to help him on the same day, I couldn't help it. My help time quota for the day had already run out. When you run out of money you can't spend more. Time is no different when you budget it.

#3: Recognize Patterns: If the same person calls you from help regarding the same kind of thing over and over he isn't seeking help. He is just exploiting you. For example I had an acquaintance who had a habit of visiting strange sites and getting his machine loaded with malware ever couple of months.

The first time it happened I showed him how to reimage his machine and a couple of weeks later he called me again, stating his machine was infected again, how he wasn't feeling confident reimaging it himself and would 'prefer' I do it. I told him I wouldn't mind doing it but in that case it would have to wait for two months since I am badly tied up with this huge project I had taken up and may have to fly out next week.

Next day he called me about a small question when he was stuck trying to do it himself. I answered the question and he was able to get it done.  Win-win.

Recurring patterns for same kind of help isn't someone seeking for help. More often than not it's someone exploiting you and sucking your time to feed their own agendas and their own laziness. They aren't bad people but when you help them with the same problem again and again instead of empowering them to fix it themselves you are feeding their laziness.

#4: Plan our excuses ahead of time and practice with loved ones: I have a collection of excuses predefined for all occasions. A few of these are ones that can be pushed back or questioned, which lets me validate how serious a person is. For example, "I've got  a meeting during office hours but can we sit at 10 in the night and work at it?" - If the person' isn't serious he would usually refuse that offer. If he accepts the offer I can always tell him I got another call at 10 and help him the next day. Win-win.

Then there are excuses in my quiver that just cannot be challenged or negotiated with. For example, "I can't, I'm doing a course on machine learning and have my exam scheduled on that day". I've researched into which course, which exam and have rehearsed this excuse a thousand times over so I don't feel reluctant using the excuses. Be careful when using this though, since in most cases you aren't even obligated to give an excuse. Just saying "I have other important work (or personal) commitments" convincingly should be enough.

As geeks helping folks who are stuck is second nature to us. We see something broken and want to fix it. A lot of folks actually thrive on this weakness of ours. Practicing excuses and having a pre-planned list of excuses for each occasion in your repertoire helps a lot, especially if you are not great at saying no assertively. That's a skill I need a lot of work in.

Helping someone is a noble act and there is nothing wrong with helping people. It's a form of altruism. And like every charity, when it impacts your own well being it becomes dysfunctional. You can only give a small portion of what you have, and when it comes to time, it's really important you put a stake in the ground and pre-decide what percentage of your time you want to dedicate to helping others.

If it's a loved one you can give them a lot of time, if it's acquaintance who is a perpetual taker you may choose to give him nothing. There are no right answers but whatever you do, you should be doing it deliberately. Every time someone requests for help you shouldn't be taken off guard and end up providing hours or your precious life just because you were guilted or emotionally arm twisted into it.

Timeboxing help and picking who to help and how much to help, is an art you master and as you master the art you actually get better at helping people you really want to help and providing help on things you really care about. Go on, plan your help time deliberately and provide help that really matters to people who really matter to you.

posted on Thursday, May 21, 2020 8:16:40 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Tuesday, May 19, 2020 by Rajiv Popat

How To Automate Tasks And Other Mundane Stuff - Part 3.

Automating Buy and Sell Alert for Shares On Your Android Phone.

In my last post, I talked about a simple automation using a python API that constantly monitors price of shares I am interested in and tell me when I should buy and sell them. The API, when called returns a simple JSON which tells me which shares or scripts I should buy and which ones I should sell based:


Now that I have the API up and running, I need to call that using my mobile phone every hour during business hours and get notified if the price of a share changes and falls in the threshold where I need to act.

That way I can stop staring at my phone all the time and only look at share prices when something I want happens in the stock market.

Automation is all about deliberate and mindful attention and mindlessly staring at stock prices every couple of hours is no way to live specially when trading isn't your full time gig.

I've already talked about how I automate stuff on my android phone using Automagic. So let's use automagic to call this API every hour, parse the results and show alerts and notifications.

Automagic allows me to call an API and parse the JSON responses that I get back from the API using custom code. My overall workflow looks like this:


I use a periodic timer to fire every 25 minutes (you can make this as low or high as you want, even run it every minute if you like) during working hours (1o AM to 6 PM). In these runs, I fire an HTTP-Get (or post, depending on the API you are writing; mine uses a Get) and pass appropriate parameters. Here I'm just passing the username since it's a quick API I wrote using python just for myself.

Once I get the response back from the python script on server I can use the script action in automagic to write custom script to parse the response. My script looks like:


Now all my buy and sell are contained in a single variable call buysellscript which happens to be a list of strings and I can access that variable from anywhere in the workflow.

If you go back to the entire workflow diagram in the beginning of this post,  the first thing I do after this script parsing the results, is check if the buysellscript variable has a list count of more than zero. This variable will have value (or a count / length of the list will be larger than 0) only if I need to buy or sell shares based on my high price, low price and the live market price of the shares I want to monitor.

If the variable has a value, I need to pay attention to my phone and act. So I use a speech output action and make my phone say out loud using google text-to-speech that I need to buy or sell specific scripts. The phone speaking out loud and telling me that I need to buy or sell specific shares not just grabs my attention but is also often a great conversation starter in parties and in office meetings. :)

Then I show the same message using a dialog box. I can even vibrate my phone in a certain way if I want. All of this grabs my attention when a share becomes worth buying or selling. For the rest of the time I can be completely free and blissfully unware of what the stock market is doing.

And just like that my stock trading pretty much runs on auto-pilot. Earlier I would monitor only a couple of stocks at a time, now I can literally set watches on dozens in my very own private database, set-and-forget, trust the workflow to inform me if something important happens to stocks I am monitoring and move on with my life.

I set fair buy and sell values of stocks every couple of days or weekends and update the database. Once I've done that, I stop looking at the stock prices. No Fear Of Missing Out, No constant distractions.

If you invest in stocks, what are you doing to automate or make your investing experience better? What other things grab your attention and make you stare at your mobile every few hours? Have you thought about automating those things?

A lot of people talk about automating a lot of things and some even take automation to extreme but for me the best automations are not just automations that save time, but automations that give you a peace of mind. Automations that assure you that if something you want to know about happens, you'll be informed. You don't need to be glued to your screen or on a app all the time! Automation isn't about becoming obsessed about saving a few minutes but about getting your life back and this by far is one of the really good examples of automation in my life that does exactly that.

posted on Tuesday, May 19, 2020 8:32:47 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Friday, May 15, 2020 by Rajiv Popat

Automating Buy And Sell Alerts for Shares Using Python.

Learning a new programming language is no different than learning a new spoken language. The biggest hurdle to both isn't picking up the language. It's having a lack of opportunity to then use the language in the real world so you become proficient at it.

I've been playing with python for a few months now and the only reason I've been able to hold on to it and become decently acceptable in the language is because there are a lot of opportunities to use python in your personal life. So if your work doesn't demand that you use python you can still put it to use in the real world to solve real problems.

For example, I have a requirement where I set fair value of stocks and buy or sell shares when the prices of a stock go outside this range. That is, if the price of a share falls beyond a certain value I want to know instantly so that I can buy the share and if the price shoots up beyond a certain value I want to be notified so that I can sell the script. The problem is I don't have time to monitor share prices all the time. So I decided to put python to some good use and see how versatile the language is at automating this task.

Building A Price Tracker For Your Portfolio Which Gives Buy/Sell Notifications Using Python:

The first and the biggest step to this automation is to get the current market price of a share / script. There are a lot of paid services that do this but I wanted to get this for free. Python gives me an excellent library called beautiful soup for parsing HTML so the task of screen scraping shouldn't be as daunting as it is in some other languages.

What I discover is that Yahoo Finance shows me the price of a share. To fetch the price of the share all I have to do is hit a URL: + [name of the script whose price I want to fetch]. So, for example: This URL gets me the price of a script called TVSMOTORS in the Indian National stock exchange.


The bit highlighted in blue square above (342.35) is the exact value I need to fetch. To fetch that I select that element using google chrome developer tools, pick the specific div and just click copy selector:


Now we tweak the selector and it basically looks like this:

#quote-header-info > div . My\(6px\) .Pos\(r\). smartphone_Mt\(6px\) > div (without the spaces).

With this I can write a simple script and fetch the price of the script using python using just five lines of code!


That's impressive! Screen scarping technologies and frameworks have come a long way and have become really elegant. Now that I can get the price of a script, I can store the high value (above which I want to sell the shares) and low value (price below which I want to buy) in a SQL Server table and then compare those with the real-time prices we fetch using screen scrapping. [Before you flame me for using SQL server with python, I'm doing this because I already have a server with SQL server for this blog :)]. I can do all of that easily in just about 20 lines of code more:


That's another 20 lines of code which looks up my SQL table by user, fetches all high and low prices of shares I've preconfigured, compares them with the current price of shares, does this for all shares in my portfolio and tells me if I need to buy or sell specific shares. And I run this on flask:


And just like that I have an API that can compare of my portfolio of stocks, their low and high prices set by me with the current price in market and then tell me if I should buy or sell specific shares:


I can now host this on any Linux (or windows) box or container and can consume it with a mobile application or even using my automagic automations or a custom mobile application, but those are topics for a different post.

Long story short, in less than 10 lines of code in python I'm able to fetch prices of scripts. Another 40 odd lines and I can compare my entire portfolio and get insights on which stocks I should be buying and selling and turn the whole thing into a WebAPI I can call from anywhere. If I wanted to I can scale this API and open this for everyone because the concept of user is already baked in the design of the database.

In the next couple of posts we will talk about how we can deploy this on a live URL and how we automate the notifications on an android phone. Till then, If you are a .NET developer, and if you've never tried a different language, python is an excellent language to start playing around with because it's really elegant, versatile and with only a few lines of code you can get a lot done. And most of all, you can use it to solve your own real life problems even if your next work project doesn't require you to use python.

posted on Friday, May 15, 2020 5:18:57 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Wednesday, May 13, 2020 by Rajiv Popat

How To Automate Tasks And Other Mundane Stuff - Part 2.

In part 1 we looked at Automagic which allows you a event-logic-action based workflows to automate your mobile and boring and mundane bits of your life. We took an example of creating a simple mindfulness bell.

On the list of things to automate in my life one thing that takes very little time but a lot of psychic weight is picking up, listening to and then hanging up spam calls.

I am on every Do-Not-Call and Do-Not-Disturb registry out there and yet I kept getting a few calls every other day. Everything, ranging from credit card sales call to vacation packages.

There are multiple call blockers you can download and install, but there is a couple of problem with the few I tried:

  1. These folks kept changing their numbers so I wanted to be able to block out patterns rather than blocking individual numbers.
  2. Most of these blockers block the calls without picking them which means the caller doesn't pay for the call. I want to block the spam calls and don't want to get disturbed, but it feels good to know that I made a spammer shell out a tiny bit of money and not get my time or attention in return. :)
  3. When you block calls without picking them and hanging them, the caller still gets an option to leave you a voice mail which can be a nuisance. It's a common problem described here.

With these things I mind I set out to make my own call blocker.

Making a Call Blocker That Supports Pick up and Hang Up in Less than 5 Minutes:

We're going to use automagic for this. If you've gone through my first post on automagic this workflow should look really simple and self explanatory:


The above workflow is really simple. Keep it as a reference as you read the rest of this post.  Like I said automagic works on event - logic and action model. Here, it gives me the event "Incoming call" followed by a few actions. First thing I do is  drag and drop the incoming call event on the workflow.

In the detailed specification of the event (screenshot below), I have the numbers that have 1048909 and 140930 in them getting trapped by the event. The * before and after the number means any other characters or numbers before or after the pattern will still be trapped by this event. I do this since I discovered that all changing numbers from which I receive spam typically start with these numbers.

For you these can be specific numbers or any patterns like these. I even get to pick the state of the incoming call when the event will be fired, where I pick "Ringing", which basically means that I want actions connected to this event to get fired when the phone rings. All of this is set in the detailed view of the event which looks like this:


So when this event happens, i.e. I get a call from any of the these numbers and when my phone rings, I want to fire a couple of actions. These actions are: Answer the ringing call and End The Call.

If you look at the original workflow picture in the beginning of this post, both of these actions follow the incoming call event. Both actions are readily available in Automagic so I just drop them and connect them to the ringing event.

I also want to know that a spam call was blocked, so I put a speech output action (which leverages android text to speech to literally speak out a message). The commas ",,,," are for waiting for a second each, so I basically wait for 4 seconds and then my phone literally says that a "spam call was blocked". That's the last action on the workflow.

And just like that using Automagic we've built an application that folks on this XDA Forum have been asking for sometime now. :)

This is just one example of how we can use some of these powerful frameworks out there to automate some mundane aspects of our lives. If you are interested in more such automations you can watch out for more post in this series of just subscribe to this blog.

posted on Wednesday, May 13, 2020 6:16:43 PM UTC by Rajiv Popat  #    Comments [1]
Posted on: Monday, May 11, 2020 by Rajiv Popat

Automated Testing Of Microservices Without Test Cases.

I love my test cases. But real test cases are so much more than just input output testing. Most folks who I see doing Unit test cases are doing them wrong by doing just some basic input output end to end tests.

If all you're looking to do is write some simple input output test cases to verify your Web API and check if they retain the same request response values across versions of the same API that you deploy so that you can do a quick regression, you shouldn't even be writing test cases.

Diffy from the twitter team actually does a better job than writing test cases manually if this is all you're trying to achieve. Diffy takes a slightly different take on input output testing. Instead of writing test cases, if you have a fully tested stable version of a micro service or WebAPI in production and are planning on rolling out another version of the same service; we'll call this new version the release candidate; Diffy can help automate a lot of basic regression testing without even having to write any test cases.

When you want to launch a new version of release candidate Diffy allows you to make the same call to both production and the release candidate and compare differences so you know if something is broken or what's different between the release candidate and the production version.

Here is a simple example of how you can put Diffy to use for testing WebAPI's without writing Test Cases Explicitly:

To keep things simple let's start with a simple WebAPI with one simple method which are are going to assume is hosted in production. Let's say all the service does is multiply a number by five. We've written the code in a strange convoluted way (by adding the same number five times) so that we can demonstrate refactoring and then testing again using Diffy. So to begin with our controller looks like this:


Let's call this service 1 and let's assume this is the version of the service now running in production:


Now Let's go ahead and deploy another identical release candidate of the service in a different port this time. This time let's call it service 2:


Ok, so now we have two identical services running. One is in production and one is a Release Candidate. Now let's get Diffy up and running to see it' request and response models are identical. That will allow us to get started with some basic testing.

To get Diffy you can get the latest diffy-server.jar from here. Once I get the Diffy jar and place it on my machine, I just need to install Java on my machine and I can fire this command to get Diffy pointing to both my services so that it can start comparing them:



Command:  java -jar .\diffy-server.jar -candidate="localhost:5008" -master.primary="localhost:5000" -master.secondary="localhost:5000" -service.protocol="http" -serviceName="MyService" -proxy.port=:31900 -admin.port=:31159 -http.port=:31149 -rootUrl='localhost:31149'''

Here Candidate is the service which is the release candidate; which basically means the newer version we are going to deploy and want to test.

Primary master is the service which is in production. Ideally, you would deploy two copies of the API in the production environment since Diffy does analysis of Request and Response objects and how they vary between two versions of production API allows it to filter noise. Let's say for example a particular attribute of the service in production was returning a random value each time, Diffy would see different values for these attributes being returned in two instance of production and understand that the specific attribute results in 'noise' and difference in values should be ignored. This second version of the production service is called the secondary master, but to keep things really simple let's keep both of those the same; which is why both primary and secondary URL in the above command point to the same endpoint.

Now if all does well, Diffy would have started a proxy where you can send the production traffic and Diffy will send the traffic to both production and Release Candidate to see if they have identical requests and responses. So since in the above command we asked Diffy to spawn a proxy on port 31900 let's send some traffic to that port and URL using postman:


So I make call to the Diffy proxy exactly as if I am making a call to the service. I pass a value of 8 for the service to multiply by 5. I also add a Canonical Response header because that helps Diffy identify and group calls using that name (see the word "Multiplication" in the screenshot below? that's because of the canonical resource header) but that's not mandatory. If you don't do that Diffy just groups your calls under a group called "Unidentified Endpoint". Once I make that call that I can hit the Diffy console to see if everything went all right.


The above console shows that Diffy received a request which was routed to both the services and the difference in inputs and output of these services was zero (i.e. 0 diffs) and hence my release candidate is safe to deploy and continue to work with all production calls.

Now let's go to the Release candidate and change the internal logic from adding the same number five times to multiplying by five directly (remember we added the same number five them initially?):


Note that I've just refactored the code and made changes to the service internally but the outer signatures and request response associated with the release candidate is still the same. Now I want to quickly test the release candidate for regression to see if it's safe to send to production. So I make the same postman call I made earlier again! And once I make the same post man call again, I check the Diffy Dashboard:


Notice how Diffy now shows 2 calls, the second request is for the call we made after refactoring. However since the code changes were internal to the service, the request response elements are still identical so Diffy tells me none of my services are failing and it's still safe to take my release candidate to production. The refactoring I did is safe to deploy to production.

Now let's go ahead and make a mistake on purpose. Let's say instead of multiplying by 5 we end up multiplying by 8 in our release candidate and we do this by mistake.


Now that we've made a mistake that effects the end output that the clients consuming the release candidate will notice and be effected by, let's see if Diffy can catch that. Lets make the same post man call a couple of additional times. Now I make two more post man calls on the proxy just to see how Diffy captures that:


Because I made two more calls to the proxy, Diffy captured those calls, passed them to production and release candidate both and noticed they weren't behaving identically and hence started showing me those two calls as Diffs. 2 out of my 4 calls are considered failures and I have a failing rate of 50%.

And just like Unit Test Results Diffy tells me what's wrong in the two calls that failed:


I can further drill down and compare my request and response objects too. If I had huge response objects it helps to see exactly where my production and release candidate response objects vary:


Like I said, this does not replace writing good Unit Test Cases or Test Driven Development, but if all you are interested in doing is writing basic input output test cases and all you need is basic peace of mind for some regression test cases, you don't need to write test cases just for that. Why not use Diffy instead?

Of course, this is just the tip of the iceberg and things get even more interesting where you can automatically take production traffic and route it to Diffy instead testing it explicitly. A lot of the testing we did here with Diffy can also be automated but that's for another day. For now this should tell you what Diffy is all about and get you playing with Diffy!

Go ahead and give Diffy a try. See if makes your automated input output testing or your basic integration testing that much simpler so you don't have to write and maintain test cases for basic micro service regression.

posted on Monday, May 11, 2020 8:47:27 PM UTC by Rajiv Popat  #    Comments [1]