Improved draft lottery probability calculation

In my previous blog post about the 3-2-1 lottery, I wrote about how the probabilities for each pick change depending on how many teams trigger the top-1/top-5 constraints:

[The probabilities] depend on how many teams in the lottery have constraints on winning the #1 or a top 5 pick, and whether those teams have 1, 2, or 3 chances. In theory I could find every possible scenario and precompute them all, but that's a lot of scenarios! (Homework assignment for you: how many possible scenarios is it, exactly?)

See that little combinatorics puzzle at the end? Well only one person messaged me with an answer, wiigeneral from Discord. And after correcting a small mistake, he got it right: there are 491 scenarios.

Then we talked a little more about the challenge of generating these full tables of lottery probability odds:

Read more...


How it feels to be an old school web-based sports sim dev when tons of vibecoded web-based sports sims are being released

June 12, 2026-

Back when I started working on the web-based version of Basketball GM in 2012, web development was very different. npm was brand new and hardly anyone used it. Bundling/deploying JS was very primitive, a lot of people still were just concatenating files together. And things like TypeScript, React, async/await... these did not even exist yet!

It was really difficult! The tools and documentation were horrible compared to today. But I thought it'd be really cool if I could make BBGM run in a web browser, so I persevered. And over time the web dev ecosystem blossomed into what it is today: certainly far from perfect, but worlds better than it was in 2012.

In 2021 BBGM was big enough to become my full time job. That has gone really well! Today it is both more popular and more profitable than it was in 2021.

At times over the past several years I've wondered how long will that really last.

Read more...


New "NBA 2027 (3-2-1)" draft type

Since the NBA has released the final details of their new lottery system (AKA the "3-2-1 lottery"), I have added it to BBGM. You can select it in any league by changing the "Draft Type" setting to "NBA 2027 (3-2-1)". It is also the default in new random players leagues, and in new real players leagues once you sim to 2027.

The headline feature of the 3-2-1 lottery is that all of the lottery picks are randomly selected, not just the top 4. So there are a lot more possible outcomes of the draft. Nearly any team can win any pick:

Read more...


2029 expansion teams in real players leagues

If you create a new real players league in BBGM, you will now see expansion teams in Seattle and Las Vegas before the 2029 season, since that is what is now planned to happen in real life. However not all the real life details are finalized, so I had to make some guesses about how things will work.

Read more...


Trades made after a player is a free agent no longer affect willingness to sign

April 1, 2026-

You make some trades, clear some cap space, and then when you get to free agency, there he is! The savior of your franchise, willing to sign for $45M/year.

But you only cleared $40M in cap space! No big deal. One more trade to clear up the extra room and then... wait, now he's not willing to sign anymore? His mood decreased because he's "worried he'll be traded away"?

Until today's update, that was a really annoying thing that would sometimes happen. But not anymore!

Read more...


Adding OL stats accidentally decreased the importance of OL

The offensive line stats recently added to FBGM have been very popular. They've also caused a bit of confusion for some people about if they changed the importance of OL in the game.

Previously, individual blocking matchups didn't exist, and instead it was some aggregate team-level "pass/run defense vs pass/run blocking" value. When adding OL stats I wanted them to be real, so I rewrote that code to simulate the blocking of individual OL so I could record PBW and RBW stats and have them actually be real meaningful things.

Read more...


Updated FBGM award formulas

March 17, 2026-

Okay this is like 3 updates in a row about FBGM awards which is kind of silly, but I think things are improving at least!

This update fixes two problems with the old awards system:

  1. Previously most awards were based on AV, which is kind of weird in some situations.

  2. The defensive awards were not based on AV, which meant you could have one defensive player win MVP but not even be in the top 10 for DPOY - very weird!

So, what's the problem with AV?

Read more...


Offensive Player of the Year (OPOY) award in FBGM

March 12, 2026-

Adding an OPOY award to FBGM is a commonly requested feature. Up until now I resisted because I thought OPOY was kind of a weird award. Usually the MVP is an offensive player, but then usually the OPOY is some other offensive player? But sometimes they are the same? Some weird logic in that award.

Well, as the guy writing the code for FBGM, I have the opportunity to make the logic whatever I want! So here's how it works:

Read more...


Offensive line stats

Offensive line (OL) is an interesting position in football because it's extremely important but there are no traditioanl stats for OLs. Like if you go to the player page for an OL on espn.com you see literally no stats. There are some non-standard or advanced stats people use for OL, but they tend to be either qualitative or not very informative.

FBGM has never had OL stats. I did it this way because of what I wrote above - I felt like OL stats were kind of weird and uncommon, so nobody would miss them. But I was wrong about that. Many users have asked me for OL stats, and it does make sense that people want some way to get insight into what their OL are doing.

Well, now FBGM has OL stats! The stats I chose to include are pass block win rate (PBWR), run block win rate (RBWR), and sacks allowed.

Read more...


Stat totals in the play-by-play

February 27, 2026-

When viewing a live sim of a game (or when viewing a box score with a scoring summary, so in all the sports besides basketball) you will now see total values of key stats shown. For instance, when a player in ZenGM Baseball hits their 40th home run, it will say Home run (40) rather than just Home run.

The implementation is slightly different in all the sports.

Read more...