My name is Matt Aimonetti, I’m the co-founder and CTO of Splice. At Splice, we built a cloud platform for music producers, this platform is made of elements engineers often take for granted. We invented version control for music, a distributed collaboration flow and a subscription based marketplace for samples, loops presets and MIDI. All that without changing the creation tools musicians already know and like.
I’m a developer and an entrepreneur, the last thing I want to worry about are ops concerns.
We are around 15 people for a very large surface application, we push terabytes of music awesomeness every single day, we have top music producers and hobbyists using Splice the way you might be using BitBucket or GitHub.
We can’t afford to lose any content or being down. We also don’t have dedicated operation engineers.
Like many, we develop on Mac, deploy on Linux, our architecture is API centric and our backend is mainly written in Go with a bit of C. We use various datastores such as MySQL, Memcached, Redis and ElasticSearch.
Before using Docker, we had issues with developers, CI and prod running sometimes different versions our datastores. By containerizing everything, we now develop on the exact same version/environment that is used on CI, staging and prod. If it works locally, we won’t have any surprises going through the pipeline. Updating the version of ElasticSearch or Redis is as simple as changing the version in our Docker Compose file.
But to be honest, if it wasn’t for the cute menu bar icon, we would almost forget about Docker for Mac, we created a few shell aliases to run our services, test suites and specific commands: api-up, api-test, api-exec, api-down. The process is seamless, we use our local editor, with local files and it just works, no fuss, no pain. Our developers can code without having to setup and maintain other services and datastores. No more setup and maintenance of a complex development environment. It’s all about efficiency, short feedback loop and reducing friction for developers who want to focus on what matters: creating an awesome product.
Speaking of our awesome product, another thing we are taking for granted: the flow from development to production. We deploy our 400 web services probably on an average of a dozen times a day. We use continuous delivery, meaning that our commits are going straight to our CI (Jenkins running Docker) and if the build passes, the image is deployed to staging. From there, we promote the image via Jenkins web UI and it gets deployed to production.
Once again, we can focus on what we do well: writing code and not debugging weird issues due to discrepancies between our development and production environments.
As a CTO and founder, one of the biggest advantages of Docker is being able to get new team members ready to code in no time. We used to have to keep a 5 page long README on setting up all the dependencies… that README would get outdated very quickly. Now I can get a new team member set-up and coding in 5 minutes, it’s a huge win.
Splice and Docker have a shared philosophy, we both believe in streamlining and improving the creation process. When freed, musicians and engineers spend more quality time doing what they do best which in itself has a direct effect on their lives and ours.