Writing
Articles
Essays on thinking clearly, working for yourself, and doing real work while AI rewrites the rules. Two decades of them.

Native Where You Need It (Hybrid Mobile Apps)
Why hybrid Native Where You Need It apps -- native only where it matters, web everywhere else via Turbo and Hotwire -- beat building native twice.
2023.10.30Read →
The Power of the Clarity Doc: Your Tool for Clearer Thoughts
An 8-step writing exercise for breaking analysis paralysis: dump your thoughts, weigh pros and cons, war-game the worst case, then decide and act.
2023.10.14Read →
Bootstrapped vs. Self-Funded
Bootstrapped and self-funded get used interchangeably, but they're not the same thing. Here's the real difference and why it matters.
2023.08.31Read →
Deploying Middleman Sites on Hatchbox
How to deploy a Middleman static site on Hatchbox with a custom build script, plus auto-deploying on every git push - after ditching Heroku.
2023.08.21Read →
Disable Attachments in the Trix Editor
A drop-in Stimulus controller that strips the attachment button, blocks pasted images, and disables file uploads in Rails' Trix editor.
2023.07.05Read →
Opportunity Cost and Letting Go: How to Profit from Your Stalled Projects
You want your time back so you can focus on other things. How do you do it though? Learn how in this article
2023.06.21Read →
The 15-Minute Meeting: Change Your Workday, Change Your Life
Most meetings do not need an hour. Set your default to 15 minutes, give every meeting a goal and a leader, and block them into one part of the day.
2023.05.09Read →
How to Migrate to Rails Encrypted Attributes
How to migrate an existing unencrypted Rails column to Rails 7's built-in encrypted attributes without breaking data already in the database.
2023.04.26Read →
Status Updates Should Be 60-90 Seconds
Standup status updates should take 60-90 seconds per person, no more. Longer updates waste everyone's time - save the deep dives for after the meeting.
2023.04.10Read →
Building a Stronger Mind and Body: Reflections on 1000 Days of Working Out
I worked out for 1000 days straight, this is what I learned about myself mentally, physically and more …
2023.03.28Read →
HowTo: Setup Tailwind CSS 3 with Middleman
A step-by-step guide to wiring Tailwind CSS 3 into a Middleman static site with an external_pipeline, plus the gotchas I hit and a ready-to-fork template.
2022.08.02Read →
MultiTenant PgSearch: A How To
How to scope Rails PgSearch multisearch results to a tenant: add an account_id column, wire up additional_attributes, and rebuild the index right.
2022.03.28Read →