That is a fast turnaround, nice 🎮 One thing worth checking before you settle on 10 seconds though.
When I ran Random Match yesterday it took about 11 seconds to pair me with a real opponent. A 10-second cutoff would have preempted that match entirely — I would have been handed a CPU roughly one second before a human arrived.
Your real pairing time and your fallback threshold are close enough that this matters. Before fixing the number, it is worth logging the distribution of your successful human pairings. If most of them land in the 8-15 second band, a 10s fallback quietly converts the majority of your multiplayer into single player, which is the opposite of what you want now that matchmaking demonstrably works.
Two things that make the fallback safer whatever number you pick:
Say it out loud. If the CPU swap is seamless and silent, a player who wins assumes they beat a human, and finding out later feels like being tricked. “Nobody around right now, you are playing a CPU” costs nothing and buys trust — and it also explains the thing players would otherwise interpret as your netcode behaving oddly.
Keep searching during the bot match. If a human enters the queue 30 seconds in, hot-swap them into the CPU’s slot. That way the fallback is genuinely just filling dead air rather than replacing the mode, and your concurrency stops being a hard gate on whether anyone ever meets a real opponent.