Traditionally roaming is left to the client device and most implementations are so bad that they won't give up on an old AP so long as they're seeing beacons every year or so. Who cares that I haven't successfully received a packet in the last hour, it's sure better than the 2 second interruption we'll get if we tried to switch.
I'm only mildly bitter at the useless roaming behaviour of most clients. Turning transmit power down doesn't really help either. Some clients will roam better but other clients at the edge of the coverage now have no coverage.