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
- Predictable behavior — I need to trust the output enough to ship it
- Fast feedback loops — if I have to wait 30 seconds, I will context-switch and lose flow
- 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.