<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 17-0 Game team</title>
    <description>The latest articles on DEV Community by 17-0 Game team (@the170game).</description>
    <link>https://dev.to/the170game</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4200870%2Fbff6f66e-c623-4ee4-8c92-eb973bbdc49e.png</url>
      <title>DEV Community: 17-0 Game team</title>
      <link>https://dev.to/the170game</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the170game"/>
    <language>en</language>
    <item>
      <title>Monte Carlo in 30 lines: simulating NFL perfect-season odds</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Thu, 29 Oct 2026 10:11:05 +0000</pubDate>
      <link>https://dev.to/the170game/monte-carlo-in-30-lines-simulating-nfl-perfect-season-odds-3175</link>
      <guid>https://dev.to/the170game/monte-carlo-in-30-lines-simulating-nfl-perfect-season-odds-3175</guid>
      <description>&lt;p&gt;A perfect NFL season is a rare event, which makes it a good fit for Monte Carlo simulation: instead of solving the probability exactly, you play the season many times and count how often a team wins every game.&lt;/p&gt;

&lt;p&gt;The idea is simple. Give each game a win probability, draw a random number for each game, and check whether all of the draws land in the team's favor. Repeat that tens of thousands of times. The fraction of unbeaten seasons approximates the true probability.&lt;/p&gt;

&lt;p&gt;Here is a short JavaScript version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;perfectSeasonOdds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;winProbs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;trials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;perfect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;unbeaten&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;winProbs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;unbeaten&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;unbeaten&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;perfect&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;perfect&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// 17 games, each with an 85% chance to win&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;season&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;fill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;perfectSeasonOdds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;season&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this case the exact answer is 0.85 to the 17th power, about 6.3 percent, so the simulation should print a value near 0.063. The two approaches agree, and that is a useful sanity check before you make the model more realistic.&lt;/p&gt;

&lt;p&gt;Realism is where simulation earns its keep. Replace the flat array with per-game probabilities that reflect opponent strength, home field and rest. Add a small chance of a tie, since a tie also ends a 17-0 record. Model injuries by lowering probabilities for later games. None of these changes needs a new formula, only a different input array.&lt;/p&gt;

&lt;p&gt;Two cautions. First, &lt;code&gt;Math.random()&lt;/code&gt; is fine for illustration, but use a seeded generator if you want reproducible runs. Second, the output is only as good as the probabilities you feed in; the simulation measures consequences of your assumptions, not the truth about a team.&lt;/p&gt;

&lt;p&gt;If you would rather not write code, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt; is a free NFL perfect-season simulator that runs this kind of experiment in the browser.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>simulation</category>
      <category>programming</category>
    </item>
    <item>
      <title>Modeling a 17-game perfect season with simple per-game probabilities</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Thu, 29 Oct 2026 09:52:47 +0000</pubDate>
      <link>https://dev.to/the170game/modeling-a-17-game-perfect-season-with-simple-per-game-probabilities-4885</link>
      <guid>https://dev.to/the170game/modeling-a-17-game-perfect-season-with-simple-per-game-probabilities-4885</guid>
      <description>&lt;p&gt;If you want a rough answer to "how likely is a 17-0 NFL season?", you do not need a heavy model. You need per-game win probabilities and a bit of multiplication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic idea
&lt;/h2&gt;

&lt;p&gt;Treat each of the 17 games as an independent event with its own win probability. The chance of winning all of them is the product of those probabilities. If a team were an 85% favorite in every game:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# ~0.063
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is about 6%. At 90% per game it is roughly 17%, and at 75% it falls to under 1%. Small per-game edges matter a lot because the exponent is 17.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different probabilities per game
&lt;/h2&gt;

&lt;p&gt;Real schedules are not uniform. Home games, rest, opponent strength and weather all change the number. Use a list instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;
&lt;span class="n"&gt;probs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.82&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.78&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.86&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.84&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Monte Carlo simulation
&lt;/h2&gt;

