Building AI Tools That Actually Work

Most AI tooling falls into one of two traps: over-promising autonomy or under-delivering on usefulness. The sweet spot is augmentation — tools that extend what you can already do.

The Augmentation Principle

The best AI tools share a common trait: they keep the human in the loop while eliminating tedious work.

Rule of thumb

If you have to explain the output to someone else, the tool saved you nothing.

What I Look For

  1. Predictable behavior — I need to trust the output enough to ship it
  2. Fast feedback loops — if I have to wait 30 seconds, I will context-switch and lose flow
  3. Transparent reasoning — show me why, not just what

A Practical Example

# Instead of generating entire functions,
# generate the boring parts and let me write the logic
 
def process_batch(items: list[Item]) -> BatchResult:
    """AI generates the scaffolding, I write the core logic."""
    results = []
    errors = []
 
    for item in items:
        try:
            # This is the part I actually care about writing
            result = transform(item)
            results.append(result)
        except ProcessingError as e:
            errors.append(BatchError(item=item, error=e))
 
    return BatchResult(results=results, errors=errors)

The pattern is simple: let AI handle the structure, keep the decisions human.

What is Next

In the next post, I will walk through the self-hosting stack that powers this blog — and why I chose to run my own infrastructure instead of using a managed platform.