Identified confirmed/reported issues such as re-renders and created a backlog for potential improvements.
measure
Used Macro tool measurements.
ANALYZE
Selected the most promising performance changes.
IMPROVE
Implemented changes following React Native best practices.
CONTROL
Re-measured with the Marco tool and compared to the 4.58.0 native version.
Deployment
Developed the release process for both Android and iOS.
API DESIGN
Proposed an API based on the Rive Android library features.
INTEGRATION
Implemented Rive SDK integration for Android and created an example app for testing.
iOS SUPPORT
Extended the integration to iOS after successful Android testing.
AUTOMATION
Created a Github Action workflow for automated library releases.
PUBLIC RELEASE
Made the library publicly available on platforms like CocoaPods and Maven.
DEPENDENCIES
Managing dependencies, including Expo and react-native packages for each new release.
RELEASES
Automating the release process with custom GitHub Actions.
TRAINING
Providing React Native training through pair programming, code reviews, and workshops.
01
CODE REFACTORING
Kicked off the project with refactoring the whole socket.MIGRATION Migrated the codebase to TypeScript.
02
MIGRATION
Migrated the codebase to TypeScript.
03
DEPENDENCIES
Upgraded major dependencies such as Expo, React Navigation, and React Query.
04
PAYMENTS
Created two options: In-app purchase with Google Play or App Store and credit card payment.
05
linking
Sorted out links, integrated content, and implemented html rendering.
We provided full front-end support, project configuration, feature parity, and expert advice on technical and user experience. We also implemented a new design guideline, including dark mode with auto theme detection.
01
RN PAPER
Forked the React Native Paper library.
02
ci
Established continuous integration for automated code updates.
03
testing
Set up a Storybook for component testing.
04
design
Developed the basis of the design – color, layout, and typography.
Once we had the basics down, we started working on the UI library components. The components we developed included: AppBar, TextField. Button, Icon Button, Toast, which included animation and swipe-to-dismiss, Match Status, Search, and many more!
Apart from all the fixes and improvements, we provided metrics that should be tracked over time so the client knows exactly what to monitor and correct to maintain great performance levels long term.
16.8s
App start time, before 48.5s
8.6s
Report screen load time, before 15.9s
2.5s
Sending a message, before 14.5s
60FPS
Average FPS on LHN
2.6s
Search screen load time, before 11.8s
01
Together
we acted as staff augmentation within Advantys’ team.
02
Engaged
in collaborative problem-solving and solution exploration.
03
supervised
by Advantys' CTO, the project utilized GitHub, Notion, and Slack for communication.
01
migrating
from a custom server-side rendering (SSR) solution to Next.js
02
Focusing
on Core Web Vitals metrics
03
Optimizing
a large shared JS bundle
04
Introducing
Fast Refresh for accelerated development iterations
The introduction of Fast Refresh in Next.js further accelerated development iterations. All in all, it contributed to an enhanced user and developer experience.In a span of several months, our team effectively overhauled the AutoZone app's performance, which initially struggled on both desktop and mobile devices. To find out more about the whole AutoZone project, head over to the case study on main case study title.
01
strong
architecture with professional maintenance and continuous updates
02
high
code coverage with quality-compliant unit and integration tests
03
Comprehensive
testing, including end-to-end.
04
Faster
time-to-market with mobile process automation.
05
New PoC
features like biometrics and mobile health kit integration.
Last but not least, our collaboration significantly enhanced the knowledge of Thriva's development team regarding React and React Native.
Students new to programming and React Native
Web developers unfamiliar with device APIs and native apps
Native developers exploring web app frameworks and React Native's UX potential
React Native developers prototyping and sharing ideas
Library maintainers creating examples and documentation
Users providing reproducible cases for bug reports
Speakers and workshop presenters conducting live coding sessions
“The team at Callstack are the most experienced and trusted engineers in the React Native community and ecosystem.”
Nader Dabit
DevRel + XD at EigenLayer / EigenDA
at Amazon Web Services
This information will be used only to contact you. For details, check our Privacy Policy.
Not only were they able to help us accomplish the goals we set out for the project, they also brought many great ideas that contributed to its success. We are now in a much better place than we were before working with Callstack and I would recommend them to anyone who needs expert JavaScript engineers.
Todd Williams
-
Gluestick Author
In brief
We optimized the client’s mobile app performance and introduced a custom tool to measure performance regressions. We set up performance tests and documentation to enable a seamless transition of knowledge with the in-house team of developers.
Client Info
Entain is one of the world’s largest sports betting and gaming entertainment groups.
Industry
Commercial gaming
Company type
Enterprise
Region
Australia, Asia & Oceania
Tech Info
Performance optimization project with the best practices, approaches & tech solutions
Technologies
React Native | Native
Platforms
iOS | Android
Stack
Redux | Tanstack | Reassure | GraphQL
Performance Boost
87.5%
In 87.5% of the screens, the number of rerenders decreased or remained the same, which affected the acceleration of the initial performance.
In brief
Managing large developer team consisting of dozens of people is undoubtedly difficult and challenging. Having senior developers on the team can definitely help, but in the long-term there is a need of a solution - GlueStick - a command line interface tool for an easy and quick development of universal React applications with Redux integration. It contains fully functional test environment, Server Side Rendering and an asset bundler without any configuration step required.
The solution should have preferably met all of the following criteria:
being production-ready and stable, and simplifying the process of creating Docker container for the production environment,
allowing to render React applications on NodeJS server - Server Side Rendering.
providing an easy and quick project creation tool,
providing a common project structure between different projects in order to let
the developers easily switch between them, thus minimizing the cost of diving into the codebase,
provide an easy abstraction over complex internal logic in an attempt to let the developers focus on a business logic and the product itself, rather than on an infrastructure, therefore allowing to ship fixes and new features faster.
The first iteration of the tool meeting all of the above points was being developed internally by the client. Our Callstack team were there to implement the missing features and reach the stable version 1.0.
Getting into the codebase
Besides dealing with the API design we also had to figure out the best way to unify components and their styles throughout all the projects. The best solution that came to our minds, was creating separate GitHub repository with shared components, and then importing those whenever necessary. Creating somewhat a library with all of the building blocks that combined together would bring a beautiful visual experience for the users.
trying to implement new features and reach stability by monkey patching the code and deal with existing inconsistencies,
replacing the core components of the tool with already existing 3rd party projects, for instance Next.js,
refactoring the codebase while implementing some of the features, applying industry-standard improvements and then implementing other major functionalities.
A major refactor
Having considered all of the above approaches, we have settled on the 3rd one - a major refactor.
First logical step was to improve the architecture. Before the version 1.0, GlueStick was just one package installed globally, which had a serious drawback - GlueStick’s version was not tied to a specific project, meaning that whenever new version was released, there was a high chance of breaking other projects, especially in major zero stage (0.x).Our team decided to go with a solution similar to React Native CLI - by having a global gluestick-cli and a local gluestick project dependency. The former creates a new project and redirects other commands to local Gluestick module, which holds the implementation and is specific to a project.
To simplify the process of creating new components, containers or reducers, the generators API was designed, that would create a file based on options and template.Each one of the team members has been handed over some specific functionalities to refactor, remove inconsistencies and add Flowtypes to check for possible errors. We have migrated the unit test to Jest, which later allowed a single test runner to execute tests from different packages.For a bundler, considering the requirements, there was only a single choice - Webpack. It’s maturity and flexibility offered a fine-grained control and simplified the process of creating a server for Server Side Rendering of React applications.We have converted GlueStick repository to a monorepo. Now those two packages could be stored in a single repository thanks to Lerna - a monorepo management tool.
The continuous integration service was replaced with CircleCI 1.0 due to being more developed and stable. Later on we upgraded to CircleCI 2.0, which allowed to define workflow and parallelize stages.
Since each client’s project had different requirements, we created a plugin system in an attempt to support the specific needs - different styling solutions, which combined with Server Side Rendering, had to be handled individually.
Production-ready development tool
The result of our work was a stable, production-ready development tool with great developer experience, Hot Module Replacement support and short project creation to shipment time.
Our client have received a stable product for internal use, with no rejections for QA team. It helps them shipping their products and new features faster and with much greater confidence.