&lt;p&gt;Multiplying gives the exact answer under independence, but simulation is useful once you want more than one number, such as the distribution of win totals or the odds of at least 16 wins. Simulate many seasons, drawing each game as a Bernoulli trial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;season&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100_000&lt;/span&gt;
&lt;span class="n"&gt;perfect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;season&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;N&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With enough runs, the simulated frequency converges to the product. Simulation also lets you add correlation, for example a star injury lowering several later probabilities at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;Independence is a simplification, and your inputs are estimates, so the output is only as good as they are. Still, it shows why perfect seasons are rare. If you want to try scenarios without writing code, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt; is a free NFL perfect-season simulator where you can experiment with these ideas.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>python</category>
    </item>
    <item>
      <title>One-Score Games and the Coin-Flip Problem for Perfect Seasons</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Tue, 27 Oct 2026 03:59:06 +0000</pubDate>
      <link>https://dev.to/the170game/one-score-games-and-the-coin-flip-problem-for-perfect-seasons-51an</link>
      <guid>https://dev.to/the170game/one-score-games-and-the-coin-flip-problem-for-perfect-seasons-51an</guid>
      <description>&lt;p&gt;Every perfect season is built from close games. In the NFL, a large share of games are decided by one score, meaning eight points or fewer. In those games the better team still wins more often than not, but the margin for error is thin, and the outcome can swing on a single play: a fumble, a tipped pass, a missed field goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why close games act like coin flips
&lt;/h2&gt;

&lt;p&gt;Imagine a team that is clearly better than its opponent, say a 65% chance to win a close game. That is not much better than a coin flip at 50%. If a team plays several games like that, the chance of winning all of them drops quickly. Win probability 0.65 four times in a row is 0.65 x 0.65 x 0.65 x 0.65, which is about 18%. Win eight in a row and it is about 3%.&lt;/p&gt;

&lt;p&gt;Now compare a blowout. If a team is a 95% favorite, the same eight-game streak has a chance of about 66%. The gap between those two numbers is why great teams that dominate usually look much more likely to go unbeaten than good teams that win tight games.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means over 17 games
&lt;/h2&gt;

&lt;p&gt;A realistic perfect run needs a mix of dominant wins and a few narrow escapes. If even three or four of the 17 games are true toss-ups at 60% each, those games alone multiply the chance of perfection by only 0.6 to the third or fourth power, between about 22% and 13%. The other 13 or 14 games then also have to go right.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Luck is not an excuse but a real input. A team can play well in every game and still lose one on a bounce.&lt;/li&gt;
&lt;li&gt;Point margin matters. Teams that win by large margins are less exposed to one-play variance.&lt;/li&gt;
&lt;li&gt;One bad quarter can erase a season, which is why unbeaten seasons are rare and often remembered for a close call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to test how coin-flip games change the odds, try different team strengths in the &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;NFL perfect season simulator&lt;/a&gt; and watch how quickly the perfect-season chance drops as games get closer.&lt;/p&gt;

</description>
      <category>nfl</category>
      <category>probability</category>
      <category>math</category>
      <category>football</category>
    </item>
    <item>
      <title>How a Sim Turns Player Ratings Into Win Probability</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Tue, 27 Oct 2026 03:35:06 +0000</pubDate>
      <link>https://dev.to/the170game/how-a-sim-turns-player-ratings-into-win-probability-1252</link>
      <guid>https://dev.to/the170game/how-a-sim-turns-player-ratings-into-win-probability-1252</guid>
      <description>&lt;p&gt;When you run a season simulator, the part that matters most is the step that turns a roster into a probability. Here is a simple way to think about how a sim like the &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;NFL perfect season simulator&lt;/a&gt; can work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ratings in, probability out
&lt;/h2&gt;

&lt;p&gt;Every player gets ratings for the things they do: throwing, blocking, rushing, covering, tackling. A sim groups those into unit scores, for example quarterback, offensive line, receivers, pass rush and secondary. Each unit contributes to a team strength number. The simplest approach is a weighted sum, where quarterback and the lines carry more weight than a backup tight end.&lt;/p&gt;

&lt;h2&gt;
  
  
  From strength gap to win chance
&lt;/h2&gt;

&lt;p&gt;Once both teams have a strength number, the sim looks at the gap. A zero gap means a coin flip, so 50%. A bigger gap pushes the number toward 100% but never reaches it, because football has plenty of randomness. A logistic curve is a common choice: it rises steeply near an even matchup and flattens out near the extremes. Even a dominant team still has a real chance to lose any given Sunday.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rolling the dice
&lt;/h2&gt;

&lt;p&gt;For each game the sim draws a random number and compares it with the win probability. If the draw falls under the probability, the team wins. Run that for all 17 games and you get one possible season. Run it thousands of times and you get a distribution: how often the team goes 12-5, how often 14-3, and how rarely 17-0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the perfect season is so rare
&lt;/h2&gt;

