The solution to the "client decides when to roam" problem:
Tell the ZD that:
For all 2.4Ghz wifi clients whose AP sees them with less than 30db SNR:
kick them off of their current AP *if* they are seen by another AP with an SNR that is more than 10dB above their current SNR.
(the example values of 30dB and 10dB should be tunable and SNR data from APs should be averaged over a few samples)
Also, if one AP attempts to band-steer a client to it's 5Ghz radio, the ZD should tell other APs to temporarily ban that client from associating on their 2.4Ghz radios.
Ruckus APs already have features that will:
Kick a client off an AP if the signal strength gets weak
Limit the lowest data-rate a client can use
Steer a client to a 5Ghz radio by not responding with it's 2.4Ghz radio
(default band-steering behavior)
These features are *configurable* from the ZD but they're *implemented* on the AP.
Aside from pushing configs to the APs, the ZD plays no active role in these features.
The "Encouraging Clients" solution fills in gaps left by the existing features:
smartroam kicks a "weak" client off but that decision is currently made by a single AP without regard to whether or not there's another AP available to provide a better connection.
Even if there *is* a better signal from another AP, the client *could* re-associate back to the original AP.
bss-minrate could prevent a client from connecting to (or staying connected to) an AP at too-far of a distance.
Again, this currently happens without regard to whether or not there's another AP in a better position to provide service to that client.
Band steering causes APs to not respond to clients with it's 2.4Ghz radio if the AP thinks the client could make a good connection to it's 5Ghz radio.
Unfortunately, some clients will associate with another distant 2.4Ghz radio instead of associating with the local 5Ghz radio.
In some cases, a client associated to a distant 2.4Ghz radio will continue to attemt to roam to a nearby 2.4Ghz radio but fail due to band-steering.
This can continue until the client gets "confused" and connectivity breaks entirely.
These problems can be solved by having the controller take a more active role by implementing the "encouraging clients" solution.