torben haack [t128n]

Data over Vibes: Choosing the Right AI Tool

A data-driven approach to picking between ChatGPT Plus and T3.chat. Shows how Python usage analysis can validate tool decisions, avoid guesswork and align...

Most software decisions get made on vibes. Feature lists, pricing pages, hype. But when tools affect your workflow, usage and spend, you need to ask: does this fit how I actually work?

That question came up for me when my ChatGPT Plus subscription was set to expire. I was considering T3.chat instead. At $8/month, it’s a killer deal. Clean UX, great model lineup, privacy-first posture. But one thing gave me pause:

1,500 messages per month.

It sounded like enough… but was it? Rather than guess, I ran the numbers.

Export Your Data, Don’t Trust Your Gut

ChatGPT lets you export your full usage history as a conversations.json file. I wrote a small Python script to:

Here’s what came back:

--- FORECASTED USAGE (2025-03-20 → 2025-04-26) ---
Total actual messages: 1632
Active days so far: 29
Avg messages/day: 56.28
Avg/day (+20% buffer): 67.53
Remaining days to forecast: 9
Projected total usage by 2025-04-26: 2239 messages

What the Data Said

If I switched to T3.chat today, I’d exceed the message cap by ~49%.

That doesn’t mean T3.chat is bad. It’s excellent for users with leaner, more intentional workflows. But for me, it would force a change:

The real takeaway? This wasn’t a pricing question. It was a workflow question.

How the Script Works (and Why It’s Simple)

You don’t need a data pipeline to get useful insights. Here’s a simplified breakdown of how the Python script works:

  1. Load your conversations.json export:
with open("conversations.json", "r") as f:
    data = json.load(f)
  1. Loop through the data and count user-authored messages:
for conv in data:
    for msg in conv.get("mapping", {}).values():
        if msg.get("message", {}).get("author", {}).get("role") == "user":
            ts = msg["message"].get("create_time")
            if ts and start_date <= datetime.fromtimestamp(ts) <= today:
                dt = datetime.fromtimestamp(ts)
                daily_counts[dt.strftime("%Y-%m-%d")] += 1
  1. Calculate stats and forecast:
avg_per_day = total_msgs / active_days
avg_per_day_buffered = avg_per_day * 1.2
projected_msgs = total_msgs + (avg_per_day_buffered * remaining_days)

Done. Fast, accurate and actionable.

Why This Matters

Software trade-offs aren’t theoretical. They’re real, lived constraints. And if you want to stay efficient, whether you’re a developer, writer, or analyst—your tool choices need to match your patterns.

Good decisions come from data, not assumptions.

This one Python script saved me from adopting a tool that didn’t align with how I work today. Maybe I’ll evolve toward it later. But now, I know exactly what that change would cost.

TL;DR

If you’re evaluating alternatives to ChatGPT:

No guesswork. No regret. Just data-backed clarity.

2025-07-21 Update:

Usage patterns evolve. What you see above was a snapshot. My habits have shifted dramatically since then. After Gemini 2.5 Pro consistently exceeded and ChatGPT low-balled my expectations, I switched to T3. Three months in, I’ve never hit the 1,500 message cap (as Theo’s repeated praises on Twitter). The closest I’ve come is 1,200 messages, leaving a comfortable 300-message buffer. T3.chat fits my workflow perfectly now. So while the data-driven approach still stands, my choice has evolved with my needs.