🟢 How to Diagnose a Business Problem Fast (The Gordon Ramsay Blueprint)


Hello Reader,

Most analysts panic when they get a note like this on a random Tuesday afternoon (from the CEO):

"Revenue feels off this quarter. Can you figure out what's happening before the board call at 4:30?"

Great. You have 90 minutes. No time to build a comprehensive analysis. No time to make it pretty. You need to diagnose the problem (super fast) and deliver a clear answer.

Lucky you. You're going to learn the way a seasoned pro handles this situation.

I call it The Gordon Ramsay Blueprint

Gordon has built up a reputation of being able to identify problems quickly: taste the dish, identify what's wrong, fix it, plate it for the table. When Gordon Ramsay walks into a struggling restaurant kitchen, he doesn't ask for a detailed menu history. He tastes the food, identifies the core problems, and acts.

That's exactly how you should handle urgent analytical requests.

And there are four steps:

Step 1: Taste the Dish (Quick Health Check)

Step 2: Identify What's Wrong (Drill into the Problem)

Step 3: Fix the Issue (Identify Root Causes)

Step 4: Plate it for the Table (Present Clearly)

Four Simple Steps To Solving Data Problems (Fast)

Step 1: Taste the Dish (Quick Health Check)

Before diagnosing anything, you need a snapshot of the current state.

This is your "taste". A single query that tells you the vital signs:

-- Quick business health check
SELECT 
    'Total Revenue' AS metric,
    '$' || TO_CHAR(SUM(amount), 'FM999,999,999') AS value
FROM payments WHERE payment_status = 'completed'
UNION ALL
SELECT 'Active Customers', 
    COUNT(DISTINCT customer_id)::text
FROM bookings WHERE status IN ('completed', 'confirmed')
UNION ALL
SELECT 'Avg Booking Value', 
    '$' || ROUND(AVG(amount)::numeric, 0)::text
FROM payments WHERE payment_status = 'completed'
UNION ALL
SELECT 'Cancellation Rate', 
    ROUND(
        COUNT(*) FILTER (WHERE status = 'cancelled')::numeric 
        / COUNT(*) * 100, 1
    )::text || '%'
FROM bookings
UNION ALL
SELECT 'Total Expeditions Offered', 
    COUNT(*)::text 
FROM expeditions
UNION ALL
SELECT 'Active Guides', 
    COUNT(*)::text 
FROM guides WHERE is_active = TRUE;

This query might look complicated, but here's the breakdown:

  • Total Revenue: The sum of all completed payments.
  • Active Customers: The number of unique customers with confirmed or completed bookings.
  • Average Booking Value: The average amount of completed payments.
  • Cancellation Rate: The percentage of bookings that were cancelled.
  • Total Expeditions Offered: The total number of expeditions in the system.
  • Active Guides: The number of guides currently marked as active.

And here are the results for Summit Adventures (the fake adventure travel company I created to help teach people business analytics)

Now you know: $2.3M total revenue, 552 active customers, $1,738 average booking, 47% cancellation rate, 100 expeditions served by 45 active guides.

That cancellation rate jumps out immediately. Nearly half of all bookings cancel. That's your first lead.

Step 2: Identify What's Wrong (Drill into the Problem)

Now you focus. If the CEO says "revenue feels off this quarter," compare quarters:

-- Quarterly revenue comparison
SELECT 
    EXTRACT(QUARTER FROM b.booking_date)::int AS quarter,
    COUNT(*) AS bookings,
    ROUND(SUM(p.amount)::numeric, 2) AS quarterly_revenue
FROM bookings b
    INNER JOIN payments p ON b.booking_id = p.booking_id
WHERE p.payment_status = 'completed'
    AND b.status IN ('completed', 'confirmed')
    AND EXTRACT(YEAR FROM b.booking_date) = 2025
GROUP BY EXTRACT(QUARTER FROM b.booking_date)
ORDER BY quarter;

Q3 dropped 60% from Q2. That's dramatic. But is it unexpected? Adventure travel is seasonal with Q3 and Q4 are typically slower periods. So the question becomes: is this drop worse than expected, or is this the normal seasonal pattern?

Let's keep doing to find the root cause.

Step 3: Fix the Issue (Identify Root Causes)

Now dig into what's driving the decline. Is it fewer bookings, lower values, or specific category problems?

-- Q2 vs Q3 breakdown by expedition type
SELECT 
    e.expedition_type,
    COUNT(*) FILTER (
        WHERE EXTRACT(QUARTER FROM b.booking_date) = 2
    ) AS q2_bookings,
    COUNT(*) FILTER (
        WHERE EXTRACT(QUARTER FROM b.booking_date) = 3
    ) AS q3_bookings,
    ROUND(
        (COUNT(*) FILTER (WHERE EXTRACT(QUARTER FROM b.booking_date) = 3)::numeric 
        - COUNT(*) FILTER (WHERE EXTRACT(QUARTER FROM b.booking_date) = 2)::numeric)
        / NULLIF(COUNT(*) FILTER (WHERE EXTRACT(QUARTER FROM b.booking_date) = 2), 0) 
        * 100, 1
    ) AS change_pct
