React Native Engineering: Mobile Developers, Recruitment, Architecture and Scaling

Martynas Bardauskas
Wix Engineering
Published in
8 min readAug 28, 2019
Photo by Austin Distel on Unsplash

Wix started its mobile journey with React Native back in 2015. Since then our mobile team has grown a lot, and so one question I’ve been asked quite often was: what kind of mobile developers we, at Wix, are looking for? I thought the answer was easy, so in most cases I just answered that front-end engineers will be easier to recruit and onboard, while we accept engineers with all kinds of different backgrounds. I still stand by these words, though I feel it’s missing some context and elaboration.

Let’s begin with why Wix has chosen React Native in the first place. The whole concept has evolved a lot since 2016, but the bottom line was to enable us to scale our mobile engineering. So if we want to develop with React Native, the approach was to have mostly engineers with a front-end skill set, who know React and JavaScript. Additionally we need just a few Native (Objective-C / Java) engineers to deal with low-level issues or to replace components with Native where performance is paramount.

Our architecture and infrastructure allow us to do it differently

The strive for scaling led us to an interesting app architecture and infrastructure. We’ve created the Core of the app which contains all of our native dependencies, a concept similar to Expo, tailored specifically for Wix. Thus every module working in the app can create specific configurations for development, where they can mock other internal dependencies or even test out the integration between actual modules.

The Core even contains a pre-built app image for loading only JavaScript part of the app. This means that every team is getting the same native environment for development and are not doing native builds, which saves time for builds and solving native integration issues. The whole app is designed to be configurable in terms of modules and use a kind of module registry where each module exposes it’s public methods and screens. This means that each team can have independent testing setup and different CI lifecycle (RCs/GAs).

In fact, our app repository that is being released to Google Play or App Store is just a configuration and list of dependencies, it doesn’t contain a line of code which is used in the app.

The 3 types of developers

Having this infrastructure allowed us to get front-end developers up to speed with our mobile development in just a few days. Therefore, most of our Mobile Software Engineers, who work with Wix products, are working with the JavaScript side of React Native, despite the fact that a lot of them come from Objective-C / Java backgrounds.

Taking into account all of the above, it makes sense to have mostly engineers with a front-end skill set. However, as I’ve pointed out, a significant number of engineers in Wix come from a Native (Objective-C / Java) background. That is because they have experience in things that front-end engineers lack. First of all, they know the mobile ecosystem, they’re more aware of the platform’s nuances, like the need to care about battery life, take into account low-power devices, data-plans and many other things. Also, they don’t mind learning and using JavaScript as their primary language. In addition, we have guild days and guild weeks dedicated to work on the native parts of our App or individual native pet projects.

This brings us to a third type of background — unrelated to mobile. There aren’t many people with exotic backgrounds (e.g. embedded C) in Wix Mobile, however, I believe that as long as you are a software engineer striving to continuously improve and broaden your skill set, you can still be a great fit. Our onboarding process takes Native (Objective-C / Java) developers up to speed with React Native development in three to four weeks, I strongly believe it would take a developer of any background a similar amount of time to achieve the same. We’ve also released a react-native crash course, which is similar to what we use internally, just without topics which are specifically tailored for Wix.

Why would you want to work with React Native?

There are many things which make Wix a great place to work in as a mobile software engineer, such as use of bleeding edge technologies, testing practices, continuous integration and many other buzzwords. However, these qualities are all across Wix and are not specific to Mobile Development or React Native. In fact, Mobile Development stack-wise is very much similar to Front-end Development and code-wise is almost identical.

I believe that working with React Native is making us better developers with a wider skill set. React Native is very similar to React in the Web, except for slight differences which I believe are quite minor. The essential difference between the Web and mobile is the ecosystem of the platform, with mobile you have to pay more attention to things like battery life, slow devices, traffic, etc.

I’ve elaborated more about these nuances in a blog post about React Native’s Performance. Along with these nuances come some technical challenges, such as start-up time, limitations of the bridge, and performance in general, but we’re tackling them one by one on our end, and we’re eager for upcoming improvements coming from React Native creators themselves. Because of these nuances and challenges, we’ve grown a lot as software engineers.

