
Fast. Efficient. Wrong.
Cold eggs at brunch became a lesson in analytics QA: a process can be fast, automated, repeatable, and technically correct while still failing the person it was supposed to serve.
Read the article →
Then I figure out what to do about them.
This isn’t a résumé. It just starts like one.
I’ve spent a career crossing boundaries that usually keep people in separate rooms: analytics, software, operations, sales, customer experience, service, marketing, and the actual messy work underneath all of them.
When I was a kid, I taught myself to code on an Apple ][+.
Since then I’ve built software and games, designed analytics systems and marketing programs, run automotive service departments, fixed broken business processes, and written fiction and nonfiction. I’ve also lived on a sailboat, ridden motorcycles all over the West, and repeatedly questioned assumptions about how things were supposed to be done.
The common thread is not just that I notice things. I act on them. I see patterns, friction, missing information, bad assumptions, and opportunities hiding in plain sight—and then I do something about them.
If the thing I need doesn’t exist, I have a tendency to build it. Sometimes that’s a data system or a game engine. Sometimes it’s a mechanical cat-food limiter, a pneumatic potato launcher, or a story.
Recent writing, projects, experiments, and other things currently occupying my attention.

Cold eggs at brunch became a lesson in analytics QA: a process can be fast, automated, repeatable, and technically correct while still failing the person it was supposed to serve.
Read the article →
A company spent nearly $1 million processing data that didn't change often. The technology worked. The analytics were useful. The problem was understanding how often the data really moved, what “real time” was actually worth, and what those invisible AI usage events were really costing.
Read the article →
Not every menu, account, reservation, rewards program, or ordinary business interaction needs native software. If a website can do the job well, asking customers to install another program should require a very good reason.
Read the article →
I went back through the code for a JavaScript RPG I wrote in 2010 and realized that some of the choices I made for an iPhone 3G are the same principles I’ve used for decades working with real-world data.
Read the article →
An old Reddit answer that became an essay about time, money, freedom, risk, attention, and why I kept riding.
Read the article →
A searchable descent through conspiracies, mysteries, folklore, paranormal claims, historical oddities, and internet rabbit holes — organized by tier, category, and search engine.
Enter the hierarchy →
A browser-based post-apocalyptic RPG with persistent geography, persistent creatures, survival systems, and a story that begins with one family’s loss. Fallen World is the working prototype title.
Play the prototype →
Three generations of procedural world-building: the original experiment, the much more capable RhinoBuilder 2, and RhinoBuilder 3 — currently being rebuilt and expanded.
Explore RhinoBuilder →
The cats are organized. A deadpan feline-government bureaucracy with history, doctrine, intelligence, human affairs, protocols, archives, field operations, and other matters humans probably aren’t cleared to know about.
Visit FelineDirectorate.com →A very serious global scientific institution devoted to research without jurisdictional limits — including pumpkin spice geology, ranch dressing hydrology, opposable cat thumbs, and the taxonomy of games.
Visit ScienceDirectorate.org →
What begins as a teenage fight between two half-alien lovers becomes something much, much bigger. The original alien power struggle is still in there somewhere. It just stopped being the biggest problem.
Read about the book →
One cat needed to lose weight. Two lifelong grazers did not. So I built a mechanical food-access system that uses the cat’s own weight to decide whether the food stays reachable.
See the cat feeder project →The interesting part of my résumé is not the job titles. It’s what happened after I got there.
Dashboards, reports and meetings are representations. Sometimes you need to walk into the shop.
Show the data. Show the process. Show the technician. Show the dirty parts. Show what changed.
A sophisticated model that nobody understands is mostly decoration.
“Nobody does that” or “that’s the way we’ve always done things” are not, by themselves, reasons not to do it differently.
Tableau · SQL · Salesforce · NetSuite · Alteryx · AWS · Python · JavaScript · Informatica · Looker · Birst · Excel · Photoshop · machine learning · data integration · UI/UX · and sometimes hammers, screws, or duct tape.
I’ve also spent seven years living aboard sailboats, built games and strange machines, written published and award-recognized fiction and nonfiction, and accumulated more stories than was probably advisable.
Keep going ↓I didn’t set out to embrace “alternative living.” I was broke, 27 years old, living in the bottom of my mother’s house, and desperately needed a place of my own. One afternoon my best friend looked around his family’s boat and said, essentially, Yeah man, you should live on a boat.
A month later—after a lot of research and very little actual idea what I was getting myself into—I owned a 1974 Morgan Out Island 28. It wasn’t a vacation and it wasn’t a carefully curated experiment in minimalism. It was home.
Then the education started: boats, weather, repairs, storms, salt water, self-reliance, freedom, and figuring things out because there was nobody else to do it. (Special thanks to Crazy Richard.)
I learned more about myself and life during those seven years than during any other period of my life.
Explore Boat Life →
I needed maps for a game and discovered I was terrible at drawing believable worlds. Hand-coding them as text was unbearably slow, so I tried drawing color-coded biome maps in Paint and wrote a program to read the image pixel by pixel. It worked—badly. Image noise made the resulting terrain a mess.
Eventually I realized I was solving the wrong problem. Instead of building a better way to draw worlds, I could build software that created them. RhinoBuilder generates elevation and proper slope progression, sends rivers and lava downhill, and then does the part I’m most proud of: it lets the geography create the climate.
The engine considers the world’s spin direction, humidity and temperature, then analyzes the terrain it just created. Mountain ranges affect what happens downwind; dry regions and deserts can emerge because of the mountains themselves instead of being painted onto the map afterward. Version 1 proved the idea. Version 2 made it usable. Version 3 is where I’m trying to make the thing genuinely ridiculous.
And it all runs in a browser. Nothing to install, no frameworks, no server-side engine—just efficient JavaScript doing the work locally.
Open the old project →
An old-school adventure/RPG originally written in pure JavaScript to run smoothly on an iPhone 3G. No frameworks and very little performance headroom meant the code had to stay lean: maps, movement, combat, towns, ships, inventory, state and interfaces all had to cooperate on hardware that now looks prehistoric.
The part I’m proudest of is its custom line-of-sight blocking system. I designed it to be both more accurate and more computationally efficient than the visibility approach used in the early Ultima games—a useful constraint when the target machine was an iPhone 3G.
Explore software & games →
One cat needed to lose weight. Two other cats were lifelong grazers. “Feed them separately” turned out not to be a solution, so I built a mechanical access-control system that uses the animal's own weight to decide whether the food stays reachable.
The first prototype worked until Blue learned exactly where to step. Version 2 changed the leverage, sensitivity and counterweight until the lighter cats could pass while Blue triggered a hinged barrier. A cheap camera exposed the first failure mode and let me test the redesign against the actual user—who happened to be a very determined cat.
I built a browser-based system to parse thousands of used-bike listings and turn them into dealership market intelligence.

Motorcycles first made sense because an $800 Suzuki turned a miserable San Francisco commute into a few minutes of freedom. They stayed because machines can change your relationship with distance, attention, time, and life itself.
“Why waste your time sitting in traffic?”Why A Motorcycle? →
Because n+1.
And a motorcycle history is a data set.
Shot in competition alongside ranked archers and was well known in San Francisco archery circles.
Fiction, nonfiction, motorcycles, The USSR, cats, boats, strange coincidences, old computers, bad decisions, and a lifetime of things worth writing down.
Keep going →Essays, Reddit answers, stories, old comics, reviews, and other things that seemed worth writing down.
Nonfiction, more or less. Current articles live here alongside older pieces that escaped from Reddit and elsewhere.
Read the allegedly factual stuff →Long fiction, short fiction, ridiculous fiction, and things whose relationship with reality is negotiable.
Read the fiction-ish stuff →Some of them were drawn on old Macintosh computers. Modernization is not always an improvement.
See the alleged art →Sometimes those opinions become long enough to qualify as their own thing.
Read the reviews →In 2010, my wife and I welcomed the sweetest person I have ever known into our lives.
Our daughter has a profound disability with no diagnosis. The best science available to us has found perhaps twenty other people in the world with anything remotely similar.
She walks and runs and laughs and plays and loves all the girly things (especially ponies, dollies, and purses). She does not speak—other than signing yes and no—and developmentally functions at roughly the level of a two- or three-year-old.
That means there is no book telling us what comes next. No reliable developmental curve. No large community of parents ten years ahead of us who could say, “Here’s what adolescence is going to look like.” We have mostly learned our daughter by knowing our daughter.
At the same time, I am raising a son (her older brother) developing along an almost as radical but completely different trajectory—exceptionally bright, physically large and athletic, and intensely capable. Raising both of them has often felt like being pulled in opposite directions at the same time.
It has been difficult, absurd, frightening, hilarious and occasionally completely insane. My daughter is the sweetest person I have ever known. I love spending time with her.
Those are usually the fun and interesting ones.