To get a perfect WiFi running, you need to plan the distance between your APs (access points), you need space between your channels and you need to adjust the power levels per AP.
In a WiFi network, it is the client that controls the connection. It is therefore up to the client, to connect to the strongest Access Point, which all clients do automatically. But many clients will then stay connected to the AP, until it may loose the signal.
If a user using such a client, moves far away from the AP, they may be in a situation where they have very poor connectivity and speed, even though they are close to a much stronger AP, since the client keeps the original connection active.
Most modern wireless clients will usually switch to an AP with better signal by themselves, when the speed drops low. Users may also have "roaming aggressiveness settings" in their driver settings, to control how soon their WiFi client, will search for a stronger connection.
If you wish to force all WiFi clients to reconnect to stronger APs, you can use access lists on the APs, and set a signal limit, letting the APs drop the connection to the client, if the signal goes below the limit. When the connection is lost, the client will immediately search for an AP, and will choose the strongest AP/SSID available.
Using signal limits in access lists, you can also force mobile phones to use the mobile network, when the WiFi speed gets too low, which may increase their speed. It can also help you implement a basic limitation of the distance from which users can connect to your WiFi network, ex. no further than the walls of your building.
In the future, Fast Roaming Protocol (802.11r) may also solve these issues, as it provides fast and secure handoffs between APs, but implementation have been poor so far (2017).
If you implement signal ranges in access lists, you are advised to use CAPsMAN and set it up on the CAPsMAN controller router, which will run the same configuration on all APs. You will need to find the best signal range for your own network, we advise you to start by dropping clients with signals below -80dBm.
add action=accept interface=all signal-range=-80..120
add action=reject interface=all signal-range=-120..-81
In Winbox: CAPsMAN ⇢ Access List (or if you want to control it per router: Wireless ⇢ Access List)
The clients will usually reconnect within 1 second, so most users will discover that they are reconnected. Since it is a new connection, there can be some implications. If you are using an old VPN, you will probably get disconnected from the VPN. The solution is to use a modern IKEv2 VPN, which will automatically reconnect. If you are using WiFi for audio/video calls, there will also be a short drop in the communication.
To ensure fast reconnects, send the datapath via the CAPsMAN controller, thus the ARP entry for each client will stay on the central bridge.
The "Seamless/Zero Handoff/Single Channel Architecture" perfect WiFi myth: Several WiFi provider have created "Zero Handoff" systems, where all access points share the same MAC address. In this setup the clients cannot know which AP they are connected to, as all APs have the same MAC, and the APs may then control which AP should sent the packets. This system off course breaks the standard and needs lots of retransmits between APs, there are channel interference issues and your WiFi network speed degrades a lot. A better way is to implement access lists to force the clients to reconnect to a stronger AP.