We deploy everyday and this is how!

Behind the scenes of how we increase value to our customers everyday.

At Prismic.io, we rollout fixes, improvements and features everyday. We even often have several deployments a day. We believe that this rate of deployment is mandatory in order to keep on delivering increasing value to our customers. This short article details the why and the how of this rapid delivery system.

Our goal is to provide increasing value to our customers

Prismic.io is an api-based content management system. It provides a friendly platform to over 30,000 developers to use with the technology of their choosing to build websites and apps. It also provides top-notch authoring and publication tools for editors and marketing teams around the world.

Some clients using prismic.io in production

Both development and marketing spheres are evolving extremely fast nowadays. New techniques and practices pop-up every week. We can’t be satisfied with simply offering good tools and maintaining them, especially not in the bloated content management market.

What really drives us is providing increasing value to our customers every single day! For us, marketing is about differentiation, unicity and allowing our customers to use the latest marketing techniques.

At Prismic.io, we understand that we can’t keep this promise unless we organize ourselves around fast paced functionality deployment. To enable this, we had to build our infrastructure, architecture, processes and teams around the following ideas:

  • Experimenting with new ideas should be cheap and fast
  • New functionalities should go through a real world testing process with real users and actual production content
  • New functionalities shouldn’t impact the stability of our customer’s work

Isolation: Every customer’s database is separate

Yes, that’s right, every single Prismic.io repository has its own, physically separate, database. This provides us with huge advantages in terms of backups, customer data isolation, scalability, and security (You can find our in more about Prismic.io’s infrastructure here). What matters most for this article, is that isolation provides us a simple upgrade and migration mechanism.

Different repositories can be on different versions of the software at the same time. This is true not only for the main interface, but also for the backend services, even for data and data-schemas!

So, data migration doesn’t have to be a single big bang operation, we can migrate data from one repository at a time. This way, even serious data migrations can be done smoothly and progressively, making data migration almost a non-event

Multiple software versions in production, simultaneously

Besides our staging and pre-production environments, our production environment is organized in what we call experiment clusters, or exps for short. Every exp is properly distributed as well as redundant for scalability and availability.

Every exp is assigned to a given software version and every repository is configured to run on a given exp.

We uses multiple exp to tests new features on differents repos.

This simply means that we deploy multiple software versions at the same time and we can move repositories around these versions very easily (thanks to the fact that their data is completely isolated!).

Cheap repository clone

Data isolation at the repository level means that we can also do copies (or clones) of repositories very cheaply (just file copying, no scripts, no headaches).

Clone a repository

Cheap cloning means that we can test new features with clones of real-world repositories

What’s better than actual production data and real users for testing a new functionality? Nothing! This way, our customers can verify and validate upcoming features as well as improvements on their repositories ahead of time.

Continuous and progressive deployment of new features and improvements

So, this how our workflow goes: once the development and the peer code validation is done, we do internal testing on our staging and pre-production environments. If everything is alright, the functionality hits production, progressively:

  • First, we rollout to individual customers who requested the feature/improvement (we enable this on a repository clone if necessary).
  • We exchange with our community through Slack and Intercom and engage those willing to see and try the new functionality.
  • We roll it out to a small relevant segment of users identified by our analytics system.
  • We progressively expand the segment constantly monitoring for any error reports.
Those are three features currently in production. You can see the stable version, the version panel and the multi-language feature.

Those are three features currently in production. You can see the stable version, the version panel and the multi-language feature.

In short…

We need to move fast due to the rapidly evolving development and marketing industries. What allows us to provide increasing value to our customers is our capacity to develop and deploy fast.

To experiment with new functionalities and deploy them quickly, we have designed our architecture and infrastructure for continuous and fast deployment. We rely on our analytics to find the correct segments for a given functionality and on our community to quickly validate concepts as well as improvements.

More to come

Now that summer break is over, new functionalities are on their way. Prepare for a few dense months of improvements until the end of the year. You can participate to the conception and have early access to new features by joining our community.

Join us on Slack and become a part of prismic.io community

Join the prismic.io community