I understand every angle of a successful agile team including cross-disciplinary collaboration, user-centred testing and design, lean UX, early & continuous delivery, TDD, test automation and how to funnel business requirements through user stories.
React / Redux
page load performance
TDD & automated tests
CI / CD
First impressions of React Native
Several times in recent years I've swerved opportunities to get involved in native app development, favouring mobile web instead. My reasons included:
- A preconception that the dev workflow unavoidably involved a monster-truck compilation taking minutes (versus hitting browser refresh). I'd once had a horrendous experience using Maven in a Java web app, I imagined native app compilation would be similar.
- A slightly smug personal conviction that the open web is morally superior to proprietary formats designed to swell the coffers of Apple and Google.
- As a freelancer, I have to pick and choose which technologies to focus on, to stay competitive for more work. My impression of the London market was that there were more jobs in web technologies such as Node and React.
My current project has been a lot of fun - prototyping new product ideas, mainly for the web using React, but when the chance came up to sketch out some native app UI, it seemed daft not to take the chance to pick up some React Native, making my first objection listed above, a non-issue.
I was surprised by how painless the React Native compilation process is. The initial compile for my basic app took around a minute on a 2012 Macbook Air that didn't seem to need to pause for breath. Every subsequent change showed in the UI within a second or two due to React Native's 'hot reloading'.
My biggest realisation was simply that the minute-by-minute thought process of developing a native app seems to be far simpler. A few reasons that occurred to me were:
- You don't have to consider page load performance. As app assets are installed ahead of first use, the only impact of network latency is on the data fetches. Ok, modern web browsers have some persistent caching capability with service workers but that doesn't help with the all-important first (page) impression. And even if web assets are cached, every time you release new code the only chance for the web app to update itself is during the page load. Native apps have the obvious advantage of downloading their updates when they're not being used.
- Fewer targets to worry about - one or more versions each of iOS and Android, as opposed to web UI development where you typically consider numerous mobile, tablet and desktop web browsers.
- UI layout challenges are typically less demanding, as you'd expect for small screens, and React Native keeps things simple by offering only one layout strategy - flexbox - and giving every container flex layout by default.
One major area that I didn't get into during this prototyping phase was app store publication. I only generated a signed .apk file for installation on test Android devices. My impression of the simplified workflow offered by native app development might just be torpedoed when we turn the prototypes into publicly available apps and work through the attendant security and performance audits.
Overall, the React Native experience has left me wanting more. Being able to easily integrate device capabilities like voice recognition and camera directly into the UI let us take the user experience in new directions.