— 2020–2021 Season Review

1. End of Season Fantasy Score Rankings

First, I’d like to show the final rankings from the app. Remember this is ranking for fantasy hockey and not real hockey!

The Fantasy Score is generated by an aggregation of the numbers that also define this color legend (10–0).

1.1 Forwards

Below are the top 10 forwards based on the Fantasy Score algorithm:

1.2 Defensemen

Below are the top 10 defensemen:

2. Continued Development of FantasyHockeyHelper

I spent a lot of time continuing to build the website post-drafts. I didn’t start immediately though, as I had put in a TON of hours in the 5 days leading up to the January 13th start of the NHL season. The app was quite different even between my first and second drafts. I was tired and also didn't know what to do next. I had some high-level ideas but no immediate quick wins which were all I had energy for up until early March. I also felt confident in my drafted rosters and thought I would be able to cruise to victory without much more work. I was wrong.

2.1 Team Schedule Views For Maximizing Man-Games

For all the reasons mentioned about losing man-games due to COVID, I found myself struggling to pick the best player on waivers. One thing I began factoring in more than usual was man-games in a week. When trying to increase how many hits my team has, that 1 extra man-game on a Sunday afternoon to end the week could make all the difference. Finding out how many games a player plays in a week is easy of course, but having to do it 10 or 20 times every few days is a process that was screaming for some sort of automation or helper tool.

376093 lines of JSON, 14.1MB

2.2 Rank Players By Current Stats

Being able to rank players based on the current season was an obvious want even before the season started. I developed the Fantasy Score algorithm script used for drafting to be easily repeatable and basically just required an input CSV of player stats, so I roughly knew how to accomplish this task using current stats. I also knew that I needed a new page different from the one I used to draft teams (renamed to “Draft Center”, see: to view this different ranking. The “Draft Center” is for looking at the last 1–3 years of stats. This new page, “Current Season Rankings (see: was for looking at this season’s (and only this season’s) stats. Very similar pages, some similar configurations (including pro-rating options), different purposes.

  • I no longer needed to manually update the team of players when they got traded. I could just update a player’s team based on the daily stats which had this information.
  • Rookies (players who were not in the system previously since they did not play last season) were suddenly present in the system once they played their first game.

2.3 No More Required Invite Codes

I started the website requiring an invite code. I had hoped that this would protect me from spam accounts and give off a vibe of exclusivity. I think it became more of a barrier to sign-up in the end and I got rid of this requirement eventually. The website is free for all signups, no code is needed. Go for it!

3. How Did My Pools Go?

I played in 2 pools this season, each of which was drafted using This section serves as a follow-up to my post-draft reviews from section 6 of

3.1 Chel21

I placed 9/16 in this pool, though I did had a solid second half of the season (I credit in part due to having current stats in and almost made the playoffs (only top 8 moved on).

3.2 Canada Cup

I came in first in the regular season and the core of my team (Mark Scheifele, Jimothy Timothy Miller, Elias Lindholm, and Jeff Petry) carried my team the whole way. Ryan Nugent-Hopkins was a good pick as well but I traded him for Matthew Tkachuk towards the end of the season as he (and his brother even more so) are beasts when it comes to the Fantasy Score algorithm. They do it all, even though Matthew did regress a bit on the score sheet this season.

4. What’s Next For

4.1 No Playoffs This Year

First of all, I’m not going to support playoff pools, at least for this season. I don’t think it would be worth the effort especially considering most playoff pools don’t allow for tinkering with lineups. You set it and forget it!

4.2 Personalized Fantasy Score For Your Team During The Season

The Fantasy Score needs to connect back to the team you’ve drafted. If you keep your fantasy team up to date on the app (a manual process for now), it should know your team’s strengths and weaknesses. And now that there are up-to-date stats loaded too, the app knows what categories you are struggling with right now. This should be reflected in the fantasy score since really, the best Waiver pickup for your team may not be the best pickup for another’s team when each team has different strengths and weaknesses.

4.3 Draft Center Fantasy Score Improvements

The Fantasy Score algorithm used for drafting needs to consider factors other than the last 1–3 years of stats. Below are a few examples of ideas I want to play around with this summer:

4.4 Recognizing Greatness

Still on the topic of outliers, I don’t think the Fantasy Score algorithm recognizes greatness enough. Connor McDavid ranks 8th overall for forwards in Fantasy Score, which is very good, but what he did this season was just unbelievable. His 72 assists alone would have put him in second for scoring in the league behind his teammate Leon Draisaitl. When you have a player getting 1.5–2x the assists of any other top-tier players, that needs to mean something more. I think his score should be higher. If he had scored the same amount of assists as Brad Marchand his score would be about the same. To me that is wrong and this logic can easily apply to other stat categories too. More tinkering needs to be done for this.

4.5 Goalies

I want to figure out how to evaluate goalies so I can rank them for the Draft Center and Current Season Stats pages. It’s on my roadmap for the Fall but I’m still not sure how best to accomplish it. The stats they are evaluated on are often considered team stats. Goalies who have more wins generally play on stronger teams. Goalies with lower GAA often play on teams with strong defense. Perhaps I should be considering goalies based on team strength and schedule strength? I’ll let this keep marinating over the summer…

4.6 Frontend Improvements

As I mentioned in my first blog, I am not a frontend developer, and I don’t really want to be. It doesn’t interest me, I’d much rather work with JSON (but I don’t others do). The website is built in basic Rails + HTML ERB. It does the job, it's not super ugly, but obviously, there is room for improvement. I’m not going to rewrite the site in React, I like server-side rendered web pages. But I do want to make the site look a bit nicer and more intuitive to use. My girlfriend gave me a critique of things to improve so I’ll see what I come up with.

4.7 Integrate with Yahoo Sports?

This is a stretch goal. Yahoo Sports does have a developer API, see: If I could have users log in to through OAuth with their Yahoo account, I could do a lot of cool things like:

  • Easily load a user’s team(s) so it's no longer a manual process to keep them in sync.
  • Regularly load which players are available on Waivers so that the “Current Season Stats” is up to date and only shows players who are actually available.
  • Perform analysis of the teams a user is facing each week to further optimize the Fantasy Score algorithm towards areas of weakness and maybe even advise on lineup decisions each day!
  • Perhaps I could get current stats from Yahoo and do-away with my web scraping work?

5. Conclusion

This was and still is a really fun project for me and I look forward to building on it over the summer. There’s lots of work to do and I hope to deliver a more polished and mature project in September in advance of Fantasy Hockey drafts for the 2021–2022 season.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Tom Pedron

Tom Pedron

Staff Software Engineer @ Copper CRM