I apologize for the _slightly_ click-bait title, but don't worry: the meat is coming. Also, no TL;DR.
**Fact #1**: Autofill is widely hated, especially in ranked games.
**Fact #2**: In a way or another, a "shortcut" system (such as Autofill) is needed to avoid exponentially increasing queue times, henceforth referred to as Q-time(s).
**Thesis**: At the cost of a _very minor_ increase in Q-time, the negative impact of Autofill (for ranked games) can be greatly reduced with the following procedure, without compromising other factors (such as match fairness).
**Proof and Explanation**:
Every player has an associated MMR. The job of the match-making algorithm is to search between all the _active players_ (players who clicked the "Find Match" button, thus being in queue) and find 10 players within the same "MMR bracket" (roughly same MMR, in order to ensure match fairness) and preferably with the primary roles they selected. Autofill is a way to "shortcut" this search by ignoring role-preferences and simply using the MMR-criterion.
The proposed procedure makes sense only for ranked games, where match fairness is of utmost importance. For normals game, it isn't really that useful, since the MMR of normals is trash anyway.
The procedure is as follows. It will be described in the case of 10 players queueing separately (10 "solos", pure SoloQ) for simplicity, in order to avoid unnecessary complications, but it can be tweaked to work for some (but not all) cases of DuoQ.
The case where Riot's algorithm finds 10 players without Autofill is fine. We need to consider only the case where there is 1 or more Autofilled players. The case for 1 autofill (in 10 players) will not be treated here, for a simple reason: it requires a non-trivial solution. It is in Riot best intentions to implement only changes which are: (1) very-low complexity; (2) require very low effort. Full Role Preference outclasses Autofill in all scenarios, but it is neither trivial nor low-effort.
**Two Autofills**: Consider the case where the algorithm finds 8 players (selected with role-preferences) and sneaked in 2 Autofill to complete the 10-player "bucket". The solution to this case is to do a "team reshuffling" (as anticipated, this requires some tweaking when working with DuoQ and the like, but works perfectly fine with 10 SoloQ). The algorithm scans the 10-player bucket to find a possible "reshuffling". It starts by computing the total roles, computes the theoretical minimum required of autofills and looks at the 2 autofilled players and seeing if they can be better placed, ignoring the team they were selected to belong to initially.
Of course, a team reshuffling doesn't _always_ eliminate all autofill, but it can reduce the amount of Autofill initially selected by the system to the theoretical minimum (eliminate all of them, if the right initial conditions are given).
The system which exists right now is just random and has no "intelligence" in looking if Autofill may be eliminated after the 10-player bucket is formed. Paradoxically, some players may be autofilled in each other primary roles and still being in the same team. The combinations which need to be checked are quite low and this combinatorial problem can be tackled quickly by appropriately powerful CPUs and optimized algorithms.
Match fairness is not compromised by team-reshuffling, since the 10 players were initially selected to belong to the same MMR-bracket, so their MMR were already very similar to each other to begin with. Also, MMR technically comes equipped with an interval, since it is an estimate (and so it has some variance, which allows some flexibility).
One example may clarify the procedure:
Initial Bucket (the number denote the players, roles are in order of preference, bolded role is Riot's algorithm-selected role, teams are called A and B):
1. **A: Top** - Top/Mid
2. **A: Jungle** - Mid/Top (autofilled Jungle)
3. **A: Mid** - Mid/Bot
4. **A: Bot** - Bot/Mid
5. **A: Support** - Support/Mid
6. **B: Top** - Top/Jungle
7. **B: Jungle** - Jungle/Mid
8. **B: Mid** - Mid/Bot
9. **B: Bot** - Bot/Mid
10. **B: Support** - Mid/Bot (autofilled support)
Number of autofills: 2.
Note: only 1 Support in 10 players, only 1 jungle primary and 1 jungle secondary.
Re-shuffled teams (unchanged players are ~~striked~~)
2. **A: Top** - Mid/Top (_ex-autofilled jungle of team A_)
6. **A: Jungle** - Top/Jungle (_ex-team B player_)
~~3. **A: Mid** - Mid/Bot~~
~~4. **A: Bot** - Bot/Mid~~
~~5. **A: Support** - Support/Mid~~
1. **B: Top** - Top/Mid (_ex team A toplaner_)
~~7. **B: Jungle** - Jungle/Mid~~
~~8. **B: Mid** - Mid/Bot~~
~~9. **B: Bot** - Bot/Mid~~
~~10. **B: Support** - Mid/Bot (autofilled support)~~
Number of autofills: 1 (theoretical minimum given the initial conditions).
Note that this would not have worked if you look only inside a single team (Team A admits no reshuffling which is able to lower the number of autofills, the same is true for team B). Also note that, in this case, this procedure would have worked if Team A botlaners were DuoQ and also if Jungle/Mid of team B were DuoQ.
**Theoretical Minimum of Autofills**: It is quite simple to calculate the number of autofills required in a 10-player bucket: just add all primary/secondary roles with the same name. You must end up with at least 2 for each role. If so, all autofills can be eliminated. If not, the "missing" roles must be autofilled. Since, in the initial 10-player bucket, there was only 1 support, one autofilled support is needed (the only way to avoid that is to discard the bucket and try to find another 10-players bucket, but we are assuming that the buckets are given and fixed: we need to make the best use of what we are given).
The generalization of this procedure to 3 or more autofills will not discussed, but it is quite trivial. We assume, conservatively, that the case with only a single autofill (in 10 players) is already a "theoretical minimum" situation and so "nothing can be done". Finally, we (safely) assume that teams-related sortings (i.e. form teams first, assign MMR to teams, then try to match teams) are done purely based on team MMR, optimizing efficiency and fairness, without actively trying to minimize autofilled players.
Aside from trying to form better 10-player buckets, Riot should implement this system in order to reduce the number of autofills to the theoretical minimum for most ranked games. Autofill, while somewhat "necessary" (at least until Full Role Preference is implemented), can have its impact reduced.
Thank you for reading.