May 23, 2022
Meet the Developers: Mobile Edition (Pritesh Nandgaonkar)
By Dmitry Vinnik, Pritesh Nandgaonkar and Jesslyn Tannady
Originally posted here.
For today's interview, we have Pritesh Nandgaonkar, who works on the WhatsApp Apple Companion Team.
Before joining the WhatsApp Apple Companion Team, he was on the Mobile Dev Velocity team. He worked on open source projects like Flipper and Yoga. Although he is an iOS developer at Meta, he had opportunities to work with different programming languages like JavaScript, Rust, C++ and Java.
You can learn more about Pritesh on his GitHub, LinkedIn and Twitter. If you want to follow his non-work activities, he also has an Instagram.
Could you start us off by talking about your open source work before joining the WhatsApp Apple Companion team?
I was a core contributor to Flipper, an open-source, extensible mobile debugger. Ever since Meta first created Flipper, the project has been used heavily. When we decided to open source it back in 2018, I worked on the iOS parts of the project. This work was challenging because Meta has standardized infrastructure and engineering requirements. In contrast, the open source community could easily have thousands of different configurations in use. By open-sourcing the iOS part of Flipper, I needed to make many changes across the project codebase. For example, I had to ensure that Flipper was still compatible with internal Meta tooling like our build system, Buck, and industry-standard tools like xcodebuild and cocoapods.
In addition to working on the iOS support for Flipper, I also contributed to several core Flipper plugins like Layout, Network and Crash Reporter. These plugins facilitate the most complex and yet the most common activity all developers participate in:debugging. With features like Crash Reporter and Network analyzer, engineers can observe how a particular bug occurs, identify the core problem and ultimately fix it. If you're interested in learning more about Flipper, here's a great video that explains the project in beginner-friendly terms.
Is there a feature in Flipper that you're particularly proud to have worked on and can talk more about?
One of the most exciting parts of working on an open source project like Flipper is that I had an opportunity to step out of my comfort zone. There were many instances where I deviated from conventional iOS developer work while working on Flipper, which was a great challenge.
One such challenge was to work on the platform-agnostic sides of the project. Since Flipper is a mobile debugging tool, I implemented many mobile-related plugins, such as the Layout plugin. We designed this plugin to display the entire layout hierarchy alongside its UI and Custom attributes.
After sharing this Layout plugin, it has gained wide popularity internally and externally. One of our goals was to ensure a great developer experience. So we designed the plugin where a mobile developer only has to do two things to set it up: first, initialize the plugin, then set up the UIApplication and LayoutDescriptorMapper.
Although we originally designed this plugin for iOS, the plugin's architecture allows developers to make its functionality work for Mac apps. Developers only need to create a mapper for a different node type, and it's ready to go!
Was all your open source work at Meta dedicated to Flipper?
I also worked on Yoga,a layout engine for rendering flexbox layouts for Android and iOS, several integrations on ComponentKit and a layout plugin for React Native.
I love how my job at Meta allows me to contribute to open source. I spend my work hours working on public code that benefits developers everywhere. There's something special about seeing developers build their projects on top of the open-sourced efforts I've worked on. It feels great to know that I played a small role in making their projects possible.
What has the transition into being a full-time mobile developer been like?
When I was working on the Mobile Dev Velocity team, I primarily focused on the tools to improve the developer experience of mobile engineers at Meta. While it was thrilling to work on plugins and help address my fellow developers' pain points, I wasn't working on anything external user-facing.
Now that I'm on the WhatsApp Apple Companion Team, I'm working on an application used by billions of people worldwide. It's so satisfying to work on new WhatsApp features and then roll them out in an application that I use daily to connect with my friends and family.
My team has been improving the WhatsApp syncing feature between multiple devices. We noticed that this could be a frustrating experience for users who want to access their WhatsApp account from various platforms.
We are working to build better ways to securely sync accounts across multiple devices. Still, it is a challenging problem to solve. While we focus on syncing things like messages, read receipts, media files and status broadcasts, our overarching theme is to ensure our users' security on WhatsApp. This effort involves syncing privacy settings and blocklists while securely handling personal data across devices.
What does a typical workday look like for you?
My mobile dev work typically falls into feature development and bug fixing. Fortunately, I get to work with many other teams and stakeholders like project managers or designers when dealing with new features for products like the WhatsApp Mac app. My role often requires a cross-collaborative effort that involves other teams, and it's one of the things that I love the most about my job. There is always a feeling of close partnership towards building something meaningful.
Apart from working on new functionalities, I often fix bugs and other defects. These issues are often caught by other members of my team or the Quality Assurance (QA) Team. The QA Team is essential in ensuring that the WhatsApp iOS/Mac apps meet our high standard of user experience.
Here at Meta, we care about growing great teams. In addition to my dev work, I spend a significant amount of time interviewing and mentoring new engineers at Meta.
Can you tell us more about your work recruiting and training talent?
We're always recruiting mobile developers at Meta. An organization is only as good as the people who make it up. I want to make sure that we hire great engineers and excellent collaborators to help work on some of the world's biggest mobile apps.
Once engineers get hired at Meta, they go through the Bootcamp's onboarding program. Bootcamp is designed to immerse new engineers into Meta's codebase and give them the flexibility to decide which projects they'd like to work on.
As part of the Bootcamp program, I host office hours for new engineers interested in learning iOS development. These sessions aim to help answer any questions from the iOS experts and those curious about mobile development.
What's a misconception people often have about mobile development?
I sometimes hear that mobile UI development can be repetitive and mundane. This criticism usually involves saying that mobile UI mainly involves permutations of tableview layouts and UI controls.
I completely disagree with this. Mobile UI development is so much more than that. It involves many components like architecting the app, thinking about data flow, handling data storage, designing UI and more.
For example, one of the most challenging issues that mobile developers have to solve is testing. Testing is an essential part of feature development. It ensures that the app is scalable and extensible for feature development. Nonetheless, it sometimes forces developers to refactor the entire codebase to test new code. When refactoring code, I often have to make changes in data handling and the architectural aspects of the surrounding code.
Can you talk about what you're working on right now?
Nowadays, I am working on setting up tests for WhatsApp across different platforms and making it work with our Meta internal continuous integration (CI) systems.
There are thousands of developers contributing to Meta's codebase every day. At the scale Meta operates at, it wouldn't be feasible to verify that all the code meets specific standards manually. To tackle this high demand, we use a CI system to help us ship good code quickly and help us derisk errors in production.
For context, WhatsApp joined the Meta family through an acquisition in 2014, so the code wasn't written or tested with Meta's custom CI system. Since WhatsApp became a part of Meta, we have been working on integrating the Meta CI system with the WhatsApp codebase. However, this integration introduced a set of challenges like making sure that it avoids false positives.
My main focus has been on collaborating with the team that manages the internal CI system, removing any blockers and making CI run tests correctly across all WhatsApp platforms.
Is there something especially exciting to you about being a mobile dev here?
Being at Meta has been instrumental to my growth as an engineer. By working here, I am exposed to many different stacks across various projects. By stepping out of my comfort zone and exploring development outside of my area of expertise (i.e., mobile), I continue to improve as a developer.
During my time at Meta, I had the opportunity to explore non-mobile work by designing endpoints and UIs in JavaScript for desktops. And when I wanted to try my hand at mobile work, I switched teams and now work as an iOS developer on a user-facing product. My manager was supportive of my choice, and I'm glad that Meta had all these processes in place to enable this kind of internal team mobility.
In addition to the opportunities to try different workflows, is there anything else that has stood out to you about being a mobile developer at Meta?
What I've always been interested in is solving complex problems. There are a lot of unique challenges that a mobile developer at Meta gets to try their hand at.
One of the great things about working with Meta is the enormous scale where I can apply my mobile skills. I encounter challenges here that I've never experienced before at other companies, and I get to work with some of the brightest engineers in the world. It's inspiring to be surrounded by people redefining paradigms in the mobile space.
For example, I had an opportunity to work with a team behind React Native. It is an open source framework for building native applications using React, which was initially developed at Meta. Thanks to our community, the project has grown to where engineers specialize entirely in React Native and make their careers out of it.
What's been energizing you about working in the general mobile space today?
It's exciting how crucial mobile devices become to our everyday lives. For example, we now use our phones to scan QR codes when we want to look at the menu in a restaurant. We use our phones to navigate and understand the world, and we use our phones to feel more connected to our loved ones.
We went from a world where you only used your phone to call people. Now, most of the world's population has a supercomputer in their pocket that they can use to access any information. As mobile developers, we have a significant role in making people's lives easier with better apps and features. I can't wait to see the kind of mobile experiences that will become commonplace in the future.
I believe that the metaverse will play a big part in the future of us connecting to one another. It will revolutionize how we communicate with our friends and family. I'm looking forward to how the mobile space will evolve alongside the metaverse and the types of mobile integration possibilities between semi-virtual and virtual worlds. It will surely open up avenues for different ideas and innovations in the mobile space.
With that in mind, can you recommend any resources for people getting started in mobile development?
If you're interested in iOS development, I recommend reading the basic Apple documentation. I began learning by reading the book "Programming in Objective C by Stephen Kochan." If you're interested in learning Swift, the Swift documentation should be your first stop. There are also a lot of great videos out there for getting started with mobile development.
To learn more about Meta Open Source, visit our open source site, subscribe to our YouTube channel, or follow us on Twitter, Facebook and LinkedIn.