diff --git a/.circleci/config.yml b/.circleci/config.yml
index c6dd699955cb117309842c6d6de8919fa1995cb1..d86f5c6760200dba256d225bebf9c3ffa5d0d8f5 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -683,6 +683,12 @@ jobs:
       skip-when-no-change:
         type: boolean
         default: false
+      java-version:
+        type: string
+        default: ""
+      version:
+        type: string
+        default: ""
       <<: *Params
     executor: << parameters.e >>
     steps:
@@ -745,6 +751,9 @@ jobs:
       test-args:
         type: string
         default: ""
+      version:
+        type: string
+        default: ""
     executor: << parameters.e >>
     steps:
       - attach-workspace
@@ -1063,31 +1072,16 @@ workflows:
             - checkout
 
       - clojure:
-          name: be-tests-<< matrix.edition >>
-          requires:
-            - be-deps
-          e: java-8
-          clojure-args: -X:dev:ci:test
-          skip-when-no-change: true
-          <<: *Matrix
-
-      - clojure:
-          name: be-tests-java-11-<< matrix.edition >>
-          requires:
-            - be-deps
-          e: java-11
-          clojure-args: -X:dev:ci:test
-          skip-when-no-change: true
-          <<: *Matrix
-
-      - clojure:
-          name: be-tests-java-16-<< matrix.edition >>
+          matrix:
+            parameters:
+              edition: ["ee", "oss"]
+              java-version: ["java-8", "java-11", "java-16"]
+          name: be-tests-<< matrix.java-version >>-<< matrix.edition >>
           requires:
             - be-deps
-          e: java-16
+          e: << matrix.java-version >>
           clojure-args: -X:dev:ci:test
           skip-when-no-change: true
-          <<: *Matrix
 
       - clojure:
           name: be-linter-cloverage
@@ -1103,69 +1097,61 @@ workflows:
           skip-when-no-change: true
 
       - test-driver:
-          name: be-tests-bigquery-ee
+          matrix:
+            parameters:
+              driver: ["bigquery", "bigquery-cloud-sdk", "googleanalytics", "sqlite"]
+          name: be-tests-<< matrix.driver >>-ee
           requires:
-            - be-tests-ee
-          driver: bigquery
+            - be-tests-java-8-ee
+          driver: << matrix.driver >>
 
       - test-driver:
-          name: be-tests-bigquery-cloud-sdk-ee
+          matrix:
+            parameters:
+              driver: ["sqlserver", "druid"]
+          name: be-tests-<< matrix.driver >>-ee
           requires:
-            - be-tests-ee
-          driver: bigquery-cloud-sdk
+            - be-tests-java-8-ee
+          e: << matrix.driver >>
+          driver: << matrix.driver >>
 
       - test-driver:
           name: be-google-related-drivers-classpath-test
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           driver: googleanalytics,bigquery,bigquery-cloud-sdk
           test-args: >-
             :only "[metabase.query-processor-test.expressions-test metabase.driver.google-test
                     metabase.driver.googleanalytics-test]"
 
       - test-driver:
-          name: be-tests-druid-ee
-          requires:
-            - be-tests-ee
-          e: druid
-          driver: druid
-
-      - test-driver:
-          name: be-tests-googleanalytics-ee
-          requires:
-            - be-tests-ee
-          driver: googleanalytics
-
-      - test-driver:
-          name: be-tests-mongo-ee
-          description: "(Mongo 4.0)"
-          requires:
-            - be-tests-ee
-          e: mongo-4-0
-          driver: mongo
-
-      - test-driver:
-          name: be-tests-mongo-latest-ee
-          description: "(Mongo latest)"
+          matrix:
+            parameters:
+              version: ["mongo-4-0", "mongo-latest"]
+          name: be-tests-<< matrix.version >>-ee
+          description: "(<< matrix.version >>)"
           requires:
-            - be-tests-ee
-          e: mongo-latest
+            - be-tests-java-8-ee
+          e: << matrix.version >>
           driver: mongo
 
       - test-driver:
-          name: be-tests-mysql-ee
-          description: "(MySQL 5.7)"
+          matrix:
+            parameters:
+              version: ["mysql-5-7", "mariadb-10-2", "mariadb-latest"]
+          name: be-tests-<< matrix.version >>-ee
+          description: "(<< matrix.version >>)"
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e:
-            name: mysql-5-7
+            name: << matrix.version >>
           driver: mysql
 
       - test-driver:
           name: be-tests-mysql-latest-ee
           description: "(MySQL latest)"
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e:
             name: mysql-latest
           driver: mysql
@@ -1182,28 +1168,10 @@ workflows:
             MB_MYSQL_SSL_TEST_USER=metabase
             MB_MYSQL_SSL_TEST_PASSWORD=$MYSQL_RDS_SSL_INSTANCE_PASSWORD
 
-      - test-driver:
-          name: be-tests-mariadb-ee
-          description: "(MariaDB 10.2)"
-          requires:
-            - be-tests-ee
-          e:
-            name: mariadb-10-2
-          driver: mysql
-
-      - test-driver:
-          name: be-tests-mariadb-latest-ee
-          description: "(MariaDB latest)"
-          requires:
-            - be-tests-ee
-          e:
-            name: mariadb-latest
-          driver: mysql
-
       - test-driver:
           name: be-tests-oracle-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           before-steps:
             - fetch-jdbc-driver:
                 source: ORACLE_JDBC_JAR
@@ -1224,7 +1192,7 @@ workflows:
           name: be-tests-postgres-ee
           description: "(9.6)"
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: postgres-9-6
           driver: postgres
 
@@ -1232,7 +1200,7 @@ workflows:
           name: be-tests-postgres-latest-ee
           description: "(Latest)"
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: postgres-latest
           driver: postgres
           extra-env: >-
@@ -1243,7 +1211,7 @@ workflows:
       - test-driver:
           name: be-tests-presto-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: presto-186
           before-steps:
             - wait-for-port:
@@ -1253,7 +1221,7 @@ workflows:
       - test-driver:
           name: be-tests-presto-jdbc-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: presto-jdbc-env # specific env for running Presto JDBC tests (newer Presto version, SSL, etc.)
           before-steps:
             - wait-for-port:
@@ -1289,44 +1257,31 @@ workflows:
       - test-driver:
           name: be-tests-redshift-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           driver: redshift
           timeout: 15m
 
       - test-driver:
           name: be-tests-snowflake-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           driver: snowflake
           timeout: 115m
 
       - test-driver:
           name: be-tests-sparksql-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: sparksql
           before-steps:
             - wait-for-port:
                 port: 10000
           driver: sparksql
 
-      - test-driver:
-          name: be-tests-sqlite-ee
-          requires:
-            - be-tests-ee
-          driver: sqlite
-
-      - test-driver:
-          name: be-tests-sqlserver-ee
-          requires:
-            - be-tests-ee
-          e: sqlserver
-          driver: sqlserver
-
       - test-driver:
           name: be-tests-vertica-ee
           requires:
-            - be-tests-ee
+            - be-tests-java-8-ee
           e: vertica
           before-steps:
             - fetch-jdbc-driver:
@@ -1403,14 +1358,12 @@ workflows:
             - wait-for-databases
 
       - fe-tests-cypress:
-          matrix:
-            parameters:
-              edition: ["ee", "oss"]
           name: percy-visual-tests-<< matrix.edition >>
           requires:
             - build-uberjar-<< matrix.edition >>
           cypress-group: "percy-visual-<< matrix.edition >>"
           test-files: "./frontend/test/metabase-visual/**/*.cy.spec.js"
+          <<: *Matrix
 
       - snowplow-deps:
           requires: