The Bug That Ate a Day: It Only Hung in Production

This is the last post in my series on rebuilding my daily fantasy lineup optimizer (it all starts here). The math was the easy part. This post is about the day I lost to a bug that didn’t exist on my computer and only showed up once the tool was on a real server — the kind of problem that makes you question your sanity before you find it.

Worked on my laptop, hung in production: the same code behaving differently on a server
Continue reading “The Bug That Ate a Day: It Only Hung in Production”

Porting My 20-Year-Old Excel Models to Python

This is part five of my series on rebuilding my old daily fantasy lineup optimizer (the series kicks off with how I got into this). The earlier posts were about the math. This one is about the move itself: taking a model that lived in an Excel workbook for over a decade and turning it into a web app anyone can use without installing anything. It’s the same journey I’m making with all my old Operations Research models, one at a time.

Diagram of porting an Excel and Solver model to a Python and Flask web app
Continue reading “Porting My 20-Year-Old Excel Models to Python”

One Good Lineup Is Easy. Twenty Is the Hard Part.

This is part four of my series on the daily fantasy lineup optimizer I rebuilt this year (the series starts with the origin story). Everything up to now has been about finding the single best lineup. Here’s the uncomfortable truth that took me a while to accept: the single best lineup is the easy part, and it’s not what wins tournaments. The hard, interesting problem is building a set of lineups that are each strong but smartly different. That’s where the real work — and the real edge — lives.

Player exposure grid showing which players appear across a set of fantasy lineups
Continue reading “One Good Lineup Is Easy. Twenty Is the Hard Part.”

The Multi-Position Trick I Retired From My Optimizer

This is part three of my series on rebuilding the daily fantasy lineup optimizer I started in Excel in 2012 (start here if you missed the first one). This post is about a small, clever trick I used in the spreadsheet for years to handle players who can fill more than one position — and why, when I rebuilt the tool, I deliberately threw it away.

Diagram of a multi-position player eligible for several roster slots in a fantasy lineup
Continue reading “The Multi-Position Trick I Retired From My Optimizer”

A Fantasy Lineup Is Just a Knapsack Problem

This is the second post in my series about rebuilding the daily fantasy lineup optimizer I first wrote in Excel back in 2012 (the origin story is here). Before I get into the clever parts, I want to start with the simplest and most important idea: a fantasy lineup is just a knapsack problem wearing a baseball cap. Once you see that, everything the optimizer does makes sense.

Diagram showing a fantasy lineup as a knapsack problem: salary cap as the bag, players as items with salary and projected points
Continue reading “A Fantasy Lineup Is Just a Knapsack Problem”