I spent about 2 months building PuckIt with AI -- a web multi-player hockey type game inspired by a lot of games I enjoyed growing up (Tagpro, NHL94, Tribes, NHL 3v3 Arcade, NES Ice Hockey).
Tested it with a bunch of tagpro players, made the bots better, different difficulty levels, and when we got a lot of humans on, it was a ton of fun to play. It took a lot of prompts - this was far from a one shot deal. It took about 1500, and we're still going.
Anyway - one of the testers recommends I launch on itch.io -- we do, and get about zero traffic from it. Ok.
Then we explore CrazyGames and start making the changes needed -- hiding other sign-in methods from their visitors, SDK integration, and so on. We submit for review.
.. and it gets approved for basic launch, at like 4am when I'm dead asleep. I wake up to see the webhook on our discord going nuts, which pings whenever we have a brand new player sign in for the first time. During our basic launch period on CrazyGames, we typically get about 350 people a day from it.
For those who don't know, to get from CrazyGames basic launch to full launch, you have to hit particular metrics in terms of game play, 1D retention, and so on. So even before we launched, we built a tutorial mode that we figured people would go through -- and actually, we made the decision to force a short 2 lesson tutorial on them.
Lesson 1 - skate and shoot. There's not even a bot in the way. It just exists to teach you to move and to hit shoot.
Lesson 2 - winding up shots. Teaches them to hold SPACE to shoot harder.
That is it. Each tutorial should take 10 seconds at the absolute max, and then they get dropped into a bot ladder, where they play bots of escalating difficulty so they can get their feet under them.
Here's how it went:
Top countries: India, Vietnam, Brazil, Turkey, Indonesia, Japan
This probably hurt us and I didn't expect it. Ice hockey isn't big in all these countries, and with our server being in Ohio, they would have experienced some bad ping.
Only 2% of the visitors ever came back.
First launch:
| Step |
Sessions |
Share |
| Arrived |
2,942 |
100% |
| Started the tutorial |
2,062 |
70% |
| Finished lesson 1 |
1,181 |
40% of arrivals, 57% of tutorial starters |
| Quit during lesson 1 |
228 |
11% of starters |
| Skipped the tutorial |
16 |
<1% |
| Finished and clicked "Play now" |
923 |
31% |
| Played a real match |
683 |
23% |
| Beat the Rookie bots and moved up a level |
76 |
11% of match players |
| Reached the Pro bots / 5v5 |
13 / 8 |
|
Bounced immediately: 470 of 2,062 starters (23%) recorded no other event at all.
Lesson 1 completion: of those who did anything, 74% cleared lesson 1.
Never pressed a movement key: 29% of tutorial starters (41 of 140). Of the 99 who moved, 76% cleared lesson 1. Half of all 140 starters went on to play a real match.
I can't stress how simple the tutorial was. I mean, if you don't believe me, go to puckit.gg, hit tutorial, and look at lesson 1.
How long the starters who never cleared lesson 1 stayed (882 sessions):
| Time on the site |
Sessions |
Explicitly quit the tutorial |
| Under 5 s |
433 |
3 |
| 5–15 s |
210 |
58 |
| 15–45 s |
121 |
60 |
| 45 s–3 min |
72 |
52 |
| Over 3 min |
46 |
23 |
So, we re-tuned. Dom from CrazyGames was actually super helpful and kind, told me to message him when I resubmit, and they would give my game another chance. None of this is bashing CrazyGames (though I will have some comments at the end here), when you reach a human -- they are very helpful and kind.
Launch 2: Ok, no more forced tutorial. We throw them right into a new match, 10 second countdown, the movement keys appear under their ball, we tooltip them when things happen they need to know (if they don't wind up their shot, we tell them how. If they run into the goalie, we tell them that's not going to work, etc..)
Time in matches per visit (visitor_sessions, 1,649 visits that reached a match):
| a |
b |
| Median |
80 s |
| Mean |
2m13s |
| Left within 30 s |
12% |
| Left within 60 s |
35% |
| Played 2+ minutes |
33% |
| Reached CrazyGames' 4m30s target |
8.4% |
| Played 10+ minutes |
2.5% |
| Played a second match |
24% |
What players did in their first match (887 replays, Sep 21–24, before a Reddit post brought other traffic):
| a |
b |
| Quit during the 10s countdown |
~11% (server logs, first day) |
| On the ice but never moved more than one tile |
2.8% |
| Never touched the puck |
11% |
| Touched the puck but never took a shot |
49% |
| Scored at least once |
29% |
| Stayed for the whole 2-minute round |
43% |
| Stayed for the whole round, if they scored |
81% |
| Stayed for the whole round, if they didn't score |
28% |
We have a spectate mode, I'd watch new players come in, go and join their team to try to help them, chat, etc -- none ever responded. They also just .. didn't get hockey.
Play style: in their first match, CrazyGames players passed 0.03 times a minute, and 97% never passed at all. Players who came from r/hockey passed 9× as often, and shot and scored about twice as often.
(That's referencing our reddit push we got from r/hockey, which you can read about here: https://www.reddit.com/r/hockey/comments/1wp6wm6/puckitgg_free_2d_hockey_you_can_play_in_your/)
| - |
Day 1 |
Day 2 |
Their next bar |
| Average playtime |
3m41s |
3m05s |
4m34s |
| Gameplay conversion |
35% |
52% |
65% |
| Day-1 retention |
2.1% |
1.2% |
2.0% |
| Average loading time |
10.9s |
8.3s (after bundling) |
|
| Desktop score |
|
3/15 ("below requirements, <9") |
|
We failed, and got delisted. I gave it one more shot, reskinning and tuning a version we have live still at futsal.gg, stood up an EU server, etc.
We add franchise modes to get people to come back. You end up on a team, get relegated, need to work your way to get promoted again, there's trades, coaching strategies, etc etc -- very Retro Bowl-esque.
Submitted, rejected. Submitted again, rejected. Each time, we got a tester from Indonesia.
The first one played the game for about 5 seconds, made one movement, quit, rejected. I had logs, I sent them into CrazyGames, explained they may have had bad ping, and this is when we first set up the EU server to maybe help.
We resubmit - rejected. Another Indonesia tester, gets into the game, and aborts before the 10 second match countdown expires.
So .. yeah, lots of lessons learned.
1) This wasn't really the target audience for me, for hockey. The CrazyGames users don't pass, they expect to score immediately, got frustrated, and left -- if they even got that far.
2) Tutorials are worthless. Weaving the instructions into actual gameplay seemed better, but it's not enough.
3) The iframe size is pretty limiting. We were constantly tweaking the layout to fit what is really a tight iframe you are limited to on CrazyGames.
Happy to answer questions or share more of the funnel data. The game is at puckit.gg if you want to see what we were testing, and we try to schedule human pickup games on our Discord on Mondays and Thursday nights @ 9pm eastern. It's a small community but we're having a blast.