Insights

Chain React Day #2

BY IAN OUTTERSIDE

I’ve spent a week now on the West coast of the United States and found it to be a very friendly and welcoming place. My experience at Chain React day 1 only continued this pattern, and I was excited to get straight back for its conclusion for day 2 to continue my deep dive into all things React Native. In particular, I was looking forward to a panel discussion between some of the influential names present at the conference.

RxJS and the Limitations of React Native

The first talk of the day was given by Tracy Lee of This Dot Labs. I’ve worked in the past with functional reactive programming in Objective-C, and dabbled with RxSwift for swift too – so I was really looking forward to seeing what Tracy had to say about RxJS. Tracy explained the fundamentals of reactive programming before going into how it was implemented in JavaScript via RxJS.  Tracy showed off some great examples of what can be achieved with RxJS in React Native, with a hilarious demo that I’d recommend you check out on the vods which should be on YouTube in a few weeks. Her demonstration walked through a real integration with sample code, something I raved about in my day 1 review as being something I love to see. I can attest to the power of reactive programming from other languages, so I’m definitely going to give it a try with React Native in future.

Following Tracy was my favourite talk of the 2 days, given by Ram N from Facebook. The talk focussed on the state of React Native today, Facebook’s internal adoption of RN, and the roadmap for RN in the months ahead.  The first interesting piece of the talk was to discover that the entire marketplace section of the Facebook app is powered in production today by React Native. Not only is that 100+ screens (something Facebook estimates to be the largest React Native integration currently in production on the iOS and Android app stores), but the team working on the marketplace internally at Facebook is larger than the team that works on the news feed. Facebook were very keen to stress throughout the talk that they are doubling down on React Native, but were also aware of its state right now.

Ram went on to talk about the current limitations of React Native, acknowledging some well known issues and even addressing directly the recent Airbnb post (more on that later). The key takeaway to Ram’s introduction was that React Native was built as an async language, but that means it has problems at times when things need to be synchronous (e.g. integrating scrollview native implementations). Ram went on to explain why this is “under the hood”, illustrating how React Native communicates and performs layout with the 3 concurrent threads that it currently interacts with. Whilst I won’t get too technical here, I would highly suggest looking out for the YouTube video of the talk if you’re at all interested.

Ram moved on to explain what the limitations of their current approach is, before providing a sneak preview of how Facebook plans to solve this with a major rewrite of React Native. Critically, this rewrite will enable some synchronous behaviour for high priority updates, which should fix a large number of the concurrency issues, increase performance, and improve user experience. I can’t wait to see how this changes the react native ecosystem, but best of all, Facebook are committed to not requiring any changes from developers of their apps in order to benefit from their changes.

The Power of GraphQL and Brownfield React Native

A quick coffee break later, and it was back to the talks with Peggy Rayzis from Apollo to demonstrate the power and features of GraphQL. GraphQL has numerous advantages over regular api fetch, including minimising the size of wire fetch requests and ensuring you have exactly the data you need, no more, no less.  Peggy advocated that taking this further, React Native app developers can use the GraphQL client together with “Apollo Link State” to effectively remove the need for Redux completely from apps. I can definitely appreciate having one source of truth for all things data inside your app has the potential to dramatically reduce headaches, so this is well worth keeping an eye on.

Next up was Harry Tormey discussing using React Native in a brownfield app, rather than a greenfield one. This particular challenge formed a key component of the Airbnb post, and it was interesting to hear Harry articulate his experience of doing work like this. Harry estimated that it was between 2 – 3 times harder to integrate RN into an existing application, than starting a greenfield RN focussed app. Harry felt that therefore, the work should not be undertaken lightly, and is really mainly suited to large organisations that can commit to the investment. Finally, Harry explained the process he felt was best at tackling such an integration.

Powering VR and the Future of Unified Experience

