Want to backfill instantly but retain minimum number of players relaxation rules when starting match

Hello,

I currently use a FlexMatch rule set that starts a game session when:

  • From 0 to < 1 min, find a 3v3 match
  • From 1 min to < 2 min, relax rules so that a game with a minimum of 2 players per team can be started, then backfill in game
  • From 2 min onwards, relax rules so that a game with a minimum of 1 player per team can be started, then backfill in game

Here is my rule set:

{
  "name": "QuickMatch",
  "ruleLanguageVersion": "1.0",
  "playerAttributes": [
    {
      "name": "skill",
      "type": "number",
      "default": 1000
    }
  ],
  "teams": [
    {
      "name": "team1",
      "maxPlayers": 3,
      "minPlayers": 3
    },
    {
      "name": "team2",
      "maxPlayers": 3,
      "minPlayers": 3
    }
  ],
  "rules": [
  ],
  "expansions": [
    {
      "target": "teams[team1].minPlayers",
      "steps": [
        {
          "waitTimeSeconds": 60,
          "value": 2
        },
        {
          "waitTimeSeconds": 120,
          "value": 1
        }
      ]
    },
    {
      "target": "teams[team2].minPlayers",
      "steps": [
        {
          "waitTimeSeconds": 60,
          "value": 2
        },
        {
          "waitTimeSeconds": 120,
          "value": 1
        }
      ]
    }
  ]
}

I use the same matchmaking config (+ rule set) for backfill. The problem is there is waiting time when there are only a few players. With my rule set with, here are some example scenarios:

  • Four players queue, wait 1 minute, get matched as a 2v2 match. Then, another player queues but waits for 1 minute for him to backfill in the existing match.
  • Two players queue, wait 2 minutes, get matched as a 1v1 match. Then, another player queues but waits for 2 minutes for him to backfill in the existing match.

What I want to achieve also is to be able to backfill players instantly when the game starts with less than 3 players per team (I am using manual backfill). Queue takes a long time when players are few because with my rule set, backfilling will apply the same relaxation rules: attempt to backfill players to complete a 3v3, then at least 2v2 after 1 min, then at least 1v1 after 2 min.

I tried using a separate matchmaking configuration for backfill but it does not seem to work, probably because the matchmaking config used by the user is different from the matchmaking config of the backfilling server. I also do not use automatic backfill because there are certain parts of the game where we disallow backfill.

My question is: is there any way I can use my player count relaxation rule (my rule set above) + instant backfill in one single matchmaking configuration with manual backfill?

Thanks for taking time to read and I appreciate any help.

Having dynamic matchmaking based on your queue depth would be great ie if x condition exists then do this in the ruleset, otherwise do y.

I could see how with a lambda you could periodically swap the rule set via update-matchmaking-configuration (you could have a CloudWatch alarm based on QueueDepth or [CurrentTickets](https://docs.aws.amazon.com/gamelift/latest/developerguide/monitoring-cloudwatch.html#gamelift-metrics-match)

I don’t believe GameLift FlexMatch offers any dynamic features out of the box. Its really written for large volume of tickets and its hard to write a balanced ruleset for low vs high volume.

You can:

  • Expand faster for matches that are harder to make, ie don’t wait a minute for 4x4 modes
  • Have separate configurations that favor a mode (ie this is my team queue, this is my 2 x 2 queue - which you can use for testing modes or having finer control over automated backfill. As you note this harder for the backend server to manage but it should be doable.

I’ll ping the GameLift team to see if they have any advice.