Simplifying to Scale Complex Software Systems

Simplifying to Scale Complex Software Systems

Kevin Kotowski
Kevin Kotowski
March 30, 2022
One of the biggest challenges companies have managing their software is the ever growing complexity from growth. As your business grows, you need to actively work to manage this complexity. Complexity comes from many places including product maturation, business partnerships, and user scale. Across industries, we find ourselves solving similar issues, always striving to simplify.

In this blog post, we highlight three recent projects in the insurance, healthcare, and fintech industries where we’ve used simplified software solutions to manage growing business complexity. Solutions include leveraging complex third-party integrations, implementing simple communications architecture, and developing business systems that support cryptocurrencies. Rather than perpetuating departmental silos, software architecture can serve as interaction points for coordination, allowing simple support for complex conditions. This enables development scale, user growth, and more satisfying user experiences.

Streamlining the Complexities of Live Underwriting

Fifteen years later, we’re still working with Fidelity Life, an international life insurance agency. A few different teams work side-by-side with client developers throughout their ecosystem, and one of our recent milestones involved their underwriting software.

Underwriting evaluates the risk profile of a proposed deal or agreement. Insurance companies rely on underwriters to crunch data from a dozen or more sources and calculate a quote; but this process takes time. Our team brings experience helping multiple insurance companies automate some aspects of underwriting.

Recently, we developed a risk assessment service that pulls in critical third-party information in real-time as an applicant fills out the submission form. When a user submits their application, the service provides the underwriter with an inclusive interface that includes all of the relevant data and an overall risk summary.

Systems with so many interactions and data sources (both external and internal) put a lot of pressure on its test suites. Additionally, data sources provide information in different formats. Our team developed data pipelines that translate, decode, and map data into a standard format. We also created a suite of fake data, modules, and messages that support a robust testing strategy.

Technologies: Ruby, Sinatra backend; React and TypeScript frontend

Leveraging gRPC to Lower Healthcare Costs

Working alongside our healthcare startup partner, we’re helping to leverage data and analytics to make healthcare more seamless, improve health outcomes, and ultimately become the employer benefits company of choice for any size organization.

The company built their success while expanding a Rails monolith, and a new third-party partnership provided an opportunity to spin off smaller microservices. This effort focused on developing one service that serves as a vanguard for establishing new patterns and conventions.

One of the more interesting aspects of this project is how we handled distributed communication. Rather than REST or HTTP/2, the service talks to third-party services through gRPC, or Remote Procedure Calls, which enables multilateral communication. Each connection becomes a contract between parties, and also acts as more consistent and reliable documentation than you typically get from an API. Despite an initial learning curve and the upfront cost of setting up contracts, the team is already seeing the benefits gRPC can have for such a large and complex system that relies on constant coordination between parties that don’t collaborate as often. The initial overhead pays off down the road with a single point for asynchronous communication that is coded right into the system.

In parallel to these efforts, our team helps to update and support their system infrastructure, with more granular identity and access management, data anonymization, and infrastructure as code.

Technologies: Rails, TypeScript, gRPC

Modeling and Improving DevOps

One of our partners in the Middle East is building a digital asset on-ramp and off-ramp, with ambitions to expand and serve the world. This client has experienced a lot of the typical challenges that emerge from periods of rapid growth, and our team has helped the system scale — both in the number of currencies and cryptocurrencies they support, and the number of users their platform can handle at one time.

Our team’s presence is spread across a few different projects, with a common purpose of emphasizing reliability, observability, and scalability by focusing on modularity, testing, and performance. We’ve helped the team find their footing as a mature enterprise by focusing on DevOps capabilities described in Accelerate, the data-driven guide to high-performing tech organizations first published by Nicole Forsgren, Gene Kim, and Jez Humble in 2018. We’re leading by example within our own teams, and generally helping them establish a healthy and sustainable pace that offers their teams a good work/life balance while still making delivery cycles more predictable.

The work we’re delivering also is rooted in improving both process and product. One of our teams is helping migrate to micro frontends, which are conceptually similar to microservices applied to the frontend. This approach allows teams to focus on their own functionality, with dedicated source control and build pipelines that won’t interfere with each other.

We’re also helping implement a data-driven approach to defining and supporting new cryptocurrencies. This approach will enable the client’s platform to scale from six coins to upward of a hundred. On other project teams, we’re helping rewrite mobile applications, build extended functionality for an advanced trading platform, and refactor prominent components of the client’s core application.