Exploring the System Architecture of Ubie’s global division

Lukas Prasuhn
5 min readApr 5, 2023

--

This article is intended for software engineers who are interested in joining our team at Ubie in the global division, which focuses on our Symptom Checker for English speakers. For those who are not familiar with Ubie, we are an innovative startup from Japan with a mission to transform healthcare with the help of technology. You can read more about us on our company page.

Below, I will provide a brief overview of the key technologies that you can expect to work with. Please note that the information provided below is current as of Spring 2023. Although Ubie is open to new technologies, replacing a major part of the architecture can be costly. This article focuses on technologies expected to remain relevant for the next few years.

The Architecture for Application Developers in a Nutshell: GraphQL and TypeScript for Microservices

Ubie has an exceptionally flat corporate structure, with a lot of autonomy for each team. To ensure the independent development, deployment, and management of applications, many internal features are provided by microservices. Two noteworthy examples that are relevant for the global subdivision are the “Disease Suggestion Engine,” managed by the AI team, and the “Account System,” managed by the platform team. Most other applications that you may encounter were either newly created or forked from their Japanese counterpart, and their development does not require communication with the Japanese teams. For language and communication protocol, we mostly use TypeScript and GraphQL.

Why TypeScript?

TypeScript is the primary language used in applications within the global division. Although it is not mandatory to use TypeScript for all applications, it is encouraged in order to minimize the overhead of learning new technologies.

TypeScript was chosen for a couple of reasons. First, with ever-increasing domain complexity, strong typing helps to reduce bugs and other issues during development. With TypeScript, it’s also possible to easily fall back to weak type checking, which can increase development speed if necessary. Since Ubie is still in a growing phase, it’s important to find a good balance between development speed and maintaining a high standard of code quality. Another reason for using TypeScript is that we can utilize it for both front-end and back-end logic. Software engineers at Ubie are typically full-stack developers, and not having to switch between languages really helps productivity.

Why GraphQL?

Most applications within the global division communicate with each other using GraphQL. We use a gateway API approach to connect various microservices. Each product has its own API gateway and assembles a final GraphQL schema (the “supergraph”) for the public-facing application.

Although we also benefit from the performance improvements of GraphQL by selecting only the necessary data for our use cases, the primary reason for using GraphQL is its strongly typed nature and API documentation capabilities. With plugins from the GraphQL ecosystem, type definitions are automatically generated, improving code quality without much effort.

GraphQL was chosen over other technologies, such as traditional REST APIs with OpenAPI/Swagger, due to its all-in-one approach. GraphQL combines types, documentation, and the query language itself. Furthermore, it has become popular for its API gateway capabilities, such as schema stitching and Apollo Federation, which offers an opinionated stitching approach. These features are especially useful when working with microservices.

About SRE and CI/CD

Currently, the Japanese team manages SRE-related tasks. I am hesitant to provide too many details, as things may change rapidly depending on our success and growth. However, I believe that certain aspects are unlikely to change in the next few years.

Our infrastructure is built on Google services. We use the entire Google Cloud stack, including CloudSQL for databases, Kubernetes for container orchestration, and BigQuery for data analysis. These are just a few of the most prominent examples.

Application engineers take full responsibility for CI/CD, which is mostly implemented by GitHub features such as GitHub Actions. Our responsibility is to create and push a working and tested Docker image that is horizontally scalable into the Google registry. From there, the SRE team will take over, complete the final deployment step, and monitor the applications accordingly.

Technology you are likely to encounter

While most of the code you will use on a daily basis is written in TypeScript, there are some older applications that are not. Additionally, we sometimes need to work with systems on the Japanese side of the company. As a result, there are plenty of opportunities to work with other technologies as well. Below is a list of technologies and tools you may come across during application development, ordered by likelihood:

Oversimplified Architecture Diagram

A few words about ML engineering

This is also one of the domains that is currently managed by the Japanese teams. Although it never hurts to have a good basic understanding of machine learning, it is not required to start a career as an (Application) Software Engineer at Ubie.

Predicting how this will change in the future is also very difficult, especially given the recent boom of generative AI. We are currently exploring how these types of systems can help Ubie, but as of Spring 2023, there is no dedicated ML team for the global division yet.

Preparing for a Software Engineering Career at Ubie

First of all, in addition to engineering knowledge, we focus on personal traits that we call “Ubieness”. You can read more about it in this article, but essentially it refers to the qualities expected in a fast-paced startup environment where you will have significant responsibility from day one.

Although expertise in all of the listed technologies is not required, gaining knowledge about them beforehand would be beneficial. It is particularly valuable to have experience with a strongly typed language and a good understanding of the node.js based web stack.

In general, having a broad knowledge is probably more useful in Ubie than knowing everything about a specific framework. The best way to prepare is to create a sandbox or pet application that includes any of the technologies listed above.

Conclusion

I hope this article answered some questions about what to expect when working at Ubie as an Application Software Engineer. For more information about our company and a list of open positions, please visit our recruitment page.

--

--