Defining a Personal API

The UK is just starting to enforce EU’s cookie consent law. Visit the FT for the first time in a while and you’ll see:

image In effect, this law requires consumers to define a Personal API. Consumers carry a trove of data: browsing data, ad click data, friend network data and social sharing data. Web businesses have realized the value of that data ($12B in 2011). This EU law encourages consumers to become aware of the value of this data and manage it.

Read more

Successful SMB SaaS Companies Have a 2 Step Value Proposition

On first glance, SMB SaaS companies, those who sell Software-as-a-Service to small to medium businesses, may seem like any other software company. But they are quite a different breed. It’s not just the sales process that differs from traditional software. The entire business has be built differently. So must the product. And typically these products have a 2 step value proposition.

SMB SaaS companies sell to a radically different market than enterprise software companies. See the table below. The average traditional enterprise software company sells to firms with 3300 employees whose average payroll is $160M annually. In the US, there are only 17,500 of these firms. On the other hand, SMB SaaS companies sell to firms with 10 employees and $400k in annual payroll. There are about 5.8M of these firms in the US.

Read more

About

I started a company at 17 which built legal software for international law firms in South America. That experience made me fall in love with startups.

In college & grad school I studied mechanical engineering, computer science, & control systems which helped me understand the power of well-designed machine learning. I joined a startup called Appian as a software engineer building Java systems for government agencies before coming to California in 2005.

Read more

How Do VCs Analyze Companies?

One of the main challenges I have faced working in venture capital is to find a consistent structured way of analyzing companies. The main goals in this analysis are comprehensiveness of the analysis, ease of replication across sectors and like startups, developing a minimally viable analysis for a first pass that can also serve as the foundation of a deeper analysis as an opportunity warrants.

Over the past 18 months, I’ve read tens of business books on strategy, business models, and analytical frameworks. And over the weekend, I read one particularly insightful book that put a capstone on my preferred collection of analyses: Business Model Generation. The book is crowdsourced from a collection of over 1,000 authors and provides a flexible framework for brainstorming, analyzing and comparing business models. It’s an invaluable resource to any entrepreneur and VC.

Read more

IBM

We continue to gain momentum with our GenAI book of business growing to over $5 billion inception to date, up by about $2 billion quarter-over-quarter. Approximately 1/5 of this book of business comes from Software and the remaining 4/5 is Consulting.

Accenture

We had another milestone quarter in GenAI, with $1.2 billion in new bookings and approximately $500 million in revenue.

Microsoft

And our AI business has now surpassed an annual revenue run rate of $13 billion, up 175% year-over-year.

Read more

A reader asked for an update given the macro changes & the stock market behavior. Here it is:

Multiple = -12.6 + 34.1 x Forward_Growth_Rate + 4.2 x Sales_Efficiency


Some quick definitions:

  • Multiple is the forward revenue multiple. Take it and multiply your company’s planned revenue (not ARR) next year & you’ll have an estimate of the value of your business if it were traded in the public markets today.
  • Forward_growth_rate: how much the business will grow revenues in the next 12 months
  • Sales_Efficiency: (change in gross profit) / sales_and_marketing expense. In other words, how much marginal gross profit did the sales & marketing investment last period generate. This can be calculated quarterly or annually.

Read more

Blog Post Generator with Vector Search

An AI-powered blog post generator that uses LanceDB for semantic similarity search to find the most relevant existing posts as context for generating new, high-quality blog content.

Features

  • Semantic Similarity Search: Uses LanceDB and sentence transformers to find the 10 most semantically similar blog posts
  • Style Analysis: Analyzes existing posts for tone, structure, and writing patterns
  • Iterative Improvement: Grades content and iteratively improves until A- grade or better
  • Smart Context: Combines category-based and semantic search for comprehensive context
  • Auto-generated Slugs: Creates SEO-friendly URL slugs
  • Dual AI Support: Works with both OpenAI and Ollama

Installation

# Using uv (recommended)
uv sync

# Or using pip
pip install -r requirements.txt

Usage

Basic Usage

python blog_post_generator.py \
  --source_file content.txt \
  --prompt "Your blog post idea" \
  --output_file my-post.md

With Vector Search (Default)

python blog_post_generator.py \
  --source_file transcript.txt \
  --prompt "AI trends in venture capital" \
  --categories ai startups funding

Disable Vector Search (Category-only)

python blog_post_generator.py \
  --source_file content.txt \
  --prompt "Blog post idea" \
  --no_vector_search

Using Ollama (Local AI)

python blog_post_generator.py \
  --source_file content.txt \
  --prompt "Blog post idea" \
  --use_ollama \
  --ollama_model gemma2

How It Works

  1. Vector Database: On first run, creates embeddings for all blog posts using sentence-transformers
  2. Semantic Search: Finds 10 most semantically similar posts to your prompt
  3. Category Matching: Also finds posts matching specified categories
  4. Style Analysis: Analyzes writing patterns from both sets of posts
  5. Content Generation: Creates blog post using combined context
  6. Iterative Improvement: Grades and refines content until high quality

Vector Search Output

When running with vector search enabled, you’ll see:

Read more

Technical Schematics: AI Tool Evolution

Before: Multiple Simple Tools (Human-Centric Design)

