Avi Das

Home for my work, ideas and else.

Quotes I Have Loved

A brilliant and succint quote that says so much about our being.

The negativity bias is a well intentioned learning disability.

Tara Brach

Two quotes from the best book I have ever read.

Everything can be taken from a man but one thing: the last of the human freedoms—to choose one’s attitude in any given set of circumstances, to choose one’s own way.

Between stimulus and response there is a space. In that space is our power to choose our response. In our response lies our growth and our freedom.

Viktor Frankl Man’s Search for Meaning

I have been a long time admirer of the way Feynman lived his life.

The first principle is that you must not fool yourself, and you are the easiest person to fool.

Richard Feynman

Anais Nin should be more well known.

Life shrinks or expands in proportion to one’s courage.

We write to taste life twice, in the moment and in retrospection. We write, like Proust, to render all of it eternal, and to persuade ourselves that it is eternal. We write to be able to transcend our life, to reach beyond it.

Anais Nin

Naval may be the most quotable person around today.

Thriving Under Siege

Besieged

That one word captures the reality of living in NYC during the Covid-19 pandemic. It feels like being surrounded by an invisible, encroaching army, with no end to the siege in sight.

Everyday we are exposed to terrible news, how immigrants are hurting in my beloved Jackson Heights neighborhood, mass burial grounds either locally or abroad in Italy and China. Bustling businesses in NYC have been reduced to laying off hard working employees.

There is no how-to manual for this current crisis, so devastating and foreign to all of us. Despite that, resilience is human nature. If there’s one place where our collective faiths have met, it is that better times are ahead. Is the thought of thriving during the age of Covid-19 heretical? It is perhaps more so to not attempt to.

Like many others, I have struggled with being quarantined in my apartment since March. I have immersed myself with the energy and drive that permeates NYC, and losing that has felt like being in withdrawal. At times, it has been a fearsome cocktail of loneliness, helplessness and concern.

Alone

I am a rational optimist. I like to think that better times can be ahead, but we have to strive towards it. While my framework of life has been shaken by this crisis, it has yet to be broken, and it has definitely opened up more opportunities for self discovery.

Thanks to the internet, social media and on demand entertainment, simply passing time has stopped being a challenge. Rather, boredom has been a foreign concept to many of us surfing the world of dopamine rushes. Yet, deep inside, many of us feel that they fail to aid deep seated needs of purpose and self-actualization.

So how do we deal with our current consternation? Can we come out on the other side of this and be proud of what these last months meant for us? When we look back into this in five years, how will we think of this time?

Invest in community

It’s more important than ever to be there for your friends and family. Deepening relationships with our closest people have a way of giving back to our lives. That could just be video chats, and I have noticed myself talking to my folks a lot more since this began. There was also one night when, after some silly games on the House Party app, I realized I haven’t laughed this hard in a while and how necessary that was.

Continue voting for your best self

As the dust settled and I got more used to realizing that this is my life for the foreseeable future, I wanted to dig into things I could do but have been putting off due to the busy-ness of life. Not being as busy can be a positive thing, and opens up more time for things I have wanted to do more of.

Mindsets for Tech Behavioral Interviews

Axiom: Any software engineer writing a blog on tech will eventually write a post about interviews. - Yours Truly

Interview Day

You walk into a room with one or two people, who may be taking notes in a notepad or a laptop. The most common starter question is tell me about yourself.

Interview Chair

This used to be a question I didn’t know where to start or end. A possible interpretation of this question is to provide a succinct summary of your career.

The opportunity here is to prime the interviewer towards directions which would highlight your best career experiences. What part of your experience would be the most pertinent for this job? Doing this thinking beforehand would be helpful for the latter part of the interview.

As an interviewee, we are in a sales role and the product is our skills, experience and future potential. For engineers, this is not a natural part of our workflow. The best sales, however, is based on truth. Being honest and talking proudly about your best career achievements will aid you in this early phase.

A very common follow up is what your ideal next role would look like? You’ve just given them the path which got you to where you are. It is now time to lay out what you want for the future.

The opportunity in this question to highlight areas where you want to grow. Do you see yourself going into engineering management? Do you want to become really good at javascript and browsers? Or do you prefer to become an expert in server and cluster management? Again, it serves you to be honest here since this question helps you to evaluate if the growth opportunities you are looking for would be possible at this company.

Go in with a win-win mentality: It is a lot more about finding a mutual fit rather than getting through a cross examination.

