Welcome to the incessant pain of WiFi implementation issues :-).
As you've correctly stated, it is up to the clients to choose which WiFi to connect to. They typically won't know which is the slower/faster one, they will just know which is the stronger/weaker signal. Stronger/Weaker can (but not necessarily) translate to slower/faster as if the signal is too weak it will have to keep retrying to send the data but all signal being equal it is down to congestion of the airwaves that has the biggest impact.
Android has bugs that mean it typically does not switch to the strongest signal (see this question). Some manufacturers have added this functionality into their devices (I believe Samsung devices have something within the WiFi options).
Windows often leaves it to the driver of the wireless card to decide, have a look at the advanced settings for it in device manager and you may find various settings to tweak (such as roaming "aggressiveness" and "band preference" for 2.4/5Ghz).
Most WiFi now runs on either 2.4Ghz or 5Ghz spectrum. Most of the 2.4Ghz spectrum is crowded (and 5Ghz signals don't carry as far as 2.4Ghz, so you're unlikely to see your neighbour's 5Ghz WiFi network). So a lot of people set their 5Ghz WiFi network name to include "5Ghz" and either don't teach their device to connect to the other network or they manually switch it if they spot it's connected to the crowded one.
As for channels, you should install something like inSSIDer (for Windows) or WiFi Analyzer for Android to work out what other WiFi networks are on what channels in your area and pick the least congested channels. You should share the least crowded channel without having bits of other networks bleeding into your channel (co-channel vs overlap). You also don't want to ideally have both of your APs on the same channels.
You specify a single channel number but the WiFi will actually bleed into other channels (it looks more like a dome across 3 channels on most analyzers).
Android also has a experimental feature under Developer Options for "Always allow Wi-Fi Roam Scans" which forces it to go looking for a stronger signal, but with the side effect that it will ditch an existing connection mid-transfer if it finds a better one.