&lt;p&gt;The weekly probabilities multiply. A team that is a 90% favorite every single week has a perfect-season chance of 0.9^17, which is about 17%. At 85% it drops to about 6%, and at 80% it is about 2.3%. Nobody is a 90% favorite every week, so true perfection stays a long shot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The fun part is changing a rating and watching the numbers move. Upgrade the offensive line, downgrade the secondary, and see how the weekly odds and the final record shift. That is the whole point: make the math visible.&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>analytics</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Checking the math with code: simulating 200,000 NFL seasons in Python</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Sun, 25 Oct 2026 16:48:10 +0000</pubDate>
      <link>https://dev.to/the170game/checking-the-math-with-code-simulating-200000-nfl-seasons-in-python-55hj</link>
      <guid>https://dev.to/the170game/checking-the-math-with-code-simulating-200000-nfl-seasons-in-python-55hj</guid>
      <description>&lt;p&gt;A closed-form answer like "0.9^17 is about 16.7%" is easy to get wrong, so it is worth checking it against a brute-force simulation. Here is a tiny Monte Carlo check you can run yourself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;

&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perfect_season&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;games&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;games&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.90&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;200_000&lt;/span&gt;
    &lt;span class="n"&gt;rate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;perfect_season&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;p=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  simulated=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;rate&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  exact=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With that seed I get roughly 2.27% for p = 0.80 (exact 2.25%) and 16.6% for p = 0.90 (exact 16.7%). The simulation agrees with the formula to within sampling noise, which at 200,000 trials is about +/-0.03 percentage points for the 2% case and +/-0.08 for the 17% case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why bother simulating?
&lt;/h2&gt;

&lt;p&gt;The formula assumes every game is independent with the same win probability. Real seasons are not: opponents vary, injuries accumulate, and strength changes over the year. Once you drop those assumptions the closed form stops being exact, but the same few lines of simulation keep working. You can give each game its own probability and run the loop again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;perfect_season_varied&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;probs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the core idea behind season simulators: draw each game, tally the record, and repeat thousands of times. If you want to play with a roster-building version in the browser, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt; is a free sim where you draft a team from random NFL teams and eras and see whether it can go 17-0.&lt;/p&gt;

</description>
      <category>python</category>
      <category>nfl</category>
      <category>statistics</category>
    </item>
    <item>
      <title>How many perfect seasons should a 32-team league expect? A quick binomial estimate</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Sun, 25 Oct 2026 16:47:05 +0000</pubDate>
      <link>https://dev.to/the170game/how-many-perfect-seasons-should-a-32-team-league-expect-a-quick-binomial-estimate-28e3</link>
      <guid>https://dev.to/the170game/how-many-perfect-seasons-should-a-32-team-league-expect-a-quick-binomial-estimate-28e3</guid>
      <description>&lt;p&gt;Perfect NFL seasons are rare, but how rare should they be if you only know the per-game win probability? A binomial model gives a surprisingly clear answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  One team
&lt;/h2&gt;

&lt;p&gt;If a team wins each game independently with probability p, the chance it wins all 17 is p^17:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;p per game&lt;/th&gt;
&lt;th&gt;P(17-0)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.80&lt;/td&gt;
&lt;td&gt;2.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;6.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;16.7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;41.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A whole league
&lt;/h2&gt;

&lt;p&gt;Now take a league of 32 teams. If the average team is a 50% favorite each week, the chance any specific team goes 17-0 is 0.5^17, about 0.0008%, or 1 in 131,072. Across 32 teams the chance that at least one is perfect by pure luck is about 32 / 131,072, roughly 0.024%, or about once in 4,100 seasons.&lt;/p&gt;

&lt;p&gt;Real leagues are not made of coin flips, of course: a few teams are much stronger than average, which is why perfect seasons occasionally happen. But the model shows why they are so exceptional: you need a team that is a heavy favorite &lt;em&gt;every&lt;/em&gt; week, not just most weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;p_perfect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;games&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="n"&gt;games&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;p_perfect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you would rather draft a roster and simulate the season than do the arithmetic, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt; is a free browser sim built around exactly this question.&lt;/p&gt;

