For the past several years, most of my work has been building mobile apps using React Native. Building apps with React Native is hard. To be successful, you not only need a strong React foundation, but you should also have familiarity with Android, iOS, and their respective features, guidelines, and app stores.
It was a long road getting to where I felt comfortable and competent working in and leading projects in this space, so I thought I’d take a moment to reflect on and share my experience getting into React Native from a React web and full-stack background.
I’ve changed focuses quite a bit during my career. I started out as an Enterprise Java developer in 2011, working at a large company. After a couple of years, I was craving some variety and new challenges, so I moved to an enterprise consulting agency, where I continued to work with Enterprise Java.
Though I had more variety working at a consulting company, I felt like the enterprise space wasn’t where I wanted to spend all of my time and decided to transition my career toward working more with startups and greenfield projects. I learned Ruby on Rails and AngularJS in my free time and in 2014 ended up getting a job at an agency that primarily used Rails and where the projects were mostly for startups or were new products for existing companies.
I’ve pretty much camped out in this general space since then, though I’ve worked at a variety of different companies in these past nine years.
In 2016, I began freelancing, and that is when I worked on my first mobile apps, for two separate clients. React Native was still pretty new then, having been released just a year prior in 2015. I had played around with it a bit, but I was only just learning React and was also intimidated by the prospect of stepping away from the web tech that I was used to.
For that reason, I built my first two mobile apps using Ionic Framework. Ionic has changed in the years since, but at the time was a hybrid app solution built on top of Cordova and using Angular. A hybrid app is a single page web app that gets packaged into a native container and distributed as a mobile app.
While I was still using the web tech that I was used to, these first two apps were valuable learning experiences. I learned a lot about the mobile space, including how to set up the Apple and Play app stores, manage releases, and configure certain native functionality that Ionic exposed.
While I wouldn’t recommend building hybrid mobile apps in most cases these days, this introduction to mobile served as a valuable primer that later made my transition from React to React Native simpler.
Around the same time that I started working with the Ionic mobile apps, I also started using React more and more. Prior to 2016, AngularJS was my go-to front-end library when I needed to build an interactive experience. During 2016, I began to prefer React and started a piecemeal conversion of a client’s codebase from AngularJS to React in addition to using it on other projects.
Over the next several years, I had many more opportunities to use React for clients, including for some large apps and highly interactive experiences.
In 2018, I started freelancing for a new client. They were building a React Native mobile app, and I was engaged to help out both on the app and with the Ruby on Rails back-end. The app was nearly completed, but I helped develop the in-app subscription functionality along with other features and bug fixes in preparation for the app to go live.
This ended up being a good introduction to React Native for me. I was working alongside another consultant who was more experienced with React Native (and who coincidentally used to work at thoughtbot). The main app structure and foundation were also already in place, allowing me to follow conventions that were already set instead of having to make those decisions while I was still new to the framework.
While it was helpful that I didn’t have to make the foundational app decisions while I was still new to React Native, it was also disorienting to step into a mostly completed codebase. There was a lot going on, and I remember struggling to fully understand how everything worked together. All of the React Native components and APIs, along with the surrounding ecosystem were new to me.
Even if it was uncomfortable at first, I was still able to contribute meaningfully to the app, and working on this app was a big step toward building my understanding of React Native.
In 2018, I started working at my dream job: thoughtbot. I had followed thoughtbot since 2014 when I was learning Ruby on Rails, and I looked up to them as an agency, due to their blog, open source, and transparency with the thoughtbot Playbook. We’re fully remote now, but at the time, thoughtbot still had local offices at the time, and I joined at the small Austin, TX office. My transition to thoughtbot went smoothly, since I had been working at agencies for the previous six years and had been using the same tech stack that most thoughtbot projects used.
Almost immediately after joining, I was asked to help out with a React Native app that needed additional assistance. This gave me the opportunity to see another codebase and learn from how it was set up. One thing I like about consulting is that I get to see a lot of codebases, and I feel like I learn a lot each time I get the opportunity to see a new one.
After starting at thoughtbot, I had lots of chances to build my React web knowledge and slowly started working on more and more React Native projects.
My second and third React Native projects were for the same client I’d freelanced for a year or two earlier. For the first engagement, I implemented new designs in their app. This was a good opportunity for me to familiarize myself more with the codebase while mostly making simpler cosmetic changes. The next time the client engaged us, I built a large new feature into the app and found that I could do this without difficulty. I had grown a lot.
Over the next few years, I had the opportunity to build new React Native apps for four more clients and be involved with a couple of others. Each time I work on an app, I learn new things and feel more comfortable in the space.
Looking back, having a solid React foundation was fundamental to starting in React Native. If I didn’t know how to architect a large app with React, I wouldn’t be able to do it in React Native, either.
While React knowledge is important, the mobile world comes with lots of new concepts, processes, and requirements that take a long time to learn. I was introduced to many of those when I built my first hybrid apps. I was thrown in head-first and experienced a few app store rejections and setbacks, but I gained valuable experience.
When I finally started working in React Native, getting to work alongside a more experienced developer for my first project was instrumental in my early success, as they were able to guide me with some of the mobile-specific knowledge that I was still learning as well as with React Native components and APIs that I wasn’t yet familiar with. After that first project, having lighter-weight projects early on before being responsible for full app implementations also helped me have an on-ramp to React Native.
After having the two hybrid apps and a couple React Native projects under my belt, I felt ready to take the lead on building new React Native apps, and the rest is history!