The Good & Bad of Bleeding Edge Mobile App Development: A Story of React Native
A few months ago my team started the exciting journey of creating a startup and developing a mobile app (PICLIF). What the app is will be told another time, but what I'd like to share now is the good and bad experiences of using a bleeding edge technology for developing the app.
Once we knew what we wanted to build and how we wanted it to work, we naturally set out to get proposals on how much time and money it would take to build. The one thing I wasn't expecting was to get a crash course in the different technologies and frameworks that could be used to build an app. Every development firm that we met with had one thing in common: they were going to create the app using a common code base that can compile down to an iOS app and Android app. Simply put, this means that we could write it once but have apps for both platforms. This also means spending less money and getting to market faster - two selling points that I was very much in favor of. The other thing that (most of) these firms had in common was that they want to build our app with the latest and greatest technology, React Native.
What is React Native? React Native is the next generation of React - a Javascript code library developed by Facebook and Instagram, which was released on Github in 2013, but as recently as last year has gained a ton of momentum. Why is it becoming so popular? With React Native your application logic is written in JavaScript and your application UI is fully native; therefore you have none of the compromises typically associated with an HTML5 app. This means that a JavaScript developer can create a native app for both iOS and Android - meaning your pool of developers is larger and that the process is quicker and less expensive than building and maintaining two native apps (one for iOS and one for Android).
Based on the functionality that we needed, React Native was overwhelming recommended to us. I was convinced that this was the way to go, so we selected our partner (Rivers Agile Solutions) and we were ready to build our dreams. Since then we've had the awesome (but at times painful) experience of working with a bleeding edge technology. Would I do it again? Read on and find out.
The Good
All Eyes On React
It's the hot new thing, so people are looking for it to either be a huge success or a huge failure. One thing for sure is that it's getting enough attention to show up on everyone’s radar. Early adopters may be taking a gamble with React, but the fact that it's backed by Facebook, and some of the most popular apps in the world use it (Airbnb, Box, Facebook, GitHub, Google, Instagram, LinkedIn, Microsoft, Pinterest, Pixar Animation Studios, Twitter, Uber, and WhatsApp all use React code), it's safe to say that it's going to be here for while. There are a lot of resources being thrown at React Native from Facebook and the community, meaning that it's constantly changing and improving. Be aware that we have a con dedicated to this exact point, but there are some big benefits when you're using a technology that has this type of investment going into it.
Strong Community Support
Since there are many companies and developers quickly jumping on board, you can see a strong community developing very quickly. Also, there are many developers out there that can develop with Javascript, so you have a very large audience of talented people in the development community that can contribute. Since it is such a new technology, this community relies heavily on support from each other to get over some of the pains and hurdles that we mention below.
React + Redux Is Becoming a Dev Favorite
Developers are gravitating toward React because when you add in other technologies it makes their lives much easier. When coupled with Redux and Immutable, maintaining and accessing the state of the application is an afterthought when compared to other popular JS frameworks. Even React Native by itself makes the developer’s life easier (for example you can make changes to your codebase for a running app without the need to restart or recompile). This means more efficient developers, and more importantly, less-annoyed developers, resulting in happier developers who work harder.
Performance
This may be the most important feature of all and is actually why every firm was adamant about us using React Native to develop our app. We needed our app to be fast and consistent (I am not a fan of waiting for apps to load - even if it's a few seconds). I wanted the best performance possible, and that meant going with the newest technology on the market. I'll spare you the heavy details, but React has several tricks up its sleeve that make it faster than other frameworks available (such as using it with Firebase, and having a Native UI).
The Bad
You're The First To Break It
Although the community support is very strong, if you're the first to attempt something new with React Native and are not successful, then you'll find that there isn't going to be an existing solution. This can slow down development and possibly bring you to a grinding halt if it's a big feature of the product.
Vague Errors and Long Trips Down the Rabbit Hole
Errors that are reported in React Native aren't the most precise, and oftentimes you'll find yourself very far down the "rabbit hole" for even the smallest error. This can become costly, and unfortunately you may not have any other way to resolve these issues since there may be little to no support from the community for new problems.
Rapidly Changing Means Rapidly Rewriting
React Native releases a new build every two weeks. Awesome, right? Yes and no. It's a double-edged sword - an update may have what you need to code that new feature, but it may break something that you've already written. In the past two builds we've experienced significant changes that caused us to spend time rewriting code to fix what the update broke. We're better for it now, but this cost us time, and that means more money. Additionally, since React Native is under constant development (and relatively new to the JS community) this can often result in deprecated code appearing in 3rd party modules.
Expected Functions May Not Be There Yet
Useful features that you are expecting to be available may not be there yet - and it may not work the way you want it to. There have been several obvious features that we expected to be able to do easily, but for one reason or another were not able to pull it off the way we would have liked. This left us with some difficult decisions and compromises, and we had to give up functionality to only hope that we can tweak it with a future update to get the functionality back. Again this slows us down, holds us back, and costs more money.
There you have it, the good and the bad of our experience with React Native (so far at least). So would I choose React Native again? Absolutely! The performance benefits compared to other frameworks are hard to ignore, regardless if we've had some speed bumps. We're also fortunate enough to have a development partner that believes in developing top quality apps without compromises - and Rivers Agile Solutions did a great job of handling the hurdles that React has consistently put in our way. The added benefit is that through this process Rivers Agile Solutions has been able to give back to the community, helping other developers get through some of the hurdles that we've tackled on this project. I'm a strong proponent of investing in the right technology to make future updates and maintenance easier and cheaper, and at the moment all signs are pointing to React Native as being the right technology!
Do you have questions? Want to learn more about our experience? Email me at [email protected] and I'll be happy to help!
Simulation, Optimization, and Digital Twin Solutions
8yGood article Mike thank you for sharing the ups and downs of your experience.. The piclif site looks great.