Day Zero Deployments

Custom Ink leverages open source tools and practices that unlock Day Zero Deployments for new engineers and frictionless development for our entire engineering organization! Here's how!

๐Ÿ›  The Tools

๐Ÿ‘ข Strap

Strap is a useful tool maintained by Mike McQuaid, project lead for homebrew, that sets out to "bootstrap a minimal macOS development system".

We leverage Strap at Custom Ink to ensure that our development machines have a minimal set of requirements for working on any of our 100+ production applications. Most of these are Ruby on Rails web services, with some notable exceptions in Node (with React), Python and Java.

Thanks to Strap, we can make some base assumptions about the environment, which sets us up for some major unlocks during application setup.

๐Ÿ’ช Scripts to Rule Them All

Scripts to Rule them all is "a set of boilerplate scripts describing the normalized script pattern that GitHub uses in its projects".

At Custom Ink we took these recommendations to heart and implemented them across nearly every project in our stack! We also added in our own bin/workers for supporting background processes, but that's a topic for another blog post.

๐Ÿ‘ทโ€ Continuous Integration

All of our projects are wired up to be continually tested for every pull request. This keeps our feedback cycle tight, and our confidence high that the changes we're making are safe.

We try to reuse Scripts to Rule Them All in our CI environments as much as possible, with most projects leveraging bin/setup and bin/test as part of their continuous integration workflow. This unlocks a virtuous cycle where our local setup process also becomes continually tested!

๐Ÿงถ Tying it all together

So we have established base guarantees about the development environment, and applied the convention of Scripts to Rule Them All across all our applications. Because of this, we enjoy the benefit of a streamlined development setup process no matter which application, language, or framework we choose to write it in!

๐Ÿ‘ฉโ€๐Ÿ’ป In practice

Our aptly named Rails Frontend is our primary e-commerce application which handles everything you see when you go to CustomInk.com. Here are the steps for a brand new engineer to get it up and running on their laptop:

  1. Clone the rails_frontend repo.
  2. Run bin/bootstrap โ€“ all local dependencies will be brought in via the Brewfile from the repo, thanks to homebrew-bundle.
  3. Run bin/setup โ€“ the application will set up any library dependencies, as well as the required databases.
  4. Run bin/test โ€“ the application will have all tests passing right out of the box!

That's it. And the same process will work across every one of our hundreds of applications that are currently in production.

๐ŸŽ Wrapping it all up

By leveraging some really great open source tooling (Thanks GitHub and Mike McQuaid!), we have a reliable and repeatable way for all of our engineers to get applications up running on their local environments with little to no friction.

This has been a huge win for our productivity and onboarding, and allows us to have a consistent developer experience across our entire organization. It often results in new engineers deploying a change into production on their first day!

by RJ Pittman