AdvancedMD

Higher Quality Releases Without Disruption to Your Workflow: It’s Not Magic, It’s DevOps

Higher Quality Releases Without Disruption to Your Workflow: It’s Not Magic, It’s DevOps

Prasenjit Satpathy, vice president of engineering and DevOps at AdvancedMD discusses how adopting CloudBees Flow has increased the team’s number of deployments by 200 percent and reduced the time required for deployments by 50 percent.

CONTRIBUTED BY PRASENJIT SATPATHY, VICE PRESIDENT OF PRODUCT DEVELOPMENT AT ADVANCEDMD

Running a small medical practice is a balancing act. On the one hand, you have to ensure the best care for your patients, and on the other, you need to take care of your financials. Falling behind in one or the other is a recipe for disaster. People will go elsewhere if you provide substandard care. And if you can’t collect from your patients and their insurance companies promptly, you could face a debt scenario that can pull you under.

AdvancedMD makes administrative software for independent medical practices. Our cloud-based suite of practice management, EHR, and patient experience applications provides smaller medical offices with an end-to-end business solution. Our modules include billing, scheduling, prescribing, recording, and benchmarking software, as well as telemedicine, MACRA & MIPS, and mobile apps.

We sell pre-configured bundles of our practice management, EHR, and patient experience modules. Our customers can also assemble custom bundles tailored to their specific needs. AdvancedMD synchronizes and streamlines workflows so doctors can focus on delivering the best care and making sure that their finances are in order.

FROM BEST-OF-BREED TO UNIFIED PLATFORMS PLATFORMS

In 2015, the global investment firm Marlin Equity Partners acquired AdvancedMD. This new partnership enabled us to re-evaluate our business practices and our product offerings.

Technology and new regulations were transforming approaches to patient care, and to increase revenues and make our software more relevant to more types of practices, we had to expand our product portfolio.

Up until 2015, we only offered a practice management and electronic health record application that ran on a similar server configuration in a datacenter. In some ways, those were the glory days—a simpler time. Our developers worked on this one product and pushed out quarterly updates. It was the right approach because the healthcare industry ran on a best-of-breed software model.

Medical entities—be they small-to-midsize practices, clinics, or hospitals—would procure their billing software from the number one vendor in that category, and would then integrate it with the most powerful EHR platform and best-selling scheduling system. There was only one problem: The more integrations you had, the harder it was to keep everything up to date and all the applications talking to one another.

As the healthcare industry began to move from dedicated servers to virtual machines and cloud-based applications, demand shifted from the best-of-breed approach to unified platforms. Our acquisition provided an opportunity to pivot from our previous business model to this new strategy, all the while fulfilling our new investor’s directive to expand our product line.

ELIMINATING THE WALL OF CONFUSION

To achieve these new goals, we had to shift from our monolithic workflow—which erected a wall of confusion between our development and operations teams—to a microservices approach that allowed these teams to maintain their autonomy while better working together. We had to put an end to overnight deployments, quarterly release cycles, and our inability to share code between units within the company.

It wasn’t a matter of abandoning the tools we were already using. Instead, we wanted to create a structured environment that empowered our teams to work independently, while at the same time breaking down the silos that prevented the establishment of a shared space.

We decided to build this new environment on CloudBees Flow (previously known as Electric Cloud Flow). It offered release orchestration, pipeline and environment management, and deployment automation in a single package. 

BUILDING A CENTER OF EXCELLENCE

CloudBees Flow allowed us to build a center of excellence and a workflow that supported our many teams and drove our new business model. We tried to move to bi-weekly deployments using previous tools alone—and we did—but we were far from efficient. The desire to do better was there, but there were multiple problem which needed to be solved.

For example, there was no way for the release group to inspect the engineering group’s code before deploying it. It was impossible to determine or discuss potential issues until after an update was in progress, and this led to overnight deployments and delays, among other things.

With CloudBees Flow, each application goes through a single pipeline. Our center of excellence is a shared entity that helps resolve issues, and which also provides leadership, support, and training across all areas, including development, operations, and automation.

For example, our DevOps team uses one PowerShell script, and our SRE (software reliability engineering) team employs a different one in the production environment. Neither was able to see what the other was doing. Now, they can examine each other’s work through a mutual pipeline, and point out ways to improve things. Collaboration has gone through the roof with CloudBees Flow. 

GETTING OUR TEAMS TALKING TO ONE ANOTHER

Internally, the move to CloudBees Flow wasn’t initially as smooth as I would have liked. AdvancedMD is a big organization. We employ 200–300 developers, and it takes a lot of effort to coordinate so many people and to get them moving in the same direction.

Early on in the process, we realized that the biggest barrier to adopting CloudBees Flow wasn’t the tool itself, but managing that human element. Under our microservices model, every team is using different tools. Our infrastructure team is using Terraform and Chef Infra, our developers are using Visual Studio, but both are orchestrating, validating, and deploying releases in CloudBees Flow.

CloudBees Flow is also the mechanism that gets our teams talking to one another. Rather than forcing our people to adopt a new paradigm, we maintained our culture of autonomy, but we shifted conversations from email to CloudBees Flow.

Don’t get me wrong. DevOps is not a magic bullet. Shifting to DevOps and microservices affects people, processes, and tools. Everyone wants to improve their operations, but when you try to massively disrupt an organization, it can be a tough pill for everyone to swallow. You’ll run into much resistance. The key to success is finding a way to drive innovation without disrupting your culture too much. You can’t drop everything and start over, but you can lay a solid foundation for everyone to stand on, and that’s what we decided to do. 

INCREASING THE FREQUENCY AND QUANTITY OF OUR DEPLOYMENTS

We have maintained our bi-weekly release schedule, but increased the number of deployment artifacts. We are also hitting all of our servers. In the past, we’d fail to update 10–25% of our servers on any given deployment. Thanks to CloudBees Flow’s automated orchestration capacities, we are now updating 100% of our servers whenever we roll out an update and efficiently validating the quality of the deployment artifacts.

We have also started varying our deployment schedule. Most of our releases are still bi-weekly, but some deployments are every seven days. We have now moved to dark deployments and are releasing select features to select users—ensuring that they perform as needed—before rolling out full-blown updates to everyone.

Despite the increase in the frequency and the number of deployments, we are still using the same team of four people to roll out the updates. As a result, the value of CloudBees Flow has far exceeded its cost, and we have been able to stay within our IT budget despite the added expense.

We have become leaner and faster, but we’re not negatively impacting our engineers’ or developers’ lives. We are no longer giving up our weekends and our nights to roll out the updates our healthcare customers demand. But there is still room for improvement, and we are looking for ways to make our teams more flexible and adaptable so we can deliver industry-leading solutions for smaller medical practices. 

OUR BOTTOM LINE IS BETTER PATIENT CARE

In September 2019, Marlin sold AdvancedMD to Global Payments for $700 million. In July of the same year, we acquired NueMD, further solidifying our position as a leading provider of cloud-based clinical and business solutions to independent medical practices.

This latest acquisition is moving AdvancedMD into the ambulatory care market and has increased our North American footprint. We wouldn’t have made it this far had we stuck to our single-server practice management solution.

CloudBees Flow helped us adopt DevOps and microservices without having to radically alter our culture. We were then able to pivot from a single-server configuration, single application model to a cloud-based modular approach that provides an end-to-end solution to more types of independent medical practices.

I’ve talked a lot about numbers, but our bottom line is helping doctors provide outstanding patient care. 

AdvancedMD’s growth has empowered our engineers to expand the boundaries of medical practice management software. Our cloud-based suite offers a unified experience that streamlines and automates office administration so doctors can focus on providing quality healthcare.

In many ways, CloudBees Flow echoes AdvancedMD’s product suite. It takes care of the heavy lifting and helps us provide the best possible service to doctors so they can provide better care to their patients. Everyone wins, and that’s just what the doctor ordered.

The business value that we achieved by implementing CloudBees Flow was the speed...the number of packages that we're deploying has gone up 200 percent and the amount of time that we need for deployments has reduced by 50 percent.
Prasenjit Satpathy
Vice President of Engineering and DevOps