Improv for Engineers
Recently I’ve signed up for an improv class and it’s been a lot of fun. It had been way too long since the last time I had taken classes, back I was at Twitter, and I wish I had done this earlier. That class I took ten years ago was part of “Twitter University”, a program designed to help employees develop their skills. There, you could learn about many topics from programming Scala to Improv’. Employees were also encouraged to teach classes. For example, I taught the analytics onboarding class for a while and a few other one-off classes.
At the time, the CEO was Dick Costolo who is known for having started his career doing improv in Chicago. Dick believes in improv as a way to improve (pun intended) how the company is run and as a result, employees could elect to join improv classes as a perk.
Dick doesn’t take himself too seriously, a great trait for a great leader, one of the high points of my tenure there (there was also the birth of Parquet) was when he liked my tweet featuring a witty caption for a picture he tweeted showing him surfing.
Principles of improv
In improv, nothing is scripted and everything is made up as we go. When you improvise a scene with a group of people, you start from nothing more than a suggestion from the public: “You’re on a plane” or “you’re afraid of cats”. Or simply, someone just starts doing something and others follow. Everybody is constantly building on what has been said and done so far to create a story that makes sense and establish relationships between characters.
To get somewhere with the story, people need to collaborate and not each go in a different direction. Thankfully there are principles to follow to help with that. To mention a few:
You have to say “Yes and …”. When someone starts doing something or says something, it is now a fact in the world we’re building together. We have to accept it and build on it. If people start contradicting each other then the story falls apart and we get nowhere.
Make your partner look good. We have to support each other. By supporting and complementing our partners’ ideas, we make the whole story better.
Listen, be in the moment. You have to be attentive to all the facts that are being contributed, so that you stay in that same universe and don’t ruin the story for the audience. Add your own ideas but not to the detriment of what has already been offered. Build on what exists and reconnect the loose ends rather than adding new plot elements.
Applying this to software engineering
The setup
I’m a software engineer by trade. Despite what it looks like based on how we’ve been running tech interviews, asking people to write code under time constraint, this is not an individual activity where you just sit alone at your computer all day. Much like improv, this is a group activity where you rely on your teammates and need to collaborate. Many of these improv principles apply to working together and being better software engineers.
I have a specific example in mind of people having difficulties working together: building consensus on specific design decisions. Way too often you see an engineer think long and hard about a problem and conceive a solution in isolation. They may become very invested in the solution they came up with and start with the mindset of explaining the solution to others so that it can be approved and implemented. An obvious flaw in this process is the lack of room to take input from other teammates and actually create a consensus where different opinions are taken into account.
This creates a lot of friction. As the author of the design explains their solution, they might have a tendency to respond to suggestions for alternate solutions with a “no, this is not how this works”. As one side is trying to give feedback and express a different perspective, the other side is receiving it as a need to explain their solution better. Both talk past each other, ending in a loop of miscommunication and increasing frustration for everyone.
I’m a big fan of encouraging people to get feedback early in the design process. For example, they should start by making sure the definition of the problem itself reaches a consensus before solutions are proposed. There is usually not a single best solution to any problem and it is important to keep an open mind. Collecting ideas on various ways the solution could go is also a good idea. It’s more about picking a solution that your team is comfortable with and has the right trade offs rather than finding the elusive “best” solution.
The “change my mind” meme is a great illustration of a more extreme version of what we are trying to address.
The person behind the sign puts the onus on others to change their mind. The sign implies they see their opinion as something they perfected through time and effort. Changing it is a challenge to others. The sign might as well read: “I challenge you to a battle of wits!”.
In my opinion, the goal of writing a design document is to find a design that we can get behind as a team. It is a team effort. The author of the document is in charge of integrating the feedback and making sure all loose ends are tied up. CHANGE MY MIND (I kid, I kid).
You might have heard the phrase “strong opinions, loosely held” which is a bit cryptic to be honest. I understand it as follows:
- Come to the discussion with enough background that you start forging opinions. Have some skin in the game.
- But, stay flexible and open to evolve or change those opinions given other’s feedback and new information.
- Be wary of the sunk cost fallacy attached to being too invested in your ideas because you spent a lot of time thinking about them.
Improv’ to the rescue
Those same principles of improv’ that help us working together and build a coherent story are very applicable in this context and a powerful way to break old habits.
“Yes and…”
When someone makes a suggestion with a different perspective, first start with saying “yes and …“. Irrespective of what your own intuition is, assume this is correct for a few minutes and see how this affects your own ideas. What would it take to integrate this in the design? See where that leads you.
Our instinctive reaction is usually to immediately consider if the external idea fits in our current view of the world or not. Typically, different perspectives do not fit without re-evaluating some of our prior assumptions, leading us to dismiss them too quickly. This is exactly why they are extremely valuable. They shed light on our blind spots. By re-visiting our own premise with a different perspective, we allow ourselves to expand our horizon and make better decisions.
In some way, this is similar to the simulated annealing algorithm that expands the search for a better global optimum by randomly exploring outside of a local optimum. Like a black-smith hammering your ideas with other people’s perspectives, you get to much stronger ones.
Let’s practice this right now! Sit for a bit with the proposition I’ve just made. Ignore your gut feeling and tendency to follow your instincts. Just take it as an axiom, as a natural law. Don’t evaluate whether it fits or not in your view of the world at this particular instant and instead see what alternate view of the world it leads you to consider. Spend at least a few minutes thinking through what that means, compare and contrast the alternate universes and identify the different trade offs. You can’t trust your gut on unfamiliar alternatives, you have to think through them.
The solution space for a particular problem is not a decision tree paved of yes or no answers. It is more akin to a probability distribution of possible solitions that are more or less likely to work. The wave function collapses when you implement one solution and you find out whether shrodinger’s cat is alive or dead.
The best technical discussions I had, have been improved by exploring alternative points of view and seeing where they lead us. Then you can backtrack and understand better the trade offs of each approach and find new ways to combine them. It’s a very powerful way to improve your own thought process.
As an aside, there are plenty of posts talking about how to say no (and they are also right!). I’m not saying to always accept everything that comes your way and not have boundaries. I’m saying to keep your mind open, and always explore those ideas when your instinct might be to dismiss them at first. In Improv, this works because we’re all following that same principle. “Yes and …” is something to practice as a group.
Make your partner look good.
When reviewing and giving feedback to someone else’s design, the final goal is to help them achieve a successful outcome. This is not the place to discuss your opinions and how you would have done it. You have to consider who’s on the hook to make it work. They have strengths and preferences that are different from your own.
This is an opportunity to help the author clarify things that are under specified and point out things that might have been missed or constraints they might be unaware of. You are being a rubber duck, a sounding board to make sure this all still makes sense from the perspective of someone else.
The goal is to make them look good by building reliable systems that work. When your teammates are successful everybody looks good and the group is more successful.
Listen, be in the moment
Paying attention is also important, to be able to work together as a team, we need to be aware of what everybody is doing. Not in all the details but in how we depend on each other. Like inconsistent plot lines, incompatible software is going to create issues down the line and lead to a clunky system which will create more conflicts between team members and accross teams.
Seek feedback early and be comfortable getting feedback when your ideas are not fully formed. Don’t wait until you have progressed too far in your thoughts and are overly invested in them. It is not enjoyable to have to rethink everything at the last minute. Avoid putting your co-workers in the position of having to point out problems late in the process once a lot of energy has already been spent.
Finally
I highly recomend taking an improv class if you’ve never tried it. Don’t take yourself too seriously, have fun and don’t be afraid to change your mind. Be comfortable making mistakes in front of your teammates, they are here to support you.