Project: WebMD Health Services

Back To Projects

StayWell and WebMD Health Services Background

I worked full-time at StayWell (acquired by WebMD Health Services in 2020) between 2010 and 2025. When I started, the company was called StayWell Interactive. The company restructured and underwent ownership changes several times. During the first major restructuring the company changed its name to Krames StayWell. When our employer-based population health management software product moved from StayWell Interactive to MediMedia's sister company StayWell Health Management, I moved with it. The companies later merged together as Krames Staywell. Merck then purchased a majority stake in the company and it was renamed StayWell.

StayWell acquired the company Provata Health in 2018 and transitioned all customers to a new Java/React platform. In July 2020 WebMD Health Services acquired StayWell and has migrated all customers to their "WebMD One" platform.

WebMD Health Services

In 2020 WebMD Health Services acquired StayWell and gradually migrated all customers to their WebMD One platform.

I spent 2019-2020 on the StayWell architecture team and transitioned to the WHS architecture team in 2021. I was officially promoted to the title Architect in July of 2021.

AWS to On-Prem Migration

I assisted in planning and execution of migrating our MyStayWell platform from AWS to WHS's on-prem data centers. This involved working with other engineers to create/update documentation, audit AWS service usages within our application and troubleshooting issues after the migration was completed.

One interesting problem we had was that the new on-prem database did not have the same horsepower as the AWS hosted instance, so our application suffered severe performance issues. I used NewRelic to identify application changes we could make to bring the system back to normal operational performance, then worked with another developer to design the solution implementation. As part of this process I documented before and after performance metrics in order to show exactly how much of an improvement we made, as well as to help justify the company's continued use of NewRelic.

Application Performance Investigation

We had a microservice mysteriously hitting a performance wall and opening http circuits. I investigated the issue by reproducing locally using k6 tests to apply enough load to trigger the scenario. I found that our use of sync wrapped async http calls between a proxy and the service in question was causing requests to stack up and timeout. We implemented a temporary solution of adjusting max connections and min threads before implementing a true async fix.

K6 Performance/Load Testing Utilities

While investigating the performance issue mentioned above, I had the opportunity to learn more about k6. While it's a very powerful tool, there is some overhead involved in first-time use and I wanted other developers to be able to easily setup k6 and write tests and be able to see results in grafana. I created a docker project that wraps influxdb, grafana and openapigenerator so that developers can rapidly generate new k6 tests and push results to a local grafana instance running in a docker container. Then I created an npm package to encapsulate shared k6 utility methods and a run command that automatically appends all the necessary k6 CLI params to push results to the local running influxdb/grafana instance.

MyStayWell Third-Party API Disconnection

After combining one of MyStayWell's third-party API accounts with WHS's, we needed to disconnect a very large number of MyStayWell users so that they could re-connect on the new platform. I wrote a multi-threaded script to rapidly disconnect all the users.

Token Based Authentication

Our primary application's auth mechanisms previously revolved around a .NET session, but this had several problems:

  • Inability to consistently protect service endpoints in microservices
  • Poor performance caused by continually reaching back from microservices to the monolith application for common user info
  • No easy or consistent way to expose API's for customer consumption
  • Inability to have granular service endpoint access
  • Audit logging lacked the ability to trace specific internal production use cases

We were able to resurrect an old project to implement token based authentication and get it over the finish line. We now have solutions to all the above problems and by doing so have opened up a broad range of possibilities for our infrastructure and platform as a whole. The system security was already good, but is now even better with more granular access control and audit logging.

Mike Thompson

Interested in hiring me for your project?

Looking for an experienced full-stack developer to build your web app or ship your software product? To start an initial chat use the form on the contact page.