The final talk of the morning came from Michaela Lehr focussing on a new web standard for AR and VR called WebXR. Whilst not strictly a React Native technology, Michaela talked about React360 and AFrame, two frameworks powering AR and VR on the web today. Without a doubt, the most interesting aspect to her talk was her discussion around user experience in VR, and establishing patterns and best practices.  With the help of some hilarious GIFs she demonstrated some of the most important “what not to do’s”, including rapid changes in balance and placing items in VR in physically unreachable places.

Following lunch, the panel I had been looking forward to all day kicked off, addressing a number of different topics. First to be discussed was developer attitudes to React Native, with an interesting point being raised that traditionally web developers (especially JavaScript devs) are somewhat used to the rapid rate of change in technology they work with. This can be in quite a stark contrast to the native mobile world that’s been cultivated by Apple and Google, with their yearly developer conferences and OS upgrades. It was hypothesised that this may well have contributed to some of the Airbnb situation.

The age old discussion of “device specific experiences vs unified experiences” was examined at length by Jen Luker and Eric Vicenti – and whilst it was clear that both parties had the users best experience at heart, they had wildly different viewpoints as to how that may be achieved. Jen argued that each piece of hardware has its own capabilities and accessibility strengths, and that these should be played to. Eric on the other hand argued that we’re now approaching an era of development in which we don’t need to accept this any more, and we can look to a future of the unified experience.

Airbnb and the Technical Issues of React Native

The most interesting part of the panel was a six minute post mortem of the Airbnb post, with most of the panel weighing in. Hoping this might be addressed, I captured the segment on video and (posting with permission from Todd at Infinite Red) have put it on YouTube to review – check it out at https://youtu.be/Jn5mKKVbeTg. The points raised were fascinating, but the general consensus was that there were 3 fundamental causes for the Airbnb post.  The first was that they were encountering technical issues with React Native, which Facebook have acknowledged and indeed believe will be fixed with their rewrite. Secondly, these issues were exasperated by the fact they were approaching React Native from a brownfield point of view, hoping to reduce the complexity of introducing new features when in fact that was likely not to be the case. Finally, and perhaps most importantly – those in the room felt the post highlighted cultural problems at Airbnb in relation to their support of React Native, in other words they were simply actively resistant to it. Ultimately, React Native requires developer buy in, and just like any other technology it is doomed to fail in an environment where buy in doesn’t occur.

ReasonML, SVG and “Good Enough isn’t Good Enough”

After the panel, Mike Grabowski presented his talk on ReasonML, a strongly typed language that is directly competing with Microsoft’s TypeScript and Facebook’s Flow. Having tried Flow, I can definitely appreciate the support of strong typing in JavaScript, so I was keen to see what differentiated Reason. Mike walked through the features of Reason, before demonstrating one of its most powerful features, the ability to effectively type check existing JavaScript libraries through use of bindings. It was a really interesting talk and demonstration, but my honest assessment is that the trend among attendees in adoption of strongly typed JavaScript appeared to be towards Typescript rather than Flow or Reason.

The penultimate talk of the day was from Ori Harel discussing the use of SVG within React Native apps. Ori started simple and worked his way up in complexity right to animated D3 graphs, providing sample code through. Having used some of the suggestions Ori made in some of our own apps at Komodo, I can definitely attest to them.

The final talk of the day was given by Jani Eväkallio from Formidable Labs entitled “Good Enough isn’t Good Enough”. The talk was presented in a unique way, comparing the current state of development to various artistic pieces, before deep diving into what will make successful apps, and why we as developers have to strive to deliver apps that don’t just suffice, but exceed expectations in delighting users if we want them to be successful, and if indeed React Native itself is to be successful.

I had a fantastic 2 days at Chain React and indeed my week in Portland was amazing. The tech scene and it’s developing nature in Portland is worth a blog post in and of itself, but I’ll save that for another day. Instead, let me say to all the speakers and attendees, thanks for all the fantastic talks and insights, and I look forward to the next Chain React.

Insights

Curiosity is what drives us to learn and grow professionally enabling us to remain vigilant to change and the opportunities it presents for our clients. We document some of this learning and share it via our 'Insights' section.