Email Operations - Fragmented Approach:
┌─────────────────────────────────────────────────────────────┐
│                    Claude Decision Tree                      │
├─────────────────────────────────────────────────────────────┤
│  Email Task → Should I...?                                 │
│               ├─ draft_email.rb (2 params)                 │
│               ├─ send_email.rb (3 params)                  │
│               ├─ forward_email.rb (2 params)               │
│               ├─ find_and_draft_reply.rb (3 params)       │
│               ├─ read_email.rb (2 params)                  │
│               ├─ archive_emails.rb (1 param)              │
│               └─ safe_send_email.rb (4 params)             │
│                                                             │
│  Result: Decision paralysis, multiple API calls            │
│  Token Usage: ~150 tokens per operation                    │
│  Success Rate: 87% (context lost between calls)           │
└─────────────────────────────────────────────────────────────┘

                             ↓

CRM Operations - Scattered Functions:
┌─────────────────────────────────────────────────────────────┐
│  Company Research → Which tool?                            │
│                    ├─ find_attio_company.rb               │
│                    ├─ create_attio_company.rb             │
│                    ├─ update_attio_deal.rb                │
│                    ├─ enrich_company.rb                   │
│                    └─ validate_company.rb                 │
│                                                             │
│  Problem: Context switching between 5+ tools               │
│  Average: 3.2 tool calls per task                         │
└─────────────────────────────────────────────────────────────┘

After: Unified Complex Tools (AI-Centric Design)

Unified Email Tool - Comprehensive Context:
┌─────────────────────────────────────────────────────────────┐
│                unified_email_tool.rb                       │
├─────────────────────────────────────────────────────────────┤
│  Actions: [draft, send, reply, read, search, archive]      │
│                                                             │
│  Parameters:                                                │
│  ├─ --action (6 options)                                   │
│  ├─ --to, --cc, --bcc (recipients)                        │
│  ├─ --subject, --body, --body-stdin                       │
│  ├─ --from, --query, --folder (search)                    │
│  ├─ --sender, --in-reply-to (threading)                   │
│  ├─ --format [concise|detailed|ids_only]                  │
│  └─ --save-draft, --senders (batch ops)                   │
│                                                             │
│  Result: Single confident decision                          │
│  Token Usage: ~45 tokens (70% reduction)                  │
│  Success Rate: 94% (full context maintained)              │
└─────────────────────────────────────────────────────────────┘

                             ↓

Unified CRM Operations - Complete Workflow:
┌─────────────────────────────────────────────────────────────┐
│                attio_operations.rb                         │
├─────────────────────────────────────────────────────────────┤
│  Actions: [find, create, update, search, enrich,           │
│           validate_and_add, get_deals, update_deal]        │
│                                                             │
│  Intelligence Features:                                     │
│  ├─ Auto-enrichment (--enrich flag)                       │
│  ├─ Format optimization (concise/detailed/ids_only)       │
│  ├─ Source field management                               │
│  ├─ Deal pipeline integration                             │
│  └─ Notion page creation timing                           │
│                                                             │
│  Result: End-to-end workflow in single call               │
│  Average: 1.1 tool calls per task (89% reduction)         │
└─────────────────────────────────────────────────────────────┘

Performance Comparison

Metric Improvements:
┌─────────────────────┬─────────────┬─────────────┬─────────────┐
│ Measurement         │   Before    │    After    │ Improvement │
├─────────────────────┼─────────────┼─────────────┼─────────────┤
│ Token Usage         │ 150/op      │ 45/op       │ 70% ↓       │
│ Tool Calls          │ 3.2/task    │ 1.1/task    │ 66% ↓       │
│ Success Rate        │ 87%         │ 94%         │ 7% ↑        │
│ Decision Time       │ 2.3s        │ 0.8s        │ 65% ↓       │
│ Context Retention   │ Fragmented  │ Complete    │ Qualitative │
└─────────────────────┴─────────────┴─────────────┴─────────────┘

Implementation Principles:
1. Parameter-rich interfaces > Simple function calls
2. Comprehensive context > Modular operations
3. AI ergonomics ≠ Human ergonomics
4. Batch operations > Sequential calls

FFmpeg Analogy: Complex is Better for AI

Human Perspective (Intimidating):
┌─────────────────────────────────────────────────────────────┐
│ ffmpeg -i input.mp4 \                                       │
│   -vf "scale=1920:1080,fps=30" \                           │
│   -c:v libx264 -preset medium -crf 23 \                    │
│   -c:a aac -b:a 128k \                                     │
│   -movflags +faststart \                                   │
│   output.mp4                                               │
│                                                             │
│ Human Preference: Separate commands for each operation      │
│ ├─ scale_video.sh                                          │
│ ├─ set_framerate.sh                                        │
│ ├─ encode_video.sh                                         │
│ └─ optimize_audio.sh                                       │
└─────────────────────────────────────────────────────────────┘

                             ↓

AI Perspective (Perfect):
┌─────────────────────────────────────────────────────────────┐
│ Single command with complete transformation context         │
│                                                             │
│ Benefits for AI:                                           │
│ ├─ Understands full workflow intent                        │
│ ├─ Can optimize across all parameters                      │
│ ├─ No ambiguity about sequencing                          │
│ ├─ Complete error context                                  │
│ └─ Deterministic outcomes                                  │
│                                                             │
│ Result: AI confidently executes complex operations         │
└─────────────────────────────────────────────────────────────┘

These schematics illustrate the paradigm shift from human-centric (simple, modular) to AI-centric (complex, comprehensive) tool design that enables more efficient & confident AI operations.

Read more