Move Fast and Don’t Break Things: Run Development From Slack

Rod Johnson
The Composition
Published in
4 min readJul 19, 2017

--

Imagine if you could track your services from development through to deployment and operation, in a place where each service’s stakeholders already hang out. Imagine if many of these notifications were actionable, offering buttons to perform common tasks. Imagine if you could be warned of commits that might break things before they get to production. (Google has found that 70% of production outages are caused by releases, so this can help reduce downtime.) Imagine if you could apply changes consistently across many services.

Atomist makes this a reality by bringing the entire development lifecycle into Slack via concise, correlated, actionable messages.

By default, Atomist creates a channel for each of your services, providing a space to collaborate. Everyone sees what’s happening and everyone knows where to observe and discuss each service.

Consider the following Slack message from the Atomist bot, which ties together all the events related to a commit:

This message has been updated progressively. Unlike with Slack integrations from individual services, your channel isn’t spammed by many separate, inconsistently formatted messages requiring manual correlation and drowning out human conversation.

  • Christian made a commit. Atomist sent a notification linking to the commit, then enhanced it with further information.
  • Atomist analyzed the service’s code and configuration to report fingerprints on the commit. Atomist fingerprints go beyond git diff to characterize the semantics of a change along a particular axis. This commit changed the Maven dependencies of this Spring Boot service. Fingerprinting enables Atomist to warn when you’ve changed things that may break other users. For example, if you changed service’s REST API, it’s nice for that to be called out to reviewers (and you). If Christian had raised a PR, instead of a commit, the fingerprints would have appeared on the PR as a GitHub check. Fingerprinting is extensible, allowing you to add your own TypeScript fingerprint implementations to track change in axes important to your business or infrastructure.
  • The commit related to issue #2. Atomist includes a link to that issue.
  • When the build completed successfully, Atomist added a link to the build and a Release button. Pressing that button created thegit tag shown above, and triggered a release to production.
  • Three instances of the service were deployed to Pivotal Cloud Foundry. Atomist added Slack buttons to manage the Cloud Foundry deployment, retrieving information or scaling the number of instances up or down.
  • This service has remained healthy in operation. Had its status flipped to unhealthy (using Spring Boot health checks), that information would also have appeared in Slack.

Lifecycle support isn’t limited to Cloud Foundry. Internally, we use Kubernetes. Here’s one of our commits linked to deployments in staging and production:

Such concise, correlated, actionable notifications naturally bring other developer concerns such as issues and PR workflow into Slack. Examples from one of our teams:

If you’re a Spring Boot user, you can start using the features I’ve shown here today.

We’ll be adding more Spring Boot-related features in the near future, and bringing these core lifecycle concepts, including fingerprinting, to other platforms. For example, we use npm dependencies fingerprinting in our internal projects.

In my next blog, I’ll talk about how Atomist makes it easier than ever to create new services and keep them consistent, using seed projects that can be maintained using your preferred tools, without any template magic. We’ll also revisit the idea of editing projects, changing their code based on understanding of what’s already there through selective parsing with microgrammars.

We chose to start by shipping features for Spring Boot because of its enormous popularity, because of our historic connection with Spring and because Spring Boot simplifies Java development so much that it’s natural to want to continue its work by simplifying how things get to production and are operated there. But our ambitions are bigger than Spring, or Java.

Atomist is a platform, not merely a set of features. It lets you add your own TypeScript or JavaScript automations.

Your custom automations can react to events in the context of the Atomist connected data model, linking code to where it’s built and deployed and those who work on it. For example: When a build is broken, notify the committer who broke it via a Slack DM.

Atomist automation can help you move fast without breaking things. Other GitHub and build integrations give you data about what happens. Atomist gives you correlated information, and the tools to act on it in the same place.

Try Atomist in your team today. And please join our community Slack.

--

--

Rod Johnson
The Composition

Cofounder and CEO, Atomist. Creator of Spring, Cofounder/CEO at SpringSource (acq by VMW)