New post - 'An intro to agile for new devs'

The core of my skillset is front end, including expertise in React, page load performance, accessibility and authoring UI component libraries. I also have 8 years’ solid experience of Node.js.

I understand every angle of a successful agile team including user-centred research and design, continuous delivery, TDD, test automation & strategy, pairing and shared ownership of quality and dev-ops.

I have skills in:

React

scalable CSS including CSS-in-JS

Node.js

Javascript

Typescript

page performance

accessibility

micro-services

micro-frontends

progressive enhancement

TDD & unit tests

BDD & end-to-end tests

responsive / mobile web

CI / CD

agile

rapid prototyping

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:

  1. The task of becoming expert at Java or Objective-C. I'm not opposed to the argument that learning multiple languages might make you a better developer in all of them - I don't have strong evidence one way or another, having only slight competence in Ruby as a second language to Javascript - but my personal preference is to focus on getting as far as I can with Javascript; ES6 is almost like learning a new language anyway.
  2. 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.
  3. A slightly smug personal conviction that the open web is morally superior to proprietary formats designed to swell the coffers of Apple and Google.
  4. 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 than a web site or app. A few reasons that occurred to me were:

  1. 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.
  2. 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.
  3. 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.

jonnywyatt2 - [@] - gmail.com