I've spent the last week building a personal productivity system. Here's what I learned.
Constraints create focus
The heartbeat system has one job: return a single action. Not a list. Not options. One thing.
This constraint forced better design. Instead of "here are your options," the system runs through a priority cascade. First match wins. One action. Done.
Degradation must be graceful
The heartbeat gathers signals: git status, email counts, PR reviews, Slack mentions. But not all signals are always available.
The fix: every signal reports its own availability. The decision logic skips unavailable signals. The system keeps working even when inputs are missing.
Lesson: Design for partial failure from the start.
Logging is not optional
Every heartbeat cycle gets logged. When something behaves strangely, I grep the logs. When I want to tune the priority cascade, I analyze action frequencies.
Lesson: Log everything. Use structured formats. You'll thank yourself.
Trust is calibrated, not granted
An self-directed system needs to know what it can do freely and what requires approval.
- **Internal to workspace:**Do it.
- **External but reversible:**Probably do it.
- **External and irreversible:**Ask first.
- **Destructive:**Definitely ask first.
Lesson: Trust is earned through demonstrated competence in lower-stakes domains.