Foreca Weather app is one of the most loved weather apps in the App Store and Play Store all around the world. In this article we share with you the story of how we made the app using the React Native platform and weather data provided by Foreca Weather API. We hope this article will help you to understand what it takes to develop a weather app for a global audience.
Before going into details about our experiences in coding with React Native, let us give you a brief introduction about us as the developer of Foreca Weather app.
Foreca has provided digital weather services for consumers and developers for more than 20 years via weather websites, apps and data interfaces. We collect weather data from all around the world and then create our own global weather forecasts by combining meteorological expertise with cutting-edge data science.
The high reliability of Foreca weather forecasts is based on our state-of-the-art utilization of available weather models and data processing methods. The most widely used global weather models are the GFS from NOAA and the higher-quality European ECMWF data. Because we collect and process data not only from them but also from a number of other sources, like local models, satellites and radars as well, we are able to provide one of the most accurate and reliable forecasting in the world. As we benchmark our forecasts against GFS and ECMWF, Foreca clearly beats them on a regular basis. (Read more about our forecast production).
Our forecasts are delivered via Foreca Weather API to our own app but also to our business customers, such as media houses and developers who have licensed it for their own consumer weather applications and websites. Because we use the API also in our own consumer services, and get feedback directly from our own end-users all around the world, we are able to continuously develop it better for our business customers as well.
Foreca Weather app has been available in app stores for over ten years already, so it has amassed a large and loyal user base who rely on our app. Users routinely praise the app is not only easy to use, but also provides a lot of valuable information. This coupled with our responsive customer service, have set our app above the rest.
However, a couple of years ago (2018) we were in a situation where we felt our app needed a bigger update. In addition, we wanted to be able to develop the app in an even more agile way - responding quickly to customer feedback and smoothly adapting to device and technology updates.
The major obstacle to agile development was that the Android and iOS apps were created separately in native code. This meant the apps were also a little bit different to each other in terms of functionality and customer experience.
One big change was that we wanted to create a unified customer experience for both user segments, and be able to build and maintain these changes more efficiently. Because of these requirements, React Native was the clear winner to help us accomplish this.
For small teams like ours that only have one to two front-end developers working on the app interface, the multi-platform nature of React Native is quite essential. If we had to handle the two native platforms separately, we wouldn’t be able to develop and launch new features or updates as efficiently as we do now. This was one of the main reasons we chose React Native. In addition to this, there are a number of other advantages to which we will discuss next.
To start with, the speed of UI development in React Native is much faster than that of classic native development. Apple has only recently started to improve the native experience with things like SwiftUI, but it’s still not close to the fast pace of working with React Native. For example, when we needed to create new weather data graphs for our application, it was important to be able to iterate over very small changes quickly.
Because we have chosen the customer-centric approach to the development of the app, we do always sketch the features and functionality almost to the final version before starting to look at if it’s possible to make or not with React Native. That way we are not too limited to the most obvious solutions that would be easy to develop, but wouldn’t necessarily be the best for the user.
Luckily, React Native has proven to be flexible enough to enable us to code what we have needed. Of course, there have been some situations where we have been enforced to adjust our initial plans due to some obstacles. But, we have also found some enablers from the developer community.
In fact, one of the best things in React Native is that it has an active developer community. After all, for most of our needs we’ve found either existing solutions or at least other developers who have been working on similar things.
Even though React Native has matured as a framework compared to what it was a couple of years ago, some challenges remain.
One of the challenges is that whenever there’s an update on native APIs or SDKs by Apple, Google, or by third parties, with React Native there’s going to be the extra step of waiting for the community to support these new shiny things (or wait for React Native itself to support them). One example of this was in 2019 when Dark Mode and dynamic platform colors were introduced in iOS 13. Fortunately, the React Native developer community is very quick to react to updates. And of course, if there’s no community solution, we have the option to make it ourselves.
We have also found that projects made with React Native tend to accumulate a lot of dependencies. We think this is something that we have to accept and something that people with web development experience do not necessarily consider a big deal. Again, this is kind of a mixed pro and a con, as it does also indicate that we have the opportunity to build on top of the work done by the community.
Last thing to mention, performance profiling or debugging is something that has been challenging with React Native, but the experience has improved over time as people have shared tools and methods.
Weather conditions can be very different depending on the location in the Earth. That’s why the users tend to have different kinds of needs for a weather app depending where they are living or travelling. Having a heterogenous user base, it was quite obvious for us that we need to react quickly to all (yes, all!) the feedback we get, otherwise it’s impossible to understand all the various needs. React Native was chosen to enable us to achieve that agile customer-centric development. We have maintained the new app design for two years with React Native, so we can speak with actual experience under our belts.
There have been times when we have missed some kind of freedom that classic native code development would have been offered with some features we have planned, but after all, the advantages of multi-platform coding are still slightly better when it comes to agility and efficiency to respond to our customers' needs.
There is always room for improvement whatever platform you will pick and you always need to make some compromises, but in general, we have found React Native beats the other options.
- Foreca app development team