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:
- Parse all messages between 2025-03-20 and 2025-04-17
- Count how many were authored
- Compute a daily average
- Forecast usage through 2025-04-26 with a 20% buffer
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:
- Fewer iterative prompts
- More scoped, complete instructions
- Offload auxiliary tasks to GitHub Copilot or other tools
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:
- Load your
conversations.json
export:
with open("conversations.json", "r") as f:
data = json.load(f)
- 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
- 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:
- Export your data
- Analyze your real usage
- Let that shape your choice
No guesswork. No regret. Just data-backed clarity.
Original Article: https://t128n.github.io/writings/2025-04-17_data_over_vibes