</description>
      <category>nfl</category>
      <category>math</category>
      <category>statistics</category>
    </item>
    <item>
      <title>Monte Carlo for a football season: how many simulated seasons you actually need</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Sun, 25 Oct 2026 15:36:29 +0000</pubDate>
      <link>https://dev.to/the170game/monte-carlo-for-a-football-season-how-many-simulated-seasons-you-actually-need-176n</link>
      <guid>https://dev.to/the170game/monte-carlo-for-a-football-season-how-many-simulated-seasons-you-actually-need-176n</guid>
      <description>&lt;p&gt;If you are building any sports simulator, one early question is how many runs you need before the numbers stop moving. For a rare event with true probability p, the standard error of your estimate after n runs is sqrt(p(1-p)/n).&lt;/p&gt;

&lt;p&gt;For a 17-0 season at p = 2% that gives, after 1,000 runs, an error of about 0.44 percentage points, so your estimate of "2%" could sensibly read anywhere from 1.1% to 2.9%. To get the error under 0.1 points you need about 20,000 runs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;needed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="nf"&gt;needed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.001&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 19600&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is cheap in a browser: a season is only 17 weighted coin flips, so even 100,000 seasons run in well under a second if you avoid allocating objects per game. The thing that is expensive is the roster logic, not the dice.&lt;/p&gt;

&lt;p&gt;A practical tip is to seed the generator when you want reproducible bug reports, and to leave it unseeded for player-facing play. In &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt;, a free browser NFL season sim, each run draws a fresh season so replays feel different, while the underlying odds stay fixed by your drafted roster.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Why a 90% favorite every week still goes 17-0 only one time in six</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Sun, 25 Oct 2026 15:35:53 +0000</pubDate>
      <link>https://dev.to/the170game/why-a-90-favorite-every-week-still-goes-17-0-only-one-time-in-six-50hj</link>
      <guid>https://dev.to/the170game/why-a-90-favorite-every-week-still-goes-17-0-only-one-time-in-six-50hj</guid>
      <description>&lt;p&gt;Here is a small calculation that surprises people. A team that is a 90% favorite in every one of seventeen games finishes undefeated with probability 0.9^17 = 16.7%, about one season in six. Most real teams are never 90% favorites every week, so the practical number is much lower.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;perfect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;games&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;games&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;perfect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// [[0.7,'0.23%'],[0.8,'2.25%'],[0.9,'16.66%'],[0.95,'41.8%']]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things matter when you simulate this rather than just compute it. First, weekly win probabilities differ: a 95% game against a bad team and an 70% game on the road average to something that gives a lower perfect-season chance than the same average spread evenly (Jensen's inequality at work, since the product is concave in log space). Second, if you run Monte Carlo seasons, you need thousands of runs to see a rare event stably: at p=0.7 the 0.23% outcome needs roughly 10,000 seasons to appear 20-ish times.&lt;/p&gt;

&lt;p&gt;I built a small free browser game around this idea, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt;: you draft an all-time roster from random teams and eras and simulate a 17-game season to see if you can go undefeated. The calculations above are why most runs end at 13 or 14 wins, and why the occasional 17-0 feels earned.&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Road weeks, not home weeks, are what break 17-0</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:34:13 +0000</pubDate>
      <link>https://dev.to/the170game/road-weeks-not-home-weeks-are-what-break-17-0-df7</link>
      <guid>https://dev.to/the170game/road-weeks-not-home-weeks-are-what-break-17-0-df7</guid>
      <description>&lt;p&gt;Home field is a real edge and a small one next to an exponent of 17.&lt;/p&gt;

&lt;p&gt;Take a team that wins 90 percent at home and 75 percent on the road, with nine home games and eight away. If the weeks are independent, a perfect season is 0.90 to the 9th times 0.75 to the 8th. That is roughly 0.4 percent. The home streak is the easy half. The road product is what empties the right tail.&lt;/p&gt;

&lt;p&gt;This is why "unbeaten at home" is a different claim from "unbeaten." A draft that spends every slot on dome traits or crowd-proof specialists is tuning one slice of the card. The away weeks stay in the product.&lt;/p&gt;

&lt;p&gt;I check it by drafting a short all-time lineup and replaying the full card, not the home half. The free browser version is &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt;. Move one road-week assumption and the undefeated rate shifts more than the home win rate does.&lt;/p&gt;

