Skill
Uses latest versions of React and React Native when possible
Uses higher-order components to reduce code duplication
Shares code between iOS/Android components when possible
Uses Redux to manage application state
Uses CodePush to roll out app updates without App Store review
Uses Crashlytics for error notification
Uses Fabric and Fastlane to automate beta builds and App Store submissions
Specifies dependencies strictly in package.json to avoid unintended upgrades
Uses Jest to test services and components
Separates logic from component state using services
Presents loading state and errors to user
Handles promise rejections appropriately (not `console.log`)
Styles components effectively using Flexbox
Uses animations where appropriate to improve user experience
Sends a semantic version number alongside all API requests