We recently joined the OutCast team to chat about their app! What does it do, how does it work, and why is it so dang popular?
OutCast is a mobile weather and marine forecast application that is used by boaters, fishermen, divers, and other marine users to stay in touch with local weather and water conditions. What started as a personal project for the creators – Ed Gonzalez and William Kennedy from Ardan Studios – has turned into a well-regarded and essential app even among professionals who spend most of their time on the water.
Outcast.io brings together all the data that is needed to view and forecast marine conditions in a convenient and intuitive format. Whereas some weather apps may provide basic tidal information, the Outcast app goes many steps further by including real-time data from observation stations, buoys, radar imagery, air quality metrics, and more to provide a more complete picture of what’s happening in marine environments.
How OutCast Came About
The app originated as a side project out of personal need. One of the creators, Ed Gonzalez, has engages in a lot of outdoor recreational activities including boating, fishing, hunting, and more. In pursuit of these hobbies, he always had a hard time figuring out what the conditions were going to be out in the open ocean, on the reef, or at his favorite fishing spots. In the past, he would spend up to half an hour at a time going through different websites to figure out what the conditions were for a particular buoy or marine plot. If the weather started to look promising, he’d increase his analysis all the way up to the event date to arrive at a go/no-go decision.
All this effort and its effectiveness, convinced Ed and his business partner to build a mobile app to replicate this process and, as a result, OutCast was born. The mobile app lets users get weather for just about any location they want – whether it was their current location or a waypoint that was important to them. It is one of the few, if not only, mobile apps on the market today that pulls buoy data, marine forecasts, tidal information, and other data directly from numerous observations stations together into single format and interface.
How OutCast Works
Although the app can be found in the Weather section in the Apple Store and on Google Play, it is more than just another weather app. It provides sophisticated marine forecasts for boaters and other marine professionals, who want to know not only current conditions but also how are they might improve or worsen as the day or week goes by.
The application is quickly becoming an essential tool as indicated by feedback from boat captains in Alaska, avid fishermen off the coast of Florida, and even Navy divers based in Virginia. In fact, Ed and William have been surprised by the number of professionals who rely on it on a daily basis.
The key to the success of the application is the convenience of having weather and marine data integrated in one place. The data comes from several sources – NOAA being one of the primary ones but which presents significant challenges. NOAA does not currently offer a convenient API to access data, so it needs to be pulled from a variety of sources in a variety of formats. There are five main types of data – buoy data, tides, marine forecasts, air quality, and radar imagery.
- The OutCast team is able to pull buoy data relatively easily from the NOAA site and get it into a delimited file format.
- They can also retrieve tidal information in a flat-file format as well but here they then have to parse it a bit prior storing in in their database.
- Marine forecast data presents the biggest challenge because there is no standard XML or text data they can retrieve. OutCast has to go through thousands of marine stations in the U.S. and the scrape the data from HTML pages, or in some cases, access custom text file. All of this takes effort and processing to turn the raw data into usable information.
- Also challenging is getting air quality data into the system because it is also not attainable via simple APIs. To obtain this data, they need to access sites, extract data, transform it, and then load it into their system. This difficulty in retrieving data is the reason why you won’t find a lot of other applications offering this type data.
- The final addition to the app is radar imagery. OutCast leverages a web service of tiled images, then does its own tile animations and serves up the frames. To give an idea of the workloads they need to process, at any given point, there might be a hundred-plus images loaded onto a device, all in animated form.
In order to be relevant and usable, however, all this data needs to be keep up-to-date. This means the app needs to access sites, format data, and populate their database on a regular and continuous schedule. As a result, the app pulls data every 10 minutes. One of the challenges was to build the programs to do this work, and do it in a reliably so every 10 minutes the workloads are guaranteed to run fast, and get the data accurately and reliably into their system.
How OutCast Uses Iron.io
The application itself is pretty simple. The front-end exists as an iOS application and an Android app that consumes a set of web APIs. The APIs are written in Go and hosted on Heroku.
Behind the API, the app uses Iron.io for all the workload processing. The backend code base is all written using the Go programming language. The codebase currently consists of four modules that cover all the data sources. The OutCast team is leveraging Iron.io to perform the job scheduling, workload processing, and task orchestration.
Their Go workers run within the IronWorker service every ten minutes to hit the hundreds of web pages the app needs to access in order to retrieve the data, put it in the form that is needed, and then load it into their primary MongoDB database. The app repeats this set of tasks every ten minutes, every day, all the time.
The way that the team has constructed the application fits a pattern that is emerging in many mobile and cloud applications – a very functional front-end, a fast and lightweight API layer, and a highly distributed, concurrent workload processing component. Management and monitoring is provided by a robust dashboards for each along with logging, error handling, and notification services.
To this end, IronWorker let’s them not only schedule and run jobs in a distributed manner, but also orchestrate, monitor and understand what’s going on with a lot of activities that is taking place in their application. For example, within the Iron.io dashboard, OutCast connected their logs to Papertrail. This provides a central place for logging, which Outcast then turbocharged a bit. In addition to their main workers, they’ve written other workers that rip through these logs every five minutes and pull out a variety of events to put in their InfluxDB metrics database.
The mobile app is finding many fans and adherents. It provides a clear picture of the present and future conditions. It’s not 100% percent predictive yet, but that is where Ed and William want to take it. They plan to add a lot more predictive analysis.
One of the goals is to have the app monitor for certain conditions, then send an alert when those conditions are met. For example, the OutCast team wants users to be able to take snapshots of particular weather conditions – possibly a great day on the lake – then have the app monitor this location and let users know when conditions are forecasted to become similar. The team hasn’t gotten that far but they have all the data they need from their current sources and, with IronWorker, all the processing power they need to get there.