After this point, the interview can go in a lot of different directions. Companies may dig deeper into your past experience or go through example scenarios to understand your thinking process. Knowing your resume and being able to talk in depth about each part will be important.

Before The Interview

Chicago Marathon 2019 Race Report

A big step forward and lessons learnt along the way.

Race Day

For goal races, I usually wake up before the alarm goes off. October 13th was no different. Despite the 3:30 am wakeup, I slept unusally well considering it was the night before the race. I KT taped my foot carefully, which I had to do throughout the training cycle to defend against feet issues. After the usual overpacking of gear check bag, I joined my Dashing Whippet housemates on the train ride to the starting line.

Pre race

In the race village, I watched the sea of green feet (nike Next %s), and waited till it was time to get to the start line. The race corral was already busy over half hour left before race start. I went through the motions of shedding extra clothing, doing warmups in the cramped environment and holding back the nerves. It was colder than I expected, which wasn’t a bad thing at all. It would stay cool during the whole race, which meant overheating never became an issue.

At the start line, I felt good. No major injuries have cropped up since March, and training went as well as it could. Despite that, I wanted to stay committed to running a smart race. Marathon is too long of a race distance to predict an outcome and I wanted to stay within myself as long as possible.

I saw the 3:15 pacemaker, and realized I was in two minds whether to go with him or not. I decided to trust my training and focus on running my own race.

The race began, and in the beginning mile I stayed attentive to what my body was telling me. The surge of adrenaline wanted me to speed up, but I held back and moved with caution. At mile 1, I heard my name from a friend cheering and immediately felt better. It is so valuable to see familiar faces during a race.

As early as mile 2, my GPS was completely haywire. I had to stop paying attention to the speed that the GPS was showing me and decided to count every 5k interval instead. I knew those times by heart from training.

23, 46, 1:09, 1:32, 1:55, 2:18, 2:41, 3:04…

I got to 5k within the limit without much issues. Chicago is one of the best marathons, and crowd support is a big part of that. The first half of Chicago is electric, with non stop crowd support, and they showed up strong on an overcast, windy day. It feels as if hundreds of thousands of people are on your side, and you want to run well for their sake.

Then next 5k also went fairly quickly. I have found the miles between 8-12 mentally tough during training and it was definitely no different during race day, injecting some doubt into my race strategy. Every person racing at their limit must battle negative thoughts, there is really no other way.

Chicago 20k

At 15k, I was able to keep a buffer of over a minute. It wasn’t clear to me whether the pace was sustainable the whole course. I wasn’t looking at the watch until a 5k interval, so there wasn’t much to rely on other than how I felt running. I kept repeating the words in my head.

Smooth. Calm. Relaxed. Metronomic.

Stay as calm as a Tibetan Monk.

Only a couple hours or so and I can go run trails.

Around mile 11 or 12 during the race, another runner cut sharply into my path, a near collision. As I looked at him, I went from bewilderment to anger to laughing out loud in the period of a second. “Wherever you are trying to go dude, I hope you get there”, I said silently as I shrugged and carried on.

React Amsterdam 2019: Takeaway

  • The case of GraphQL (Peggy Rayzis)
    • Productivity boost across teams
    • Smaller payloads
    • Fewer client/server round trips
    • Preventing over fetching
  • Great Developer Experience (Peggy Rayzis)

Life Lessons From Improv

I think life should be more like improv and improv should resemble life.

On a whim, I went to hideout theatre in Austin, TX for a improv beginner class back in 2016 but I have only been consistently doing improv for the past year. In the process, I have tried short and long form improv, and dabbled in musical/rap improv. Having zero theatre/stage background, it has been amazing to me how the lessons learnt from improv apply to life broadly.

