A discussion about

the Distributed Developer's Stack

By Donovan Jones

What is it?

  • A new toolset for developing massively distributed applications
  • What are massively distributed applications?
  • Not focused on the specific tools but on the practices
  • Best practices?
  • A meta-stack


All content comes from the following pages:

The field guide is on github if you want to contribute.

Everything is distributed

  • Applicators
  • Tools (eg git)
  • People

Cloud is the default platform.

  • Cost savings
  • Increased speed
  • Scalability

The codebase is in git

  • Simpler to merge the work of distributed developers
  • Services like github

The environment is automated in the code

  • Model the environment in code
    • General configuration
    • Installation of the application stack
    • Installation and configuration of the required backing services
  • Chef, Puppet, Salt, Ansible, CFEngine, Juju
  • Create cattle not pets (avoid snowflakes)

Tests done in code, not by a QA department

  • Integration testing (not just unit tests)
  • Commits trigger tests by continuous integration server
  • Selenium, PhantonJS, Jenkins etc

Realtime chat and chatbots

  • Important for team culture and communication
  • Bots providing an appropriate amount of information about events or issues
  • Slack, IRC, Jabber

CI servers deploy code, not ops

  • Continuous deployment
  • Jenkins, Capistrano

Continuous deployment

  • Maintain a single source repository.
  • Commit to master
  • Use feature flags
  • Automate the build.
  • Make your build self-testing.
  • Everyone commits to the mainline every day.
  • Every commit should build the mainline on an integration machine.
  • Keep the build fast.
  • Test in a clone of the production environment.
  • Make it easy for anyone to get the latest executable.
  • Everyone can see what's happening.
  • Automate deployment.

The application runs locally on development

  • Setup code is in the repository
  • Boostrap a development environment quickly
  • Share fixes between developers
  • Consistent environment
  • As close to production as possible
  • Lightweight virtulization
  • Vagrant

The monitoring infrastructure is critical

  • DevOps, if you build it you look after it
  • Know when things are broken
  • eg, Nagios, Cacti, CollectD, KELP (ELK)

Containers are the default deployment target

  • Docker
  • CoreOS, Ubuntu Core, Project Atomic
  • Kubernetes

My Status

Practice Implemented Issues
Cloud is the default platform Kinda Staging but not prod
Codebase is in git Yes No arguments
Environment is automated in the code Yes No arguments, scaling the tools

My Status

Practice Implemented Issues
CI servers deploy code, not ops No Is this possible in production for a big site with $client?
Tests done in code, not by a QA department Kinda No QA??
Realtime chat and chatbots Yes No arguments

My Status

Practice Implemented Issues
Application runs locally on development Yes No arguments
Monitoring infrastructure is critical Yes No arguments, needs effort
Containers are the default deployment target No I want to but it requires big changes to existing applications


  • What practices are missing?
  • How do you score?
  • Is anyone doing all of these?
  • Is anyone doing none of these?
  • What don't you like?
  • Is this applicable to smaller sites?
  • Is this applicable to non web apps?

Vertical Slides

Slides can be nested inside of each other.

Use the Space key to navigate through all slides.

Down arrow

Basement Level 1

Nested slides are useful for adding additional detail underneath a high level horizontal slide.

Basement Level 2

That's it, time to go back up.

Up arrow


Not a coder? Not a problem. There's a fully-featured visual editor for authoring these, try it out at http://slides.com.

Point of View

Press ESC to enter the slide overview.

Hold down alt and click on any element to zoom in on it using zoom.js. Alt + click anywhere to zoom back out.

Touch Optimized

Presentations look great on touch devices, like mobile phones and tablets. Simply swipe through your slides.


Hit the next arrow...

... to step through ...

... a fragmented slide.

Fragment Styles

There's different types of fragments, like:








Transition Styles

You can select from different transitions, like:
None - Fade - Slide - Convex - Concave - Zoom


reveal.js comes with a few themes built in:
Black (default) - White - League - Sky - Beige - Simple
Serif - Night - Moon - Solarized

Slide Backgrounds

Set data-background="#dddddd" on a slide to change the background color. All CSS color formats are supported.

Down arrow

Image Backgrounds

<section data-background="image.png">

Tiled Backgrounds

<section data-background="image.png" data-background-repeat="repeat" data-background-size="100px">

Video Backgrounds

<section data-background-video="video.mp4,video.webm">

Background Transitions

Different background transitions are available via the backgroundTransition option. This one's called "zoom".

Reveal.configure({ backgroundTransition: 'zoom' })

Background Transitions

You can override background transitions per-slide.

<section data-background-transition="zoom">

Pretty Code

function linkify( selector ) {
  if( supports3DTransforms ) {

    var nodes = document.querySelectorAll( selector );

    for( var i = 0, len = nodes.length; i < len; i++ ) {
      var node = nodes[i];

      if( !node.className ) {
        node.className += ' roll';

Code syntax highlighting courtesy of highlight.js.

Marvelous List

  • No order here
  • Or here
  • Or here
  • Or here

Fantastic Ordered List

  1. One is smaller than...
  2. Two is smaller than...
  3. Three!

Tabular Tables

Item Value Quantity
Apples $1 7
Lemonade $2 18
Bread $3 2

Clever Quotes

These guys come in two forms, inline: “The nice thing about standards is that there are so many to choose from” and block:

“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.”

Intergalactic Interconnections

You can link between slides internally, like this.

Speaker View

There's a speaker view. It includes a timer, preview of the upcoming slide as well as your speaker notes.

Press the S key to try it out.

Export to PDF

Presentations can be exported to PDF, here's an example:

Global State

Set data-state="something" on a slide and "something" will be added as a class to the document element when the slide is open. This lets you apply broader style changes, like switching the page background.

State Events

Additionally custom events can be triggered on a per slide basis by binding to the data-state name.

Reveal.addEventListener( 'customevent', function() {
	console.log( '"customevent" has fired' );
} );

Take a Moment

Press B or . on your keyboard to pause the presentation. This is helpful when you're on stage and want to take distracting slides off the screen.

Much more


- Try the online editor
- Source code & documentation