The hardest call
Plan the whole run first. Then scale it.
The obvious design paces itself live: type a letter, wait, type the next. But then the finish time drifts, and nothing about a run can be checked before it happens. Instead HumDocs builds every keystroke, pause and correction up front, then scales that plan so it lands exactly on the time you picked.
That makes the finish exact and the planner deterministic, so tests can check a plan’s length, pace and text without ever opening a Doc.
Cost: it has to refuse finish times shorter than the plan’s minimum, and any change mid-run means scaling the rest of the plan again.
When the server can’t be reached
Fail safe, not shut.
Pro turns off only when the server explicitly says a key is bad. Offline, a 15-second timeout or a 5xx error keeps the last good answer. An outage should never lock out someone who paid.
Cost: a revoked key keeps working while offline. I accepted that.
Payments and licenses
Two separate records.
Stripe tells my server a payment happened. The server issues a license. The extension only ever asks about the license. Refunds and lost disputes revoke it; a won dispute restores it.
Cost: a webhook that has to handle every payment event correctly. It’s idempotent on the checkout session.
Tabs in the background
Don’t catch up in a burst.
Chrome slows a hidden tab’s timers to about one tick a second. HumDocs times those waits through its background worker instead, and when a run does fall behind, it writes the lost time off rather than typing fast to recover.
Cost: a run can finish up to 1.5 seconds late.
Privacy
Your text stays in Chrome.
The extension’s requests carry a license key, a random install ID, or an anonymous count like “a run started.” Never the text, and nothing about the Doc.
Cost: I can’t see what goes wrong in someone’s run unless they tell me.
Pricing
One price, paid once.
Pro is $20, once, not a subscription. People use HumDocs in bursts, so a monthly plan would mostly be cancelled after the first month. A free trial lets people try Pro first.
Rule I kept: anything that makes runs correct stays free. Only extra features are Pro.
Copy protection
No DRM theatre.
Anyone can read an extension’s source code, so the paywall can only ever be a polite fence. I made it hard to fake by accident (signed tickets) and stopped there, instead of spending weeks on obfuscation that would only slow down real customers.