FROM bookings b
    INNER JOIN expedition_instances ei ON b.instance_id = ei.instance_id
    INNER JOIN expeditions e ON ei.expedition_id = e.expedition_id
    INNER JOIN payments p ON b.booking_id = p.booking_id
WHERE p.payment_status = 'completed'
    AND b.status IN ('completed', 'confirmed')
    AND EXTRACT(YEAR FROM b.booking_date) = 2025
    AND EXTRACT(QUARTER FROM b.booking_date) IN (2, 3)
GROUP BY e.expedition_type
ORDER BY change_pct;

Bingo.

This shows you which categories dropped the most. If all categories dropped evenly, it's a market or seasonal issue. If one category dropped disproportionately, that's an operational issue specific to that category.

Step 4: Plate it for the Table (Present Clearly)

At 4:15pm, you walk into The CEO's office:

Here's what I found:
Revenue dropped 60% from Q2 ($556K) to Q3 ($222K). This is consistent with seasonal adventure travel patterns with Q2 our peak booking season.
Two things stand out:
First, our cancellation rate is 47% across all bookings. That means for every two customers who book, nearly one cancels. If we could reduce that by 10 percentage points, we'd recover approximately $150K in annual revenue.
Second, climbing expeditions have the highest cancellation rate (52%). If there's a product-specific fix (like flexible rebooking or trip preparation resources) it would have the biggest impact there.
My recommendation: Let's look at when cancellations happen. If they're last-minute, a pre-departure confirmation process would help. If they're early, we may have a marketing expectation problem.

That's a 60-second verbal summary backed by three queries. The CEO has what she needs for the board call.

Why This Framework Works Everywhere

These steps work for Gordon Ramsay, whether it's a cooking show or rescuing a mom and pop restaurant:

  1. Taste (overview) → understand the current state
  2. Identify (diagnose) → find the problem
  3. Fix (root cause) → understand why it's happening
  4. Plate (communicate) → deliver the findings clearly

This works with any business analytics tool like SQL, Excel, Python, Tableau. The thinking pattern is the same. The tool just determines how fast you can execute.

In a spreadsheet, your "taste" might be a pivot table summary. In Python, it might be a pandas .describe() call. In Tableau, it might be a pre-built executive dashboard.

Common Mistakes to Avoid (Especially if You're Feeling Pressured)

Mistake 1: Trying to answer everything at once

Urgent doesn't mean comprehensive. Answer the specific question first. Offer to follow up with deeper analysis tomorrow.

Mistake 2: Presenting raw query output

Numbers without interpretation aren't helpful under time pressure. Your executive doesn't want a table, they want "revenue is down 60% due to seasonality, but cancellation rates are a fixable issue." Insights are pure gold. Get good at putting them together.

Mistake 3: Not having a health check saved

If the CEO's question catches you off guard, you need a starting point. Build the health check query before you need it.

Try This Before Your Next Urgent Request

  1. Build a health check query for your main business database (5-6 key metrics)
  2. Save it somewhere accessible
  3. Practice the verbal summary: "Here's the situation, here's what stands out, here's what I recommend"

When the request comes (and, trust me, it will) you'll be one step ahead of the game.

Until next time,

Brian

Brian Graves, creator of Analytics in Action

Say 👋 on X/Twitter, LinkedIn, or book a call with me. You can always reply to these emails. I check them all.

P.S. The Gordon Ramsay Blueprint is the capstone framework in Module 8 of SQL for Business Impact. It brings together everything from the previous 7 modules into a rapid diagnostic process. Check it out at sqlforbusinessimpact.com.

P.P.S. What's the most urgent analytical request you've ever received? How did you handle it? Hit reply and let me know. I love these stories! I read every response.

Starting With Data

Learn to build analytics projects with SQL, Tableau, Excel, and Python. For data analysts looking to level up their career and complete beginners looking to get started. No fluff. No theory. Just step-by-step tutorials anyone can follow.

Read more from Starting With Data

Hello Reader, A while back, I shared some tips about formatting SQL output for spreadsheets. Today we're going the other direction. Doing the kind of analysis that makes spreadsheet formulas feel clunky. Here's the kind of request that analysts get every single day: "Show me monthly revenue and how the trend is moving." If you pull monthly revenue into a spreadsheet, you'd probably create a running total column, then a 3-month moving average column, then a month-over-month change column....

Hello Reader, Here's a fact of analyst life: most of the people who use your analysis will never use SQL. Instead, they'll use spreadsheets and reports. Your director doesn't open pgAdmin. Your marketing team doesn't "connect to the database". They open the Excel file or Google Sheet you sent them. And if the data you exported requires 20 minutes of cleanup before it's usable (reformatting dates, splitting columns, fixing number formats) you've done extra work that didn't need to happen....

Hey Reader -- I'm trying something new this week! Can you take a minute to fill out this quick survey? Thanks in advance! Okay, on to this week's topic: A common question I get from readers is some version of: "This Summit Adventures stuff is great, but I work in healthcare (or SaaS, or retail, or finance). How does this apply to me?" The honest answer: every SQL pattern you've learned in this newsletter translates directly to your industry. The table names change. So do column names. The...