A Delicate Balance: The Programming Languages and Frameworks in Unite Us’ Tech Stack

Aaron Berns
uniteus
Published in
4 min readJul 16, 2020

Programming languages and the frameworks built around them underpin every aspect of a modern software solution. Leveraging a particular language and framework has ramifications for performance, reliability, security, maintainability, and recruiting. Because of this, the choice to include a language and framework should be preceded by careful deliberation. Our philosophy at Unite Us is to use the best language and framework for the task at hand, while also striving to keep the variety of deployed technologies at a manageable level. Maintaining that balance is challenging at times, especially given our rapid growth.

From a high-level perspective, we’ve found that writing the majority of our applications and services in three core languages has allowed us to stay in the technological sweet-spot between best technological fit and manageability. Our three main languages are Javascript, Ruby, and Golang, which correspond roughly to our front-end, core back-end, and tangential services respectively. We also use Scala for data processing. I’ll spend some time discussing how we use each of the main three and then dedicate a final section to Scala.

Javascript

It should be no surprise that we use Javascript to implement our customer-facing applications as it’s the foundation of all single-page apps. We’ve invested heavily in the React framework to give our users that smooth, desktop-app-in-a-browser experience. React also enables our front-end team to maintain an extensive library of reusable components that can be tapped during feature development to ensure UI continuity and implementation efficiency.

We’ve also used Javascript in our serverless development in combination with Node.js and AWS Lambda functions. An example use case is a notification service that generates templated email and sms messages, then sends them off to update our users when something important happens to their patients.

Ruby on Rails

For the majority of our backend implementations, we’ve chosen, and continue to choose, Ruby on Rails for its out-of-the-box RESTful API strengths. There’s a reason why Rails has been chosen by countless startups as the backbone of their applications: its ability to quickly and efficiently turn an idea into an MVP by abstracting away the complexity of the datastore to server relationship is something that has helped us quickly prototype multiple applications.

The power of Rails extends well beyond the early days of a startup. We’re constantly adding new features to our applications, and those new features often involve new models, routes, and migrations. Rails’ sane defaults make these changes relatively painless for the RESTful APIs we build with it, and these changes often come out to just a few lines of code.

Rails eases the difficulty of API development further through the breadth and depth of its community support and resulting Gems. Authentication, authorization, CORS handling, Redis, and countless other complex additions to our APIs have all been implemented using well documented community libraries. Gems for less well-known functionality are also abundant, which again speaks to the devotion of its development community.

A final benefit of Rails is that when paired with Docker for containerization and Kubernetes for deployment, it has proven to be capable of handling the rapid growth in usership we’ve been experiencing.

Golang

In addition to a few core APIs that leverage Rails, Unite Us also has several smaller applications that provide more specialized and supportive functionality. For most of these applications, Golang has been the language of choice due to its easy-to-learn syntax, lightweight application frameworks, and extensive community support. For receiving, processing, and transmitting data both internally, and to a lesser extent, externally, Golang has become a valuable asset.

When we created a service to act as a dedicated central store for patient contact information, we leveraged GoKit’s microservice framework to set up gRPC endpoints that link together our three main APIs and our data warehouse. Go also came in handy during the development of our Business Intelligence offering, which embeds Tableau along with some custom features in our main React application. Go’s GinGonic framework allowed us to build an appropriately light RESTful API to link and route customized front-end requests with our hosted Tableau server.

Since AWS’ addition of Go to its supported Lambda languages in 2018, we’ve also been using it for some of our Lambda functions. Functions written in Go require very little memory and execute quickly which makes them an ideal way to implement serverless technology.

Scala

The expansion of our business intelligence offerings and the construction of a data warehouse led to the adoption of Scala as the go-to language for our data team. In order to process the large amount of data that flows through our system and make it actionable, our data team quickly turned to Apache Spark. When compared with a typical MapReduce solution such as Hadoop, Spark’s in-RAM processing allows us to clean and transform our incoming data much faster while letting us take advantage of higher level abstractions such as DataFrames and Datasets. Spark Structured Streaming sweetens the deal by allowing us to link our jobs, servers, and storage in a way that ensures data flow and integrity. Our spark jobs are written in Scala for the same reason that Spark itself was written in Scala: scalability. It has proven to be a powerful and enjoyable addition to our language set.

Hopefully, this quick overview of the languages and frameworks we use at Unite Us has shed some light on our engineering paradigm. We strive every day to maintain a healthy balance between performance, ease of use, and sustainability in the face of rapid growth and a swiftly changing development landscape.

***

If our approach appeals to you and you’re interested in learning more about Engineering at Unite Us, check out our open positions - we’d love to hear from you.

--

--