Open this lesson in your favourite AI. It'll walk you through the why, explain the demo, and quiz you on the try-it list.
You are not the first person to want their inbox triaged, their calendar auto-scheduled, or their notes summarized. Several teams have spent years and millions of dollars on exactly the sub-problems you're about to hand-code, and their tools are cheap. Before writing bot code for a domain, look at whether Motion, Reclaim, SaneBox, Superhuman, Fireflies, Granola, or Clay already does the specific thing you need at a quality you can't easily match. The point of THIS course is to build the parts that are personal to YOU — voice-matched drafts, memory across tools, a Telegram interface that ties everything together, verify-before-use knowledge — not to reinvent scheduling algorithms. A working bot in production is a Frankenstein of your custom code plus off-the-shelf building blocks; knowing which is which is a skill.
A build-vs-buy scorecard applied to the sub-problems this course covers. For each sub-problem, check whether an off-the-shelf tool already exists and whether it's cheaper than your engineering time.
Use these three in order. Each builds on the one before.
In one paragraph, explain when to build a custom bot component versus buying an off-the-shelf tool.
Walk me through the specific failure modes of over-building — engineering time, maintenance burden, integration fragility — versus the failure modes of over-buying — vendor lock-in, cost drift, poor personalization.
I'm about to write my own meeting-note pipeline. Fireflies exists and costs $10/mo. What are three concrete reasons to build my own, and are they worth it?
def build_or_buy(sub_problem):
"""
Score whether to build custom code or buy an off-the-shelf tool.
Higher score = build. Lower score = buy.
"""
score = 0
# Build signals
score += 2 if sub_problem["needs_your_voice_or_context"] else 0
score += 1 if sub_problem["off_the_shelf_costs_more_than_10_usd_month"] else 0
score += 1 if sub_problem["integrates_with_your_bot_via_api_only_poorly"] else 0
# Buy signals
score -= 2 if sub_problem["mature_tool_exists"] else 0
score -= 1 if sub_problem["your_time_worth_more_than_50_usd_hour"] else 0
score -= 1 if sub_problem["would_take_you_over_a_week_to_build"] else 0
verdict = "build" if score >= 1 else "buy" if score <= -1 else "either"
return {"score": score, "verdict": verdict}
candidates = [
("Voice-matched email drafts",
{"needs_your_voice_or_context": True, "off_the_shelf_costs_more_than_10_usd_month": True,
"integrates_with_your_bot_via_api_only_poorly": True, "mature_tool_exists": False,
"your_time_worth_more_than_50_usd_hour": True, "would_take_you_over_a_week_to_build": False}),
("Meeting note-taking + action items",
{"needs_your_voice_or_context": False, "off_the_shelf_costs_more_than_10_usd_month": False,
"integrates_with_your_bot_via_api_only_poorly": False, "mature_tool_exists": True,
"your_time_worth_more_than_50_usd_hour": True, "would_take_you_over_a_week_to_build": True}),
("Calendar auto-scheduling with priorities",
{"needs_your_voice_or_context": False, "off_the_shelf_costs_more_than_10_usd_month": False,
"integrates_with_your_bot_via_api_only_poorly": False, "mature_tool_exists": True,
"your_time_worth_more_than_50_usd_hour": True, "would_take_you_over_a_week_to_build": True}),
]
for name, features in candidates:
r = build_or_buy(features)
print(f"{name:45s} -> {r['verdict']:6s} (score={r['score']:+d})")
python3 main.py