diff --git a/.circleci/config.yml b/.circleci/config.yml
index 41096e15f77941b962d3b981253731bfd03a6a1c..beb5911eaf7165fa55c662d1681630b413454091 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,49 +1,77 @@
-# Javascript Node CircleCI 2.0 configuration file
-#
-# Check https://circleci.com/docs/2.0/language-javascript/ for more details
-#
 version: 2.1
-jobs:
-  build:
+aliases:
+  - &step_restore_git_cache
+    restore_cache:
+      keys:
+        - v1-git-{{ .Revision }}
+        - v1-git-
+  - &step_save_git_cache
+    save_cache:
+      paths:
+        - .git
+      key: v1-git-{{ .Revision }}
+  - &step_restore_dependency_cache
+    restore_cache:
+      keys:
+        - v1-dependencies-{{ checksum "package-lock.json" }}
+        - v1-dependencies-
+  - &step_save_dependency_cache
+    save_cache:
+      paths:
+        - node_modules
+      key: v1-dependencies-{{ checksum "package-lock.json" }}
+  - &step_save_build_cache
+    save_cache:
+      paths:
+        - build
+      key: v1-build-{{ .Revision }}
+  - &step_restore_build_cache
+    restore_cache:
+      keys:
+        - v1-build-{{ .Revision }}
+  - &step_save_dist_cache
+    save_cache:
+      paths:
+        - dist
+      key: v1-dist-{{ .Revision }}
+  - &step_restore_dist_cache
+    restore_cache:
+      keys:
+        - v1-dist-{{ .Revision }}
+  - &config_job_environment
     docker:
       - image: circleci/node:8.16-browsers
-    
+    working_directory: ~/repo
+  - &config_deploy_requirements
+    requires:
+      - build
+    filters:
+      branches:
+        only:
+          - master
+          - develop
+          - smoke
+          - circle
+          - /^hotfix\/.*/
+
+jobs:
+  build:
+    <<: *config_job_environment
     environment:
       NODE_ENV: production
       JEST_JUNIT_OUTPUT_NAME: results.xml
-    working_directory: ~/repo
-
     steps:
-      - restore_cache:
-          keys:
-            - v1-git-{{ .Revision }}
-            - v1-git-
+      - *step_restore_git_cache
       - checkout
-      - save_cache:
-          paths:
-            - .git
-          key: v1-git-{{ .Revision }}
-
-      # Download and cache dependencies
-      - restore_cache:
-          keys:
-            - v1-dependencies-{{ checksum "package-lock.json" }}
-            # fallback to using the latest cache if no exact match is found
-            - v1-dependencies-
-
+      - *step_save_git_cache
+      - *step_restore_dependency_cache
       - run: sudo npm install -g greenkeeper-lockfile
       - run: npm --production=false install
       - run: greenkeeper-lockfile-update
-
-      - save_cache:
-          paths:
-            - node_modules
-          key: v1-dependencies-{{ checksum "package-lock.json" }}
-
+      - *step_save_dependency_cache
       - run:
           name: Lint
           command: npm run test:lint -- --quiet --output-file test-results/eslint/results.xml --format junit
-      
       - run:
           name: Unit
           environment:
@@ -51,7 +79,6 @@ jobs:
           command: npm run test:unit -- --reporters="default" --reporters="jest-junit" --coverage --coverageReporters=text --coverageReporters=lcov
       - store_artifacts:
           path: coverage
-      
       - run:
           name: Build
           command: npm run build
@@ -59,16 +86,8 @@ jobs:
           path: build
       - store_artifacts:
           path: dist
-      - save_cache:
-          paths:
-            - build
-          key: v1-build-{{ .Revision }}
-      - save_cache:
-          paths:
-            - dist
-          key: v1-dist-{{ .Revision }}
-      
-      
+      - *step_save_build_cache
+      - *step_save_dist_cache
       - run:
           name: Integration
           environment:
@@ -76,12 +95,10 @@ jobs:
           command: npm run test:integration -- --reporters="default" --reporters="jest-junit"
       - store_test_results:
           path: test-results
-
       - run: greenkeeper-lockfile-upload
+
   deploy-npm:
-    docker:
-      - image: circleci/node:8.16-browsers
-    working_directory: ~/repo
+    <<: *config_job_environment
     environment:
       NODE_OPTIONS: --max-old-space-size=4000
     steps:
@@ -94,14 +111,9 @@ jobs:
           if [[ "$CIRCLE_BRANCH" == hotfix/* ]] # double brackets are important for matching the wildcard
             then echo export NPM_TAG=circlehotfix >> $BASH_ENV
           fi
-      - restore_cache:
-          keys:
-            - v1-git-{{ .Revision }}
-            - v1-git-
+      - *step_restore_git_cache
       - checkout
-      - restore_cache:
-          keys:
-            - v1-dist-{{ .Revision }}
+      - *step_restore_dist_cache
       - run: npm version --no-git-tag-version $RELEASE_VERSION
       - run: |
           npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN
@@ -110,37 +122,16 @@ jobs:
       - run: git push $CIRCLE_REPOSITORY_URL $RELEASE_VERSION
 
   deploy-gh-pages:
-    docker:
-      - image: circleci/node:8.16-browsers
-    working_directory: ~/repo
+    <<: *config_job_environment
     steps:
-      - restore_cache:
-          keys:
-            - v1-git-{{ .Revision }}
-            - v1-git-
+      - *step_restore_git_cache
       - checkout
       - run: |
           git config --global user.email $(git log --pretty=format:"%ae" -n1)
           git config --global user.name $(git log --pretty=format:"%an" -n1)
-      - restore_cache:
-          keys:
-            - v1-build-{{ .Revision }}
-      - restore_cache:
-          keys:
-            - v1-dependencies-{{ checksum "package-lock.json" }}
+      - *step_restore_build_cache
+      - *step_restore_dependency_cache
       - run: npm run deploy -- -e $CIRCLE_BRANCH
-
-deploy-requirements: &deploy-requirements
-  requires:
-    - build
-  filters:
-    branches:
-      only:
-        - master
-        - develop
-        - smoke
-        - circle
-        - /^hotfix\/.*/
       
 workflows:
   version: 2
@@ -148,6 +139,6 @@ workflows:
     jobs:
       - build
       - deploy-npm:
-          <<: *deploy-requirements
+          <<: *config_deploy_requirements
       - deploy-gh-pages:
-          <<: *deploy-requirements
+          <<: *config_deploy_requirements