Improv

  1. Yes, and..: A 101 on improv would begin with the encouragement to accept whatever the other person is bringing to the scene. We may have a great idea in mind, but the scene is ruined if we do not accept the other person’s ideas and bind the scene in a cohesive way. Taking this attitude to life can frame anything in life as a gift. This in turns lends us to be less critical and cynical about our day to day interactions.

  2. Go with the first thing that comes to mind: Perfect is often the enemy of the good. Overthinking can stand in the way of action when spontaneity may have been the right choice. In improv, trying to think of a funny punchline can ruin an act, taking away from it the natural flow of the scene. On the other hand, going with the first thing that comes to mind often leads a scene to wonderful surprises. Real life decisions do involve more thought, but the training against overthinking still holds and can help us live a more spontaneous life and overcome the fear of taking action.

  3. Embracing failure: Making a fool of yourself is encouraged and celebrated in improv. The very act of complete unpreparedness on stage, taking the audience’s suggestion to theme a scene and strangers as partners means that you don’t have any semblance of control. There is no guarantee that an improv scene will be funny to the audience or reach a satisfying closure. But everyone in improv understands this, and supports your choices on stage regardless. This empowers improvisers to be authentic on stage. It also makes us realize that the consequences of failure may be less than we realize. This training is so important in life where fear of failure can hold us back.

  4. Make others look good: In improv, we succeed when we have made the others on stage successful. Supporting their ideas, pointing out the authenticity of their actions and emotions goes a long way into making a scene feel natural and relatable to the audience. When working with improvisers who are gifted in building out storylines, a great way to complement their work is to add other dimensions to the scene such as a location, timeline or other context to create a richer, vivid scene. This prioritizing of win-win mentality is a great habit for teams, since an effective team should be greater than the sum of its individuals.

  5. Make statements, don’t ask questions: Making statements adds material to a scene, whereas a question puts the burden on the other to come up with the material. This is why it is encouraged in improv to limit questions and respond with statements. This is great for your communication skills, making conversations feel less like interrogations. People feel more at ease in a conversation when they feel they don’t have to do all the work. A related advice is to try and use every sentence in improv as if it would be a closing sentence, since a scene could end at any moment.

Frame Code Reviews as Gift Exchanges

The best metaphor I have found for thinking about code reviews is a gift exchange. The terms pull request and code reviews will be used interchangeably in this post.

The balance of writing code vs everything else that is necessary to be a successful member of a software team is one of the key challenges of our job.

Code reviews are an interesting mix. You have to understand someone else’s point of view, their journey through solving a problem in form of code. Or you have to face up to what everyone else thinks about code that you worked hard to write. Those reviews stand in your way of getting your code up to users and getting the emotional payoff from releasing something. The engagement or catharsis from building software is not an available reward when you are in code review mode.

Code Review

Moreover, a code review must take into consideration not just the code, but the project, team and the company into consideration.

These qualities make code review a great opportunity to practice interpersonal skills alongside your programming skills. The best engineers I have worked with take code reviews and responding to feedback on their own pull requests very seriously. Specific strategies that engineers use are different. Some review pull requests first time in the day, others end of the day or anything in between.

Framing is a powerful technique we can use when summoning the energy to do code review everyday. It would be to see every request for a code review or feedback you receive on code review as a gift. Someone values your intelligence enough to ask for your review or taking their valuable time to give you feedback that can only improve you as an engineer. Everyday, you receive these gifts. But you can also offer them to others, which in itself is a meaningful and satisfying act.

Viewing pull requests this way makes them less of a transaction, and illustrates code reviews as a win-win game. So next time you are opening up a pull request, think how you can make it easier for someone else to review. Can you link to the ticket, provide a screenshot/gif, added sufficient comments and followed good coding practices? Have you considered breaking your change into smaller chunks? Can you sit down with a reviewer and go over the changes in code?

Let’s make it easier for someone else to offer us this gift.

Thoughts on Button Push Driven Development

I was in a conversation the other day when someone mentioned

“We may only be a couple Moore’s Law iterations away from all software built by pushing buttons and WYSIWYG editors.”

This made me think of the software that we write today and the direction software is going. It also made me think of why I got into software and am still in this profession.

Lately, I have been very curious about voice as a computing platform and what that will do for applications we use in future. Thankfully, as software engineers, we don’t have to hypothesize. We can build it.

Digging into Alexa skills development has been interesting. While the technical documentation and development for Alexa is quite good, I felt a fair amount of internal resistance during the project. The potential of this new computing platform and the possibilities it will bring kept me going.

Yes Code

The building blocks of working with Alexa are intents, utterances and lambda functions. After a series of thirty or so steps of wiring up buttons, copying and moving templates around, setting up attributes gives you a working voice enabled app, upload zip files, deploy it and submit for app review in the Alexa app store.

Why did I feel the resistance? Any new tool or language will bring an initial set of frustration before we achieve a minimal level of proficiency. But Alexa development felt like using a software program rather than programming. It felt challenging the way gruntwork feels challenging and as opposed to intellectually stimulating. It also felt opposite to when I have felt the most joy during programming. When I had a strong grasp of the vocabulary of the language and the meta-language (libraries, development environment,runtime, etc), leaving room for higher level product/architectural decisions where most things are a tradeoff. This meant I had to do very minimal context switching. When writing an app for Alexa, it feels driven by context switching.