diff --git a/frontend/test/metabase-visual/notebook/notebook.cy.spec.js b/frontend/test/metabase-visual/notebook/notebook.cy.spec.js
index cd74b5b790a92b1b10c17b0cc660095cbf7261b0..29eacf3bcc6d572eeecf6aef1bf9808d4ee85f49 100644
--- a/frontend/test/metabase-visual/notebook/notebook.cy.spec.js
+++ b/frontend/test/metabase-visual/notebook/notebook.cy.spec.js
@@ -12,8 +12,7 @@ describe("visual tests > notebook > major UI elements", () => {
   });
 
   it("renders correctly", () => {
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByTextEnsureVisible("Sample Database").click();
     cy.findByTextEnsureVisible("Orders").click();
 
@@ -67,8 +66,7 @@ describe("visual tests > notebook > Run buttons", () => {
 
   // This tests that the run buttons are the correct size on the Custom question page
   it("in Custom Question render correctly", () => {
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByTextEnsureVisible("Sample Database").click();
     cy.findByTextEnsureVisible("Orders").click();
     // Waiting for notebook icon to load
diff --git a/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js b/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
index e8bc561865744279ce34d3ad52f8ddd829ea42f7..a419396decc315680348ff375189120da449731f 100644
--- a/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
+++ b/frontend/test/metabase/scenarios/admin/datamodel/hide_tables.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore } from "__support__/e2e/cypress";
+import { restore, startNewQuestion } from "__support__/e2e/cypress";
 
 const ORDERS_URL = "/admin/datamodel/database/1/table/2";
 
@@ -39,8 +39,7 @@ describe("scenarios > admin > datamodel > hidden tables (metabase#9759)", () =>
 
     // It shouldn't show up as a normal user either
     cy.signInAsNormalUser();
-    cy.visit("/question/new");
-    cy.contains("Simple question").click();
+    startNewQuestion();
     cy.contains("Sample Database").click();
     cy.contains("Products");
     cy.contains("Orders").should("not.exist");
diff --git a/frontend/test/metabase/scenarios/binning/binning-reproductions.cy.spec.js b/frontend/test/metabase/scenarios/binning/binning-reproductions.cy.spec.js
index 2694382d71ac61822f4dbd64ba35c1f0043d47ad..0bd9bbe1b2f112fccdcb1353deb3fa66f0d06517 100644
--- a/frontend/test/metabase/scenarios/binning/binning-reproductions.cy.spec.js
+++ b/frontend/test/metabase/scenarios/binning/binning-reproductions.cy.spec.js
@@ -7,6 +7,7 @@ import {
   getBinningButtonForDimension,
   startNewQuestion,
   summarize,
+  openOrdersTable,
 } from "__support__/e2e/cypress";
 
 import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data";
@@ -26,8 +27,7 @@ describe("binning related reproductions", () => {
       native: { query: "select * from products limit 5" },
     });
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Saved Questions").click();
     cy.findByText("16327").click();
 
@@ -89,8 +89,7 @@ describe("binning related reproductions", () => {
       { loadMetadata: true },
     );
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Saved Questions").click();
     cy.findByText("17975").click();
 
@@ -119,10 +118,7 @@ describe("binning related reproductions", () => {
       { loadMetadata: true },
     );
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
-    cy.findByTextEnsureVisible("Sample Database").click();
-    cy.findByTextEnsureVisible("Orders").click();
+    openOrdersTable({ mode: "notebook" });
 
     cy.icon("join_left_outer").click();
 
diff --git a/frontend/test/metabase/scenarios/binning/qb-explicit-joins.cy.spec.js b/frontend/test/metabase/scenarios/binning/qb-explicit-joins.cy.spec.js
index 1db8a8889ea9b74e722dd12c577dbced827a6de4..6acb9f26a42e7b72d43d567feea061fc890b1ead 100644
--- a/frontend/test/metabase/scenarios/binning/qb-explicit-joins.cy.spec.js
+++ b/frontend/test/metabase/scenarios/binning/qb-explicit-joins.cy.spec.js
@@ -3,6 +3,7 @@ import {
   visualize,
   changeBinningForDimension,
   summarize,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
 
@@ -129,8 +130,7 @@ describe("scenarios > binning > from a saved QB question with explicit joins", (
 
   context("via custom question", () => {
     beforeEach(() => {
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("Saved Questions").click();
       cy.findByText("QB Binning").click();
 
diff --git a/frontend/test/metabase/scenarios/binning/sql.cy.spec.js b/frontend/test/metabase/scenarios/binning/sql.cy.spec.js
index 3125afb123e331fa22abcb720405cc14bb9be41d..c067b1e6ff4306578a205522cda81c8c06c8bb24 100644
--- a/frontend/test/metabase/scenarios/binning/sql.cy.spec.js
+++ b/frontend/test/metabase/scenarios/binning/sql.cy.spec.js
@@ -4,6 +4,7 @@ import {
   visualize,
   changeBinningForDimension,
   summarize,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
 
 const questionDetails = {
@@ -95,8 +96,7 @@ describe("scenarios > binning > from a saved sql question", () => {
 
   context("via custom question", () => {
     beforeEach(() => {
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("Saved Questions").click();
       cy.findByText("SQL Binning").click();
 
diff --git a/frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
index 2a31b53f438a3be2ab135021fcb61a0e0188b3f2..0b96abd842c3a1a4377f7b448962832841bf0868 100644
--- a/frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
+++ b/frontend/test/metabase/scenarios/custom-column/reproductions/13751-cc-allow-strings-in-filter.cy.spec.js
@@ -3,6 +3,7 @@ import {
   popover,
   visualize,
   restore,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
 
 const CC_NAME = "C-States";
@@ -13,8 +14,7 @@ describe("issue 13751", () => {
     restore("postgres-12");
     cy.signInAsAdmin();
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText(PG_DB_NAME)
       .should("be.visible")
       .click();
diff --git a/frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js b/frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
index cbc6d3d6b821c57687df4d72357d0ebec6d3ec7c..c027b72cfed3b9a9a2ca8c6d51acd1215cfc5c50 100644
--- a/frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
+++ b/frontend/test/metabase/scenarios/custom-column/reproductions/14517-cc-do-not-remove-regex-escape-chars.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, popover } from "__support__/e2e/cypress";
+import { restore, popover, startNewQuestion } from "__support__/e2e/cypress";
 
 const PG_DB_NAME = "QA Postgres12";
 
@@ -11,8 +11,7 @@ describe.skip("postgres > question > custom columns", () => {
     restore("postgres-12");
     cy.signInAsAdmin();
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText(PG_DB_NAME)
       .should("be.visible")
       .click();
diff --git a/frontend/test/metabase/scenarios/joins/joins-2.cy.spec.js b/frontend/test/metabase/scenarios/joins/joins-2.cy.spec.js
index bf254726a9317a03683e7130c98579d095946f1f..f371823f46c2456f71e1d69b0046c410c9c67275 100644
--- a/frontend/test/metabase/scenarios/joins/joins-2.cy.spec.js
+++ b/frontend/test/metabase/scenarios/joins/joins-2.cy.spec.js
@@ -36,8 +36,7 @@ describe("scenarios > question > joined questions", () => {
       cy.intercept("/api/database/1/schema/PUBLIC").as("schema");
 
       // start a custom question with orders
-      cy.visit("/question/new");
-      cy.contains("Custom question").click();
+      startNewQuestion();
       cy.contains("Sample Database").click();
       cy.contains("Orders").click();
 
@@ -81,8 +80,7 @@ describe("scenarios > question > joined questions", () => {
       cy.intercept("/api/database/1/schema/PUBLIC").as("schema");
 
       cy.log("Start a custom question with Orders");
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByTextEnsureVisible("Sample Database").click();
       cy.findByTextEnsureVisible("Orders").click();
 
@@ -133,8 +131,7 @@ describe("scenarios > question > joined questions", () => {
       });
 
       // start a custom question with question a
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("Saved Questions").click();
       cy.findByText("question a").click();
 
@@ -548,8 +545,7 @@ function joinTwoSavedQuestions() {
       },
     }).then(() => {
       cy.intercept("/api/database/1/schema/PUBLIC").as("schema");
-      cy.visit(`/question/new`);
-      cy.findByText("Custom question").click();
+      startNewQuestion();
 
       popover().within(() => {
         cy.findByText("Saved Questions").click();
diff --git a/frontend/test/metabase/scenarios/joins/joins.cy.spec.js b/frontend/test/metabase/scenarios/joins/joins.cy.spec.js
index 14a55cf9f02c358ea103af35ebdaaac644277afe..db10b7df03a412dfc9cbd855eb280ecb6c3b345d 100644
--- a/frontend/test/metabase/scenarios/joins/joins.cy.spec.js
+++ b/frontend/test/metabase/scenarios/joins/joins.cy.spec.js
@@ -4,6 +4,7 @@ import {
   popover,
   visualize,
   summarize,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
 
@@ -29,8 +30,7 @@ describe("scenarios > question > joined questions", () => {
       query: { "source-table": ORDERS_ID },
     });
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByTextEnsureVisible("Sample Database").click();
     cy.findByTextEnsureVisible("Products").click();
 
diff --git a/frontend/test/metabase/scenarios/joins/reproductions/15342-mysql-correct-joins-order.cy.spec.js b/frontend/test/metabase/scenarios/joins/reproductions/15342-mysql-correct-joins-order.cy.spec.js
index 6802a5a5a268fe8f4ef9ba567bf86c857df011f6..b56a03ca8308712b82887f4d83ac1baf16199fc3 100644
--- a/frontend/test/metabase/scenarios/joins/reproductions/15342-mysql-correct-joins-order.cy.spec.js
+++ b/frontend/test/metabase/scenarios/joins/reproductions/15342-mysql-correct-joins-order.cy.spec.js
@@ -1,4 +1,9 @@
-import { restore, popover, visualize } from "__support__/e2e/cypress";
+import {
+  restore,
+  popover,
+  visualize,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 
 const MYSQL_DB_NAME = "QA MySQL8";
 
@@ -11,8 +16,7 @@ describe.skip("issue 15342", () => {
   });
 
   it("should correctly order joins for MySQL queries (metabase#15342)", () => {
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText(MYSQL_DB_NAME).click();
     cy.findByText("People").click();
 
diff --git a/frontend/test/metabase/scenarios/joins/reproductions/18502-cannot-join-two-saved-questions-same-table.cy.spec.js b/frontend/test/metabase/scenarios/joins/reproductions/18502-cannot-join-two-saved-questions-same-table.cy.spec.js
index 2f79f8aaf20fad993812c802dae4b0f5b042c0fc..160f432182fb723fabd5fda160622ba11ad96dcf 100644
--- a/frontend/test/metabase/scenarios/joins/reproductions/18502-cannot-join-two-saved-questions-same-table.cy.spec.js
+++ b/frontend/test/metabase/scenarios/joins/reproductions/18502-cannot-join-two-saved-questions-same-table.cy.spec.js
@@ -1,4 +1,9 @@
-import { restore, popover, visualize } from "__support__/e2e/cypress";
+import {
+  restore,
+  popover,
+  visualize,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
 
 const { PEOPLE, PEOPLE_ID } = SAMPLE_DATABASE;
@@ -19,8 +24,7 @@ describe("issue 18502", () => {
     cy.createQuestion(question1);
     cy.createQuestion(question2);
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Saved Questions").click();
 
     cy.findByText("18502#1").click();
diff --git a/frontend/test/metabase/scenarios/joins/reproductions/18512-cannot-join-two-saved-questions-with-same-implicit-explicit-grouped-field.cy.spec.js b/frontend/test/metabase/scenarios/joins/reproductions/18512-cannot-join-two-saved-questions-with-same-implicit-explicit-grouped-field.cy.spec.js
index a6e3de9b0e016341f24a6a0ce8fe7ce1af8a2998..f5b8d6b3e563718853d01f2412db7491de191583 100644
--- a/frontend/test/metabase/scenarios/joins/reproductions/18512-cannot-join-two-saved-questions-with-same-implicit-explicit-grouped-field.cy.spec.js
+++ b/frontend/test/metabase/scenarios/joins/reproductions/18512-cannot-join-two-saved-questions-with-same-implicit-explicit-grouped-field.cy.spec.js
@@ -1,4 +1,9 @@
-import { restore, popover, visualize } from "__support__/e2e/cypress";
+import {
+  restore,
+  popover,
+  visualize,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
 
 const { PRODUCTS, PRODUCTS_ID, REVIEWS, REVIEWS_ID } = SAMPLE_DATABASE;
@@ -20,8 +25,7 @@ describe("issue 18512", () => {
     cy.createQuestion(question1);
     cy.createQuestion(question2);
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Saved Questions").click();
 
     cy.findByText("18512#1").click();
diff --git a/frontend/test/metabase/scenarios/models/models.cy.spec.js b/frontend/test/metabase/scenarios/models/models.cy.spec.js
index ef8e408faa9fc4c7cd0054b614493a6a4ba6ea4e..02fc0a4b83097407214549126e91e1a912f42f8e 100644
--- a/frontend/test/metabase/scenarios/models/models.cy.spec.js
+++ b/frontend/test/metabase/scenarios/models/models.cy.spec.js
@@ -12,8 +12,11 @@ import {
   filter,
   visitQuestion,
   visitDashboard,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
+
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
+
 import {
   turnIntoModel,
   assertIsModel,
@@ -189,8 +192,7 @@ describe("scenarios > models", () => {
     });
 
     it("transforms the data picker", () => {
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
 
       popover().within(() => {
         testDataPickerSearch({
@@ -238,8 +240,7 @@ describe("scenarios > models", () => {
 
     it("allows to create a question based on a model", () => {
       cy.intercept("/api/database/1/schema/PUBLIC").as("schema");
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
 
       popover().within(() => {
         cy.findByText("Models").click();
@@ -278,8 +279,7 @@ describe("scenarios > models", () => {
 
     it("should not display models if nested queries are disabled", () => {
       mockSessionProperty("enable-nested-queries", false);
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       popover().within(() => {
         cy.findByText("Models").should("not.exist");
         cy.findByText("Saved Questions").should("not.exist");
diff --git a/frontend/test/metabase/scenarios/native/reproductions/15946-mongo-pre-select-table.cy.spec.js b/frontend/test/metabase/scenarios/native/reproductions/15946-mongo-pre-select-table.cy.spec.js
index c054e6cf4f4def9527ee910efc707cd0279747dc..0c68866bc93720648af1a1c5ce13ffed56af52f9 100644
--- a/frontend/test/metabase/scenarios/native/reproductions/15946-mongo-pre-select-table.cy.spec.js
+++ b/frontend/test/metabase/scenarios/native/reproductions/15946-mongo-pre-select-table.cy.spec.js
@@ -1,4 +1,4 @@
-import { restore, modal } from "__support__/e2e/cypress";
+import { restore, modal, startNewQuestion } from "__support__/e2e/cypress";
 
 const MONGO_DB_NAME = "QA Mongo4";
 
@@ -7,8 +7,7 @@ describe.skip("issue 15946", () => {
     restore("mongo-4");
     cy.signInAsAdmin();
 
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText(MONGO_DB_NAME).click();
     cy.findByText("Orders").click();
   });
diff --git a/frontend/test/metabase/scenarios/permissions/sandboxes.cy.spec.js b/frontend/test/metabase/scenarios/permissions/sandboxes.cy.spec.js
index e2c2a81f635b4d452158b930df0c65cc833fbfd6..7edc0e96491e5638a778121e51b41b40f5c7a208 100644
--- a/frontend/test/metabase/scenarios/permissions/sandboxes.cy.spec.js
+++ b/frontend/test/metabase/scenarios/permissions/sandboxes.cy.spec.js
@@ -13,7 +13,9 @@ import {
   filter,
   visitQuestion,
   visitDashboard,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
+
 import { USER_GROUPS, SAMPLE_DB_ID } from "__support__/e2e/cypress_data";
 
 import { SAMPLE_DATABASE } from "__support__/e2e/cypress_sample_database";
@@ -763,8 +765,7 @@ describeEE("formatting > sandboxes", () => {
     it("should be able to use summarize columns from joined table based on a saved question (metabase#14766)", () => {
       createJoinedQuestion("14766_joined");
 
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("Saved Questions").click();
       cy.findByText("14766_joined").click();
       cy.findByText("Pick the metric you want to see").click();
diff --git a/frontend/test/metabase/scenarios/question/nested.cy.spec.js b/frontend/test/metabase/scenarios/question/nested.cy.spec.js
index 2f3fb5070fd674afedfff6d6d9dfa610a9772cdd..fbfb99ef1e41c7ba4b9cb864bcedd2d661769cab 100644
--- a/frontend/test/metabase/scenarios/question/nested.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/nested.cy.spec.js
@@ -545,12 +545,15 @@ describe("scenarios > question > nested", () => {
       });
       // Window object gets recreated for every `cy.visit`
       // See: https://stackoverflow.com/a/65218352/8815185
-      cy.visit("/question/new", {
+      cy.visit("/", {
         onBeforeLoad(win) {
           cy.spy(win.console, "warn").as("consoleWarn");
         },
       });
-      cy.findByText("Custom question").click();
+      cy.findByText("New").click();
+      cy.findByText("Question")
+        .should("be.visible")
+        .click();
       cy.findByText("Saved Questions").click();
       cy.findByText("15725").click();
       cy.findByText("Pick the metric you want to see").click();
diff --git a/frontend/test/metabase/scenarios/question/new.cy.spec.js b/frontend/test/metabase/scenarios/question/new.cy.spec.js
index 97cc371a40e3d21655bc8cfa3f0778ddb2004527..5a1521d5abe367e52f47cbb4bfc1b05647ee5ef2 100644
--- a/frontend/test/metabase/scenarios/question/new.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/new.cy.spec.js
@@ -46,8 +46,7 @@ describe("scenarios > question > new", () => {
     cy.findByText("Sample3").isVisibleInPopover();
 
     // Then move to the Custom question UI
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Sample3").isVisibleInPopover();
   });
 
@@ -72,12 +71,9 @@ describe("scenarios > question > new", () => {
   });
 
   describe("data picker search", () => {
-    beforeEach(() => {
-      cy.visit("/question/new");
-    });
-
     describe("on a (simple) question page", () => {
       beforeEach(() => {
+        cy.visit("/question/new");
         cy.findByText("Simple question").click();
         cy.findByPlaceholderText("Search for a table…").type("Ord");
       });
@@ -102,7 +98,7 @@ describe("scenarios > question > new", () => {
 
     describe("on a (custom) question page", () => {
       beforeEach(() => {
-        cy.findByText("Custom question").click();
+        startNewQuestion();
         cy.findByPlaceholderText("Search for a table…").type("Ord");
       });
 
@@ -133,18 +129,15 @@ describe("scenarios > question > new", () => {
       cy.intercept("/api/search", req => {
         expect("Unexpected call to /api/search").to.be.false;
       });
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByPlaceholderText("Search for a table…").type("  ");
     });
   });
 
   describe("saved question picker", () => {
-    beforeEach(() => {
-      cy.visit("/question/new");
-    });
-
     describe("on a (simple) question page", () => {
       beforeEach(() => {
+        cy.visit("/question/new");
         cy.findByText("Simple question").click();
         cy.findByText("Saved Questions").click();
       });
@@ -169,7 +162,7 @@ describe("scenarios > question > new", () => {
 
     describe("on a (custom) question page", () => {
       beforeEach(() => {
-        cy.findByText("Custom question").click();
+        startNewQuestion();
         cy.findByText("Saved Questions").click();
       });
 
diff --git a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
index bc3b905bd37844d3b32da9cede8ab7bb95bb3c55..3916e83bed7f917e98cd823d5dd27fb9f6c67e03 100644
--- a/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
+++ b/frontend/test/metabase/scenarios/question/notebook.cy.spec.js
@@ -10,6 +10,7 @@ import {
   visualize,
   summarize,
   filter,
+  startNewQuestion,
 } from "__support__/e2e/cypress";
 
 import { SAMPLE_DB_ID } from "__support__/e2e/cypress_data";
@@ -42,8 +43,7 @@ describe("scenarios > question > notebook", () => {
 
   it("should allow post-aggregation filters", () => {
     // start a custom question with orders
-    cy.visit("/question/new");
-    cy.contains("Custom question").click();
+    startNewQuestion();
     cy.contains("Sample Database").click();
     cy.contains("Orders").click();
 
@@ -195,8 +195,7 @@ describe("scenarios > question > notebook", () => {
   // flaky test (#19454)
   it.skip("should show an info popover for dimensions listened by the custom expression editor", () => {
     // start a custom question with orders
-    cy.visit("/question/new");
-    cy.contains("Custom question").click();
+    startNewQuestion();
     cy.contains("Sample Database").click();
     cy.contains("Orders").click();
 
@@ -220,8 +219,7 @@ describe("scenarios > question > notebook", () => {
       restore();
       cy.signInAsAdmin();
       cy.viewport(1280, 720);
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByTextEnsureVisible("Sample Database").click();
       cy.findByTextEnsureVisible("Orders").click();
     });
@@ -375,8 +373,7 @@ describe("scenarios > question > notebook", () => {
   // intentional simplification of "Select none" to quickly
   // fix users' pain caused by the inability to unselect all columns
   it("select no columns select the first one", () => {
-    cy.visit("/question/new");
-    cy.contains("Custom question").click();
+    startNewQuestion();
     cy.contains("Sample Database").click();
     cy.contains("Orders").click();
     cy.findByTestId("fields-picker").click();
@@ -398,8 +395,7 @@ describe("scenarios > question > notebook", () => {
 
   // flaky test
   it.skip("should show an info popover when hovering over a field picker option for a table", () => {
-    cy.visit("/question/new");
-    cy.contains("Custom question").click();
+    startNewQuestion();
     cy.contains("Sample Database").click();
     cy.contains("Orders").click();
 
@@ -419,8 +415,7 @@ describe("scenarios > question > notebook", () => {
     });
 
     // start a custom question with question a
-    cy.visit("/question/new");
-    cy.findByText("Custom question").click();
+    startNewQuestion();
     cy.findByText("Saved Questions").click();
     cy.findByText("question a").click();
 
diff --git a/frontend/test/metabase/scenarios/question/reproductions/15714-cc-postgres-percentile-accepts-two-params.js b/frontend/test/metabase/scenarios/question/reproductions/15714-cc-postgres-percentile-accepts-two-params.js
index 06217c2ba29ebac955056585463c8730766e395b..9ca4049a9bc9c690146e1d34631cff9293b5c09a 100644
--- a/frontend/test/metabase/scenarios/question/reproductions/15714-cc-postgres-percentile-accepts-two-params.js
+++ b/frontend/test/metabase/scenarios/question/reproductions/15714-cc-postgres-percentile-accepts-two-params.js
@@ -1,4 +1,8 @@
-import { enterCustomColumnDetails, restore } from "__support__/e2e/cypress";
+import {
+  enterCustomColumnDetails,
+  restore,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 
 const PG_DB_NAME = "QA Postgres12";
 
@@ -8,8 +12,7 @@ export function issue15714() {
       restore("postgres-12");
       cy.signInAsAdmin();
 
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText(PG_DB_NAME)
         .should("be.visible")
         .click();
diff --git a/frontend/test/metabase/scenarios/question/reproductions/17963-mongo-filter-expression-compare-two-fields.js b/frontend/test/metabase/scenarios/question/reproductions/17963-mongo-filter-expression-compare-two-fields.js
index 90fe67be9562674ad1cbad1e4724542e292f533d..1a9d2cae1208269b752397680e1c8de63a241f33 100644
--- a/frontend/test/metabase/scenarios/question/reproductions/17963-mongo-filter-expression-compare-two-fields.js
+++ b/frontend/test/metabase/scenarios/question/reproductions/17963-mongo-filter-expression-compare-two-fields.js
@@ -1,4 +1,9 @@
-import { restore, popover, visualize } from "__support__/e2e/cypress";
+import {
+  restore,
+  popover,
+  visualize,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 
 export function issue17963() {
   describe("issue 17963", () => {
@@ -6,8 +11,7 @@ export function issue17963() {
       restore("mongo-4");
       cy.signInAsAdmin();
 
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("QA Mongo4").click();
       cy.findByText("Orders").click();
     });
diff --git a/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.js b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.js
index 5760630808e153f625f7c6301d140e5e1433ab9a..18e577dc6c1b1593e520d23a0f905bb666014f5b 100644
--- a/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.js
+++ b/frontend/test/metabase/scenarios/question/reproductions/18207-string-min-max.js
@@ -3,6 +3,8 @@ import {
   popover,
   restore,
   visualize,
+  openProductsTable,
+  summarize,
 } from "__support__/e2e/cypress";
 
 export function issue18207() {
@@ -12,16 +14,12 @@ export function issue18207() {
 
       restore();
       cy.signInAsAdmin();
+
+      openProductsTable({ mode: "notebook" });
+      summarize({ mode: "notebook" });
     });
 
     it("should be possible to use MIN on a string column (metabase#18207)", () => {
-      cy.visit("/question/new");
-      cy.contains("Custom question").click();
-      cy.contains("Sample Database").click();
-      cy.contains("Products").click();
-
-      cy.contains("Pick the metric").click();
-
       cy.contains("Minimum of").click();
       cy.findByText("Price");
       cy.findByText("Rating");
@@ -33,13 +31,6 @@ export function issue18207() {
     });
 
     it("should be possible to use MAX on a string column (metabase#18207)", () => {
-      cy.visit("/question/new");
-      cy.contains("Custom question").click();
-      cy.contains("Sample Database").click();
-      cy.contains("Products").click();
-
-      cy.contains("Pick the metric").click();
-
       cy.contains("Maximum of").click();
       cy.findByText("Price");
       cy.findByText("Rating");
@@ -51,13 +42,6 @@ export function issue18207() {
     });
 
     it("should be not possible to use AVERAGE on a string column (metabase#18207)", () => {
-      cy.visit("/question/new");
-      cy.contains("Custom question").click();
-      cy.contains("Sample Database").click();
-      cy.contains("Products").click();
-
-      cy.contains("Pick the metric").click();
-
       cy.contains("Average of").click();
       cy.findByText("Price");
       cy.findByText("Rating");
@@ -65,12 +49,6 @@ export function issue18207() {
     });
 
     it("should be possible to group by a string expression (metabase#18207)", () => {
-      cy.visit("/question/new");
-      cy.contains("Custom question").click();
-      cy.contains("Sample Database").click();
-      cy.contains("Products").click();
-
-      cy.contains("Pick the metric").click();
       popover()
         .contains("Custom Expression")
         .click();
diff --git a/frontend/test/metabase/scenarios/question/reproductions/19341-disabled-nested-queries.js b/frontend/test/metabase/scenarios/question/reproductions/19341-disabled-nested-queries.js
index 7583c4226a54c243e29c1441a0f083430c2daaad..3e1aacb27971a3e953f110a84af2b65a17a8b9bb 100644
--- a/frontend/test/metabase/scenarios/question/reproductions/19341-disabled-nested-queries.js
+++ b/frontend/test/metabase/scenarios/question/reproductions/19341-disabled-nested-queries.js
@@ -1,4 +1,9 @@
-import { restore, mockSessionProperty, popover } from "__support__/e2e/cypress";
+import {
+  restore,
+  mockSessionProperty,
+  popover,
+  startNewQuestion,
+} from "__support__/e2e/cypress";
 
 export function issue19341() {
   describe("issue 19341", () => {
@@ -19,8 +24,7 @@ export function issue19341() {
 
     it("should correctly disable nested queries (metabase#19341)", () => {
       // Test "Saved Questions" table is hidden in QB data selector
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       popover().within(() => {
         // Wait until picker init
         // When working as expected, the test environment only has "Sample Database" DB
diff --git a/frontend/test/metabase/scenarios/question/reproductions/9027-new-questions-not-in-saved-questions-immediately.js b/frontend/test/metabase/scenarios/question/reproductions/9027-new-questions-not-in-saved-questions-immediately.js
index 64e0d91b1f9fd39c6c30c2f7c22ec1c84140400c..fb871a63b6a182e48588819c21ecc4aa563d4477 100644
--- a/frontend/test/metabase/scenarios/question/reproductions/9027-new-questions-not-in-saved-questions-immediately.js
+++ b/frontend/test/metabase/scenarios/question/reproductions/9027-new-questions-not-in-saved-questions-immediately.js
@@ -15,8 +15,7 @@ export function issue9027() {
       restore();
       cy.signInAsAdmin();
 
-      cy.visit("/question/new");
-      cy.findByText("Custom question").click();
+      startNewQuestion();
       cy.findByText("Saved Questions").click();
 
       // Wait for the existing questions to load