Today, Plotly is trusted by some of the largest enterprises in the world. This includes organizations like Google, NASA, Shell Oil, and many more. Our enterprise initiatives began three years ago after multiple requests for an enterprise, installable version of our product. At first, we tried to drive these customers to our cloud-hosted SaaS product. Companies like Salesforce and Box were pushing the conversation towards trusted and secure cloud SaaS applications, and we assumed we could chart a similar course.
While some customers could be convinced to adopt our cloud-based solution, other companies had deeper reservations or contractual/regulatory requirements that prevented them from using multi-tenant environments. It was clear that if we wanted enterprises to widely adopt Plotly we needed to solve on-prem and private instance deployments.
After making the decision to offer an installable version of Plotly we started exploring the developer community’s best practices for inspiration. Our friends at GitHub had generated a lot of customer value with their enterprise offering so we reached out with hopes of gaining some of their insights. Their main advice was that if they could start over they would use containers rather than shipping the entire application as a VM. They explained that this would allow their on-prem product to leverage the same cloud-native architecture as their SaaS product.
From that insight, we knew we needed a container based solution with a standard installation process that could cater to a variety of environments.
Building it ourselves
For our first enterprise offering we Dockerized our application, putting all of our services into one (BIG) Docker image, rather than splitting them up. This was an inconvenient way of structuring our application, but at the time there weren’t any mature Docker orchestration solutions available so we didn’t really have a choice. We lined up our first customer who was very technical and (luckily for us) knew Docker & Linux quite well. When it came time for them to install Plotly On-Premise we used `docker export` to produce tarballs which we delivered in an S3 bucket, they’d download the tarballs, unpack, manually edit a few config files and use Docker’s CLI to get everything up and running.
Things seemed to be working! We started to push this approach to more customers.
After 2 releases, 10 customer trials, and 5 actual buyers we quickly found out that not all of our customers would be like our first. It turned out they weren’t as comfortable with the Docker CLI or VIM. We also started running into a few quirky issues with Docker, specifically when it came to proxied servers and AUFS, all of which led to support issues and a few messy installs.
It was a functional process but each deployment felt like a one-off project. We needed to involve our developers in each installation rather than letting our sales and support teams manage the installation independently. On-prem deployments were taking up as much effort as some of our core features.
A new approach
We went back to the drawing board for a new approach and were quickly introduced to a company building a platform aimed at solving enterprise deployments, Replicated. At the time, they were mainly working with developer tools we trusted like Travis CI and npm. The Replicated platform was driven by Docker images as the unit of portability, so from the start we agreed on the fundamental approach to the problem.
After a few conversations with their team, we knew it was time to make a decision on whether we should continue to build or buy this technology. On one side of the scale, they were offering a lot of answers to the quirks we saw with the Docker CLI and installation process. On the other end, we had already gotten this far. The team at Replicated wassuper open to non-committal prototyping in their system, so we did a quick prototype of our application within their platform. It didn’t take long to see that it abstracted away a lot of the complexity of our original enterprise product.
Instead of VIMing a config file, our customers could run an install script and configure their instance with a simple settings interface. We could ship Plotly to almost any environment that allowed Docker to be installed. We knew our technical sales team would be able to help our customer get Plotly On-Premise installed using this system. Finally, the roadmap for the team at Replicated is 100% focused on enabling this enterprise experience as well as extending applications on the platform with additional enterprise functionality (stuff like LDAP, audit logs etc. that we have little interest in building). So we took the plunge.
Shipping to Customers
Our next major release for Plotly On-Premise was powered by Replicated. We started noticing features that were saving us time and energy. Supporting customers before Replicated involved a lot of back and forth. While this still isn’t a completely solved problem even with Replicated, they have built out tooling that allows our customers to send us an auto-generated support bundle that contains all the log files associated with their instance.
Our customers also were noticing a better experience. Not only was the installation much simpler, but managing the application became much easier. We were able to build a lot of the deployment & management knowhow into the development effort by using their (fairly rudimentary at the time) scheduling & orchestration system. As a result, our enterprise customers don’t have to be familiar with Docker; it just works. With other features like automatic backups, we no longer had to instruct our enterprise customers how to manually backup their instance, while keeping our fingers crossed that they actually did it.
We can now quickly spin up enterprise trials, proving to customers that Plotly works in their environment and putting our product front and center. Most importantly, we no longer need to treat deployments as a core feature, allowing us to spend more time and energy on making Plotly the best modern platform for agile business intelligence and data science.
For more information on Plotly On-Premise or to set up a trial, visit our product page.