Discover more from Effective Android
Effective Interviews 🎙️ Gabriel Peal
Android GDE and Software Engineer at Watershed. Formerly Tonal, Airbnb and Google. Maintainer of Lottie and MvRx
⚡️ Welcome to the first of a series of written interviews with well-known engineers from the Android worldwide community 🥳
Today, I’m talking to Gabriel Peal, Google Developer Expert for Android, and Software Engineer at Watershed. Gabriel formerly worked at Tonal, Airbnb, and Google. He is an active open-source contributor and maintainer of Lottie and Mavericks (formerly MvRx).
🟣 Welcome to the Effective Interviews Gabriel! 👋 it’s a pleasure to have you here. Thanks for letting us know a little bit more about you 🙏
Thanks for having me, Jorge. I’ve been a Software Engineer in San Francisco for the past ten years. Outside of coding, I try to make the most of my time in the Bay Area which includes skiing, seeing shows (mostly EDM and classical), enjoying the stunning natural beauty California has to offer, or spending time with my friends. I’m also an avid Formula 1 fan and spent much of my life playing violin and Ultimate Frisbee.
🟣 What inspired you to become an Android Engineer and how did you get started?
Three defining phases led me to the Android world.
First, I accidentally taught myself how to code on my TI-83 calculator in middle school. I was bored, so I started pressing random buttons which led me to accidentally learn my first programming language, TI-BASIC which I used to build simple programs such as a quadratic equation solver.
Next was my decision to become a Software Engineer. I enrolled in the Electrical Engineering department at Northwestern University in Chicago. Somehow, during my childhood in Washington DC, far from Silicon Valley, I thought the world of pure software was defined by cubicles and fluorescent lights (like Office Space) so I fought my early interests in coding. However, the cracks started to show when I got an internship at General Motors as an Electrical Engineer and immediately found my way toward projects that were mostly software. I also learned that my preconceptions about the world of Software Engineering were wildly wrong. There were fewer cubicles and more ping-pong tables.
Finally, mobile. I’ve always had a strong affinity towards mobile. I used to browse carrier websites periodically just to see what new flip phones they had to offer and I vividly remember Steve Jobs announcing the original iPhone. I also dabbled in mobile during high school and college. During that time, I poked around with the pre-1.0 Android SDK, was on the IRC channel where iOS 1.0 was jailbroken for the first time, and built some simple apps for Windows Phone and iOS.
By the end of college, I was pretty set on being a mobile engineer full-time. The decision to invest in Android over iOS was a direct result of my work at Google which I’ll touch on below.
🟣 You did several internships. How did you land an internship at Google? What advice would you give to students that aim to do the same?
I applied for an internship at Google but months went by and I hadn’t heard anything. However, I attended a Google IO Extended event in Chicago where I met a recruiter, Rob Crawford. He was able to set up the first interviews that ultimately landed me on the web performance team in Cambridge, MA. I had already set my sights on Android but there weren’t any openings so I took what I could get.
For those trying to break into the industry, I highly encourage you to go out and meet people who are already where you want to be. You don’t necessarily need to be in Silicon Valley to do that either. There are meetups, events, and conferences all around the world. There are also online communities such as Twitter that can be invaluable ways to meet and connect with people. It only takes one person to help you get your foot in the door. However, once you do that, you need to put in the work to be prepared for interviews and be successful on the job. There are no shortcuts there.
🟣 I also did a few internships during my final years at the University. Did you study and do internships at the same time? Would you recommend that to others?
At Northwestern, I was a full-time student during the school year and interned over the summer. The only time I did both was for a brief period during my senior year when I worked for a startup in downtown Chicago. However, balancing both proved to be very stressful and I found it difficult to get more than five hours of sleep per night during that stretch. My schedule with Electrical Engineering coursework plus practice and travel for the Ultimate Frisbee team gave me close to zero free time. In my spare moments, I worked on little coding side projects such as the Windows Phone and iOS apps I mentioned above.
Reflecting on that time, I think that those small side projects did more for my interviewing and ability to land jobs after school than just about anything else I did. My 3.7 GPA that I slaved over did far less.
🟣 You’ve been on a very diverse group of teams, projects, and companies so far. What was the main reason to move from Google to Airbnb, Tonal, and Watershed?
Every role I’ve taken was for slightly different reasons.
I joined Google because it was the best internship offer I had. My other offer that year was for Boeing. I decided to return full-time because they offered me a role on a top-secret Android project that was related to cars (Android Auto). I already wanted to work on Android and had been a car enthusiast for my entire life so I consider myself extremely lucky to have wound up in a position to work on that team at that time.
Android Auto is a fascinating product but also somewhat self-limiting in nature. In the two years I was there, we had built out all of the core functionality we wanted: maps, music, phone, messaging, and Assistant, and had lined up deals with almost every major automaker in the world. I recognized that the rate of growth and change from the first two years was going to taper off so I started looking around.
For my next move, I considered staying at Google as well as joining Airbnb, Stripe, and Uber. I had offers from them all but, ultimately, decided to join Airbnb. There was something magical about Airbnb in its earlier days. It had this incredible energy and collection of people that I couldn’t resist. To this day, many of my best friends stem from my days at Airbnb.
Tonal started from a cold recruiter email pitching a secret fitness device that was powered by Android. I wasn’t actively looking to leave Airbnb but was curious enough to go to their office to try an early prototype. From day one, it was obvious that they had built something special. The hardware was one of the most incredible pieces of technology I had ever used. It was obvious to me that this form factor was the future of strength training and knew I had to be a part of it.
At Tonal, I spent my first two years as an engineer and the last two as a manager (but still had time to write some code). I could write a short novel on my thoughts on IC vs EM tracks but decided to shake things up for my next role. I wanted to consider non-Android roles to ensure that I don’t become a one-trick pony. I just knew that I wanted to work on an amazing team building an amazing product. My three choices were Watershed, Linear, and a still-secret new startup from Andy Rubin. I ultimately decided to join Watershed because I believed in the mission, had a ton of respect for the people there, and was excited to return to an office (with a short commute).
🟣 Could you briefly introduce your role at Watershed and what the company does?
Watershed is a company that helps other companies decarbonize. This involves helping companies measure their carbon footprint, take action to reduce their footprint, and report on their carbon footprint and climate-related risks.
I’m a full-stack engineer and Watershed doesn’t even have a mobile team! I’ve returned to the IC world and spend all day writing TypeScript, GraphQL, and React.
🟣 What would you say are the most important skills for an engineer to develop in order to easily adapt to new projects/teams, and be able to shine? ✨
Be curious! Poke around the codebase even if you are on a team that focuses on one specific part. Spend hours just reading through code or using the app and walking through the code paths that made it possible. Pick the best engineer on the team and review every PR they put up just to learn.
If you encounter crappy code or confusing architecture, try and understand why the design decisions were made but be empathetic for code written at a different period in time or under different constraints than what exists today.
🟣 You grew your public image on Twitter, you’ve always been very active in tech events, and you’ve shared in different ways with the Android community. Would you recommend it to people to make connections and unlock better professional opportunities?
Whether or not to be a public figure is entirely up to you. The size of somebody’s public following is only loosely correlated with the quality of code they write or what they are like as a teammate. I know terrible engineers who are very public and some of the absolute best who don’t leave a trace on the internet.
I’ve gotten to travel the world and meet countless people over the years. However, it has taken a huge amount of time and energy outside of work to make it happen. You have to think of it as a hobby or a side project. If you are okay with having a hobby or side job that complements your day job and uses the same part of your brain then go for it. However, that’s not something most people want to do and there is nothing wrong with that. You can have a successful career without doing any of it.
🟣 Having done quite a bit of OSS and library dev in the past myself, I know it can be a bit stressful sometimes. People are not always very empathetic, esp. when you do it in your free time. Did you work on Lottie and Mavericks in your free time or were you able to work on them at work?
The earliest versions of Lottie and Mavericks (<1.0) were built at work at Airbnb. However, since then, that hasn’t been the case. Nearly 100% of the work on Lottie for Android since 1.0 has been done by me on nights and weekends. Over time, this has amounted to thousands of hours across many years.
Similarly, several of us worked on the Mavericks 2.0 coroutines rewrite on nights and weekends. However, some of the work on Mavericks (such as the mocking framework) was done by other engineers (Ben Schwab and Eli Hart) at work.
🟣 Do you find OSS work rewarding? What would you say are the best outcomes of it for an engineer?
I have found my work on Lottie and Mavericks to be incredibly rewarding. I’m fortunate that both projects I released wound up becoming popular. Knowing the scale of both libraries is highly motivating because any improvements I make are leveraged across tens or hundreds of thousands of apps. It’s also incredible to know that bits of my work exist not just on every phone but on multiple apps on every phone.
Not all open source libraries will reach such a broad audience and that’s okay, too. Figure out what gets you excited but put thought into what you release. Most libraries, including popular ones such as Lottie and Mavericks will get very few meaningful contributions from outside of their core maintainers. You will definitely spend more time fixing problems or adding features from strangers than you will be accepting positive high quality contributions. If you are prone to guilt or anxiety, run through how you’ll feel if somebody opens an issue and you don’t have time or interest in fixing it. These can become non-trivial when they accumulate in a library that you own or maintain so make sure to consider not just the initial release but the long-term maintenance of something you release to the world.
🟣 Architecture/architectural pattern libs are usually the result of internal company work that ends up published in the open after several iterations. Was this the case for Mavericks? How widely is it used outside of Airbnb?
Mavericks was hugely successful at Airbnb. It took zero convincing for it to be adopted across the company because it worked so well. Similarly, I led the adoption at Tonal, and four years later, it’s still as effective as ever. Over the years, I’ve spoken with engineers at many companies (large and small) who have successfully adopted it. Mavericks doesn’t collect its own analytics so I’ll never know the true number but I would imagine that thousands of published apps use it.
🟣 Lottie seems to be a very challenging project. For me, its best benefit is that it makes the collaboration between designers and engineers easier. What has been the biggest technical challenge you faced when working on Lottie so far?
It’s hard to put my finger on any single technical challenge for Lottie that stands above the others. Ultimately, faithfully reproducing animations exported from After Effects is a challenging task. It’s almost equivalent to a turing complete programming language for motion designers. There are many ways of accomplishing the same thing and making sure that they all continue to work without breaking anything else is really tricky. Over the years, I’ve collected about 2500 animations that range from “unit test” animations to production animations from large published apps. Every single change I make checks every pixel of every animation and provides a visual diff. This helps give me the confidence that I can release new versions without subtly breaking any of the hundreds of thousands of apps that use Lottie. Since I implemented this, there have been nearly 0 regressions in the core renderer.
🟣 Challenging projects are a great way to learn. That’s actually why I wrote the Jetpack Compose internals book 📖 do you push yourself to leave your comfort zone and try new languages and technologies often?
I love to push my comfort zone. A few examples come to mind:
I spent a year working with React Native at Airbnb
I switched to management for two years at Tonal
I learned Flutter and implemented a few features on the Tonal companion app.
I switched to full stack at Watershed
I have built and maintained countless side projects with various technologies ranging from Jetpack Compose to tRPC and Next.JS on web.
🟣 I’m curious about your work at Tonal. Did you get the hardware to develop and debug the product? Did you use some special emulator or emulator config?
Yes, I have a Tonal at home and we had them all over the office pre-COVID. We also have an emulator config that I did most of my actual work on. Working with Tonal on an emulator is pretty simple, we had a display config that matched the specs of the hardware and set up keyboard shortcuts to emulate things like reps and sets during the workout experience.
🟣 Did you take the chance to get fit also? Because I probably would 😆
I’ve lifted 6.8 million lbs and have a 180-week workout streak on my Tonal but I’ll let you decide if I’m fit or not.
🟣 Do you have any side projects or do you prefer to not do any coding after work?
Lottie and Mavericks are side projects! I also have a few other small websites and services that I manage purely for myself as a learning experience or because I wanted something that didn’t yet exist.
🟣 Outside of work and programming overall, what hobbies do you have? Would you recommend other people to have other hobbies outside of programming?
I am an avid Formula 1 fan and have a VR sim racing setup that I enjoy. I also love spending time with my friends and making the most of living in the bay area. I would absolutely recommend that people step away from their computers periodically and explore the human aspects of life. I personally find that after a long session of coding, it’s really hard to relax and interact with people again. I have to unwind from the highly structured and logical ways of thinking that coding requires in order to learn to relax, laugh, and interact with humans again.
🟣 Do you have a strict daily routine? (not only exercise related)
I don’t have a strict routine. I roughly sleep from midnight to 7:30 every day and try to work out on Tonal 3-4 times per week. Outside of that, I try to take things one step at a time and stay in tune with how I’m feeling on a given day/week/month to adjust my schedule and work habits as needed.
🟣 Many devs find the current state of the art of Android libraries a bit overwhelming (so many updates every day!) do you manage to stay up-to-date with all the latest versions, technologies, patterns, and trends, or do you adopt a more selective approach about what to learn?
I don’t think there are any shortcuts to learning how to absorb and filter the firehose of information from the community. Historically, Twitter has been my hub of information. You start to see trends and ideas through repetition. If it’s really good, you’ll probably bump into it more than once.
Twitter has historically been an incredible source of information and connection for the Android community. Unfortunately, since Elon took over, the community has partially splintered. Some have moved to Mastodon and some have reduced or paused their presence so it’s not quite as good as it was a few years ago.
In addition to Twitter, I’d recommend checking out androiddev.social (Mastodon), Android Weekly (newsletter), jetc.dev (newsletter), Awesome Android (newsletter), and Kotlin Weekly (newsletter). Google has also started to publish high quality content on Modern Android Development.
The more time you spend with Android, the more you’ll start to use your intuition to gauge a particular author or library more quickly.
🟣 What are some of the biggest challenges you find when working on the API surface of a library?
🟣 This is a question I like to make, now that I am writing a book about soft skills. Many people hide the fact that they face burnout. Did you ever experience burnout or some of its symptoms? How did you combat it?
I’m fortunate that I’m passionate about coding and have had a really exciting slate of jobs. I’ve also changed things up enough to get ahead of burnout before it occurs. I don’t think I’m immune to it and try hard to take care of myself and be in tune with my feelings. However, people’s situations and factors that lead to burnout are so varied that getting to its root can take months or years of deep personal reflection.
🟣 Are you a supporter of remote work or do you like a more hybrid setup where you can go to an office from time to time?
Using the term “supporter” suggests that there is a correct working style. In reality, different people will have different preferences. The same person may want to be in person or remote depending on whether they have kids, what city they live in, or a variety of other factors.
We’ve seen a massive forced growth of remote work since COVID and my prediction is that we’ll start to see companies differentiate on working styles. Some companies such as GitHub are going full remote whereas others like Watershed are opting for a more in-person culture.
The availability of remote work is going to dramatically increase employment options for engineers and aspiring engineers from around the world but there will always be people who choose to move to an urban hub where they can work alongside their coworkers.
🟣 What advice would you give to that younger Gabriel right when he was just starting in this industry?
Culture is contagious. If the people around you are positive and helpful, it will bring out your most positive and helpful side. On the flip side, if the people around you are cynical and operate with their own self-interests in mind, it will bring out that side of you, too.
In either environment, it is easy to accept the status quo as predetermined. However, as a member of a team or company culture, you absolutely have the ability to bend it. If you see the culture bending in the wrong direction, don’t just complain. That will just draw attention to it and accelerate it. Change it, provide alternative viewpoints, take the high road, and make the change you want to see. Others will follow.
🟣 Where can readers find you?
🟣 Thanks so much for sharing with us Gabriel 🙏 See you around! 🙋♂️
More interviews are warming up already 🔥 if you liked this one, you might want to consider subscribing to this newsletter. Join the other 1200+ readers 🚀