Indie-Dev

The Group Chat Had It Right: Why I Un-Fixed Visible Picks
In a previous article, I wrote about how moving our F1 fantasy game from a text thread to an app unlocked pick categories that were too tedious to score by hand. The Overtaker pick replaced Fastest Lap in the app, and made the game better by doing things the group chat couldn’t.
Read More
Building Confidence Into Uncertain Verdicts
This is the final article in the Building a Weather Decision Engine series. The previous articles covered the drying model, multi-app architecture, edge cases, and the Yardwise inversion. This last one is about the output side, how the engine communicates decisions to people who just want to know if they should go ride.
Read More
One Engine, Three Apps: Sharing a Swift Decision Engine Across Products
In the previous articles I’ve covered what the Groundwise engine does and how the drying model works. This article is about the architectural decision that turned one app into three: sharing a single decision engine across Ridewise (trail conditions), Fieldwise (sports field conditions), and Yardwise (watering guidance).
Read More
Turning Raw Weather Into a Drying Model
In the first article about my foray into using weather data to assess surface conditions for riding activities, I introduced the Groundwise engine, a software decision system that turns weather data into a yes/maybe/no verdict for outdoor conditions. This article goes deeper into the core moisture model: how the engine takes raw weather observations and calculates a wetness score that drives the verdict. The hope is to show how a simple question such as “can I ride my mountain bike today?” spiraled into a fairly complex yet intriguing design challenge. Totally fair if you aren’t entranced by weather math, I get it, but I feel like there’s some value in pulling back the curtain to reveal how much goes into solving a seemingly simple problem.
Read More
I Built a Weather Engine That Tells You When to Ride, Play, or Water
Every mountain biker knows the ritual. It rained last night. You check the radar, clear now. You check the trail association’s Facebook page, nobody’s posted. You text your riding buddy: “Think the trails are good?” They don’t know either. So you either stay home and miss a perfectly rideable day, or show up and chew through muddy trails that needed another six hours to dry.
Read More
From Group Chat to App: How Going Digital Unlocked Better Fantasy Stats
Open Wheelers the app started life as a text thread. A group of friends with a love of Formula 1 just wanted a fun alternative to complex fantasy games with drafted teams, waivers, etc. So we played a manual game within a text thread, a gentleman’s agreement to get your picks in before the lights go out, and yours truly would manually tally results after each race, post the updated standings, and we’d argue about who was actually winning. It worked well enough for years. And it was completely holding the game back.
Read More
The Weather Says Clear Skies. So Why Is the Trail a Swamp?
I love mountain biking. I love skateboarding. I love pretty much anything that involves wheels and dirt and concrete and the outdoors. What I don’t love is driving 30 minutes to a trailhead only to find the trail is a rutted, muddy mess, despite the forecast showing nothing but sunshine.
Read More
Bad Timing & Sticktoitiveness
Timing really is nearly everything. And what it isn’t, circumstance makes up for. — Steven Van Zandt
Read More
Obsession & the Artistic Entrepreneur
Without obsession, life is nothing. — John Waters I obsess over things. Once an idea takes hold, I’m at its mercy. It can arrive in an instant but linger for a very long time, in some cases years and even decades. It can be an obscure hobby (beekeeping), a high-risk activity outside of mainstream ball sports (skateboarding), or it can be an idea for a problem to be solved. Problem solvers are often thought of as entrepreneurs, and they certainly can be, but we’re really talking about two wildly different personalities and skill sets. Yet obsession can give one a false sense of the other.
Read More