Could you introduce your app in a few sentences?
The TenX Wallet enables user to send and receive cryptocurrencies and spend with the TenX Card. With the TenX Wallet, users can manage Bitcoin, Ethereum, or Litecoin cryptocurrency accounts, and spend their cryptocurrency with the TenX Card.
What made you decide to use/switch to React Native?
At TenX, we decided to switch to React Native from two native iOS and Android mobile apps primarily for the productivity and cost benefits. React Native gives us a lean and agile workflow and allows us to iterate our product much faster, develop features quickly, and provide a more reliable user experience. It also gives us a more integrated team - our designers can help contribute code directly. Finally, fewer developers can have a bigger impact on the product.
How did you transition to React Native?
The transition was made over about a 6 month period where a React Native app was built from scratch to mirror the existing iOS and Android feature set, while we continued to maintain our existing native apps. We focused development to reach a minimum level of feature parity which would allow us to launch the app in a fast timeline. Once the app was roughly halfway finished, we started to incorporate design and product teams in review sessions, and soon after began working with our QA team as well once we had end to end features finished which could be tested. In the last month our entire team became very aligned behind React Native to drive it to the finish line.
I was very familiar with React before working on this project, but React Native was totally new to me. There is definitely a learning curve for mobile compared to web. There are a lot of idiosyncrasies and nuances which require specific learning, e.g. APIs that exist on mobile but not web. Overall, application lifecycle and user interaction/experience is very different on mobile compared to web. However, it’s surprising how similar the experience with React is. Once you get past a lot of the specific differences, it’s still a React application which behaves basically the same as on web, so React expertise translates over very easily.
Have your tried other cross platform technologies before using React Native?
I have not tried any other cross platform technologies before so I can’t reflect on them or compare them to React Native.
How has adopting React Native affected developer productivity?
I would say develop productivity is very strong as a result of adopting React Native. We had a new engineer join recently and they were able to onboard and ship code which went to production on their first day - meaning code to an iOS and Android app! This is basically unheard of for native app development and really showcases the productivity gains which React Native brings to the table.
In addition, there have been some minor bugs we’ve found since launching which we have fixed in a matter of minutes, for both platforms, thanks to over the air updates. Again, this is simply not possible for native mobile apps.
Furthermore, lately we are building a separate product feature as a web app and we have been able to very easily migrate several of our React Native components, business logic, and API tools directly to a web app, allowing us to move forward on this new product capability very quickly.
Overall, I don’t think anything can compete with the productivity gains offered by React Native.
Which tools, libraries and frameworks are part of your development process with React Native?
We use Expo to build and develop our app, which is written in TypeScript. The TypeScript tooling and ecosystem with VS Code is very important and useful to us, in addition to the development workflow provided by Expo. If we need more debugging features we use React Native Debugger, but this is not always necessary. We automate a lot of our workflow using Concourse CI, which is continually building and testing our code. In terms of our app architecture, we rely on Apollo/GraphQL to manage application data and network APIs, React Navigation for routing, and Styled Components for styling. We use Jest for unit testing, in addition to some internal tools we’ve developed.
What resources have you used to learn React Native? Books, tutorials, courses etc. Anything you can recommend?
I relied heavily on the typical software developer arsenal of official documentation, various guides and articles, Stack Overflow posts, and video tutorials. Once you have a basic foundation with React Native, you can start investigating specific questions and find a lot of helpful answers already. One challenge is that React Native and related technologies are still moving quite fast so you may find answers or guides that are already out of date or not fully accurate. You just have to be diligent and get used to the mindset that if something is not working correctly it may be a bug in some library dependency!
What are some things that you don’t like about React Native or that need to be improved?
There are still many things which are suboptimal compared to native app development. For instance, native apps have had many years to optimize things like gestures, animations, scrolling, user feedback, etc. So, many of these things are still just a little too laggy or the interaction just isn’t quite right with many of the React Native APIs or libraries yet. I expect this will continue improving, but sometimes it can be a downside of working with React Native.
There are other limitations as well, for instance we encountered an obscure layout bug on iOS in addition to an issue with the built in fetch library which required a workaround using the XMLHttpRequest API directly. Again, much of this is just a result of the early stage of these technologies, but things like this do cause a lot of challenges during development when they show up.
Anything else you would like to mention?
The TenX Product and Engineer teams have published a few articles detailing our motivation for adopting React Native (Parts I and II) as well as a deep dive into the actual migration from the engineering team, feel free to read more if you are interested!