We are also a huge contributor to React Native open-source projects. As mentioned in the video above, when Wix started doing mobile with React Native, it was decided to come up with new open source projects anytime we would hit a wall with the current ecosystem, thus now we and the community can enjoy projects like Detox, react-native-navigation, react-native-calendars, react-native-interactable, react-native-ui-lib, and many others. We also like to share our experience with blog posts, you might find some of them interesting: mistakes in react.js we keep doing over and over again, the full react-native layout cheat sheet, what’s new in storybook 4 react-native, design system for dummies, create your own flavor of react-native app in 3 easy steps, react-native crash course, getting started with remx, react-native-navigation v2 is here

React Native skeptics

Having said this, I believe I should address the skeptics, especially with all the talk about companies ditching React Native. First of all, I believe that we have skeptics for virtually everything. Everyone has their favorite programming languages, frameworks, libraries, operating systems — you name it. And it’s natural to think that your choice is somehow better (don’t be that guy/gal). We do have React-Native skeptics even here in Wix, but they seem to agree that the pace we’re going with React-Native is significantly faster than going Native. They usually have quite a healthy skepticism towards the crappy parts of iOS/Objective-C, Android/Java, React-Native & Javascript in general and that’s OK, everyone should.

Clash between iOS and Android. Remixed “Extra Fabulous Comics”
Clash between iOS and Android. Remixed “Extra Fabulous Comics”

I believe that you should assess the situation and decide for yourself what kind of frameworks/programming languages/operating systems/mobile platforms/libraries works for you and what doesn’t. Because there are already tons of people criticizing those things you like — maybe they have a good reason to, maybe they just like to rant.

I want to finish with addressing the idea that React Native might be a niche of software engineering. I do not argue with that because of the differences that React Native has compared to React in Web, however, for the past several years people use their mobile devices more than computers, so the need for Mobile Apps, Progressive Web Apps and Websites is rising. With that, so is the need for JavaScript developers. When you work with React Native you’re still very close to the technological stack of other mobile-oriented solutions, i.e., Web and PWAs. Therefore, I believe that working with React Native opens the possibility for many options to choose from career-wise down the path.

If you’re interested but not really sure if React Native is your cup of tea — you’re welcome for a coffee in our office, no strings attached! We can discuss our approaches and engineering challenges and answer your questions. Once you’re ready to give it a shot — we will kick off the hiring process in Wix.

But how should I prepare?

If you are interested in working with us but still lack the courage to apply, here are a couple of things I can share, that will help you know what to expect. My colleague Donatas has written a blog post on our values and the stages of hiring that we have, I encourage you to read it. I also wish to elaborate on that a bit more so you would feel more comfortable coming to an interview. Our recruiting process has 5 parts, two of them are technical, where you will have to prove yourself as an engineer: a Technical task and a Technical interview.

Note that the process might differ depending on the site you’re applying to. In this case, I’m describing the process that we have here in Wix Lithuania.

Technical task

You will meet with two Wix engineers and you’ll get a coding task to do in our office. As for the task itself, it can be a task to manipulate and render user-defined data structures using specified types of algorithms, or a task to implement a type of parser according to a given specification. We care less about the UI of the app you write (e.g., layout, style, animations), correctness and code quality are more important. We expect you to come up with algorithms yourself instead of using a library to solve the main challenges we rise. The purpose is to see your approach to the given problem and how you get things done: your choice of language and tools, the way you prioritize the tasks and organize the code. The result of this task provides the interviewers some insights for the technical interview.

Technical interview

Once again, you will meet with two Wix engineers (different from the two you talked to in the previous stage) for an open discussion on topics like software engineering concepts (design patterns such as singleton, ports & adapters and others, and design principles such as SOLID, DRY, and others), tools and languages you’re familiar with, projects you’ve worked on, and ways you keep your engineering skills and knowledge up-to-date. We will discuss your take on the technical task and the decisions you’ve made. Depending on the result, we may ask you to do some extra tweaks to your code on the fly, such as add a missing functionality or fix a bug. We may ask you to design a system or ask your opinion on a language framework. The topic of the question depends on your background. The goal for Wix engineers is to learn about your technical skills and experience.

I hope this post has given you insight as to what kind of mobile developers we’re looking for, what we do in Wix Mobile, the challenges we face, and finally what you could expect when you apply to Wix. No matter which background you have, front-end or Native, you’ll learn advanced JavaScript and React techniques, a touch of Native development and of course, all the things that come with the mobile ecosystem itself. Feel free to contact me personally on LinkedIn if you have any further questions.

--

--