Sera Systems is a US-based provider of field service management software for plumbing, electrical, HVAC (heating, ventilation, air conditioning), and other home service businesses.
Its flagship product, a cloud-based software platform with accompanying mobile and web apps, enables home service companies to automate and speed up back office processes like booking, providing quotes, scheduling, invoicing, and sharing information between customers, technicians, and the office team.
Tracking the way for a tracker
One of the critical elements of their service ecosystem is a GPS tracker, which sends a worker’s GPS location data to the system and its admin dashboard so that users with admin roles can assign orders. Geodata is displayed on a map and processed for some position-related calculations.
Initially, this was a custom microservice based on legacy Elixir/Phoenix code, which was sending GPS data via WebSockets. This solution was tough to maintain in the Ruby on Rails environment: although it appears Ruby-like, it was an independent solution with many nuances. In addition, the team needed more features from the tracker. Therefore, they decided to migrate to a more cutting-edge solution, and to our delight, they opted for the Evil Martian product—AnyCable. After all, cables work better and are more native to Ruby on Rails applications. Our team was to help Sera with migration and deployment.
Tech stack and AnyCable client
The platform consisted of a Rails monolith on the backend, web applications, and a mobile application based on Vue and Ionic. The flow of the tracking service was also quite simple: get the data, write it to the database, and send it to end users who are looking at the map.
This allowed for a fairly fast, smooth migration to AnyCable. In the first stage, we slightly rewrote the current functionality and abstracted the real-time client directly. Then, we leveraged the server implementation and tested it using TestProf, a Martian open source project.
After that, we connected our anycable-client
to the mobile application and set up feature toggling from GitLab: first, to roll out the new server gradually, and second, to be able to roll back if something goes wrong. Mobile applications are not web apps—they won’t be updated on their own—so it was necessary to flexibly configure everything. In the end, we added our client to the Vue-based web application.