</description>
      <category>football</category>
    </item>
    <item>
      <title>Expected wins hide how rare a clean 17-0 really is</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:11:11 +0000</pubDate>
      <link>https://dev.to/the170game/expected-wins-hide-how-rare-a-clean-17-0-really-is-5bnh</link>
      <guid>https://dev.to/the170game/expected-wins-hide-how-rare-a-clean-17-0-really-is-5bnh</guid>
      <description>&lt;p&gt;A roster that is "a 13-win team" sounds close to perfect. It is not. Expected wins are an average. A perfect season is a tail.&lt;/p&gt;

&lt;p&gt;Suppose each week is an independent draw and the team's win probability is 13/17, about 0.765. The expected record is 13-4. The probability of 17-0 is 0.765 to the 17th, which is about 1.1 percent. Most of the probability mass sits on 12, 13, and 14 wins. The undefeated outcome is a thin slice of the same distribution people quote when they say the team is "great."&lt;/p&gt;

&lt;p&gt;Correlation makes the slice thinner. A short week, an injury, or a bad field does not reshuffle before the next game, so the losses bunch and the right tail shrinks. That is the gap between a season-long win total and a season with no losses at all.&lt;/p&gt;

&lt;p&gt;The useful check is to resimulate the card instead of staring at the mean. Draft a short all-time roster from random NFL teams and eras, run the 17 weeks, and count how often the record is actually clean. I do that in a free browser challenge, &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt;. One slot change moves the mean a little and the undefeated rate a lot, which is the whole point of looking at the tail instead of the average.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>How rare is a 17-0 NFL season? The math behind a perfect season</title>
      <dc:creator>17-0 Game team</dc:creator>
      <pubDate>Thu, 22 Oct 2026 16:20:40 +0000</pubDate>
      <link>https://dev.to/the170game/how-rare-is-a-17-0-nfl-season-the-math-behind-a-perfect-season-3n10</link>
      <guid>https://dev.to/the170game/how-rare-is-a-17-0-nfl-season-the-math-behind-a-perfect-season-3n10</guid>
      <description>&lt;p&gt;Every NFL fan knows the 1972 Miami Dolphins are the only team to finish a season perfect. How hard is that, really? A little probability gives a surprisingly clear answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic math
&lt;/h2&gt;

&lt;p&gt;If a team wins each game with the same probability &lt;em&gt;p&lt;/em&gt;, and games are treated as independent, the chance of winning all 17 is simply:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P(17-0) = p^17&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is what that looks like for different per-game win probabilities:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Win probability per game (p)&lt;/th&gt;
&lt;th&gt;P(17-0) = p^17&lt;/th&gt;
&lt;th&gt;Roughly 1 in...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0.60&lt;/td&gt;
&lt;td&gt;0.017%&lt;/td&gt;
&lt;td&gt;5,900&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.70&lt;/td&gt;
&lt;td&gt;0.23%&lt;/td&gt;
&lt;td&gt;430&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.80&lt;/td&gt;
&lt;td&gt;2.25%&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.85&lt;/td&gt;
&lt;td&gt;6.31%&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.90&lt;/td&gt;
&lt;td&gt;16.68%&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Even a team that is an 85% favorite in every single game (which no real team is) goes 17-0 only about once in 16 tries. Small drops in per-game probability compound fast: moving from 0.90 to 0.80 cuts the perfect-season chance by about 7x.&lt;/p&gt;

&lt;h2&gt;
  
  
  What history says
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1972 Dolphins:&lt;/strong&gt; 14-0 in the regular season, then three playoff wins including the Super Bowl, for a 17-0 record overall. That is the only perfect season, playoffs included, in the Super Bowl era.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2007 Patriots:&lt;/strong&gt; 16-0 in the regular season, but they lost Super Bowl XLII, so they did not finish 18-0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today's regular season is 17 games, so a "17-0" regular season is a different (and in some ways easier) target than the Dolphins' 17-0, which included the playoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Caveats
&lt;/h2&gt;

&lt;p&gt;The independence assumption is a simplification. Real games are correlated (injuries, schedule strength, a quarterback who is available or not), and p is different each week. But the p^17 estimate is a good back-of-the-envelope tool for seeing why perfect seasons are so rare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;If you want to play with the idea, you can build a roster and see how close you can get to 17-0 in &lt;a href="https://17-0game.org/" rel="noopener noreferrer"&gt;17-0 Game&lt;/a&gt;, a free browser NFL roster and season challenge.&lt;/p&gt;

&lt;p&gt;What per-game win probability would you assign to the best team you have ever seen?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nfl</category>
      <category>math</category>
      <category>gamedev</category>
    </item>
  </channel>
</rss>
