gTLD transfers are governed by ICANN rules. So .COM fails in this case.
The rules are as follows (summarized, start at https://www.icann.org/resources/pages/registrars/transfers-en if you want all the details, prepare some time and aspirin):
- you (as supposedly the current owner of the domain) need to have the associated authInfo. This should be provided by current registrar. Either you can choose it, or it will be generated for you. You also need to make sure, at current registrar, that your domain is not locked for various reasons, have a look at whois output for it, and use https://www.icann.org/resources/pages/epp-status-codes-2014-06-16-en as a reference to understand the statuses visible in whois
- go to new registrar, input domain name and authInfo, pay (I guess :-))
- now, per the rules, the new registrar have to send emails to positively get approval for this transfer; this is standard per ICANN rules, and called FOAs for Forms of Authorization. Note however that since one year basically and GDPR-related changes this step may or may not happen
- only after this happened and messages were replied to (there is probably a time limit for them I do not remember), and the registrar double-checked some points (like the domain is not less than 60 days old, or less than 60 days after a previous transfer), then the registrar can "finally" send the transfer command to the registry
- per ICANN rules, once a transfer is started at the registry, if nothing happens, the registry HAS TO automatically accept it after 5 days have elapsed since initial registrar request; so this is why you often see this 5 days delay everywhere
- the current registrar (from which you transfer out) can AT ANY TIME during this delay explicitly allow the transfer or deny it (the new registrar that started it can also at any time cancel it)
- if it allows it, then the transfer is immediately completed: some registrars allow their clients to do this through a specific part of their website or API, while it is not possible with all of them
- if it denies the transfer, then again it is automatically completed (and failed): if you want it to happen you have to start everything from scratch at the new registrar. Note that per ICANN rules the outgoing registrar has only a limited list of cases where he is allowed to refuse the transfer; double check yourself already if you are in one of them before starting it
So, with all the above, in practice, it can take few seconds/minutes (if all the FOA stuff is automated, and if you can force the transfer at the old registrar), and this is in fact what certain "escrow" services are providing, or it can take 5 days or longer if you take into account the FOA part and so on.
Additional advice: do NOT start a transfer too close of the expiration date, you will get a lot of trouble and even if everything works well you may have to pay twice for only a one-year extension (in gTLD a transfer adds one year to the expiration date, if it is not more than 10 years in the future already), and later try to be refunded for one year by the old registrar, but in practice that will be hard.
There is no reason to wait for the last minute (as transfers or renewals add to the current expiration date, so irrespective to the date when you do them), and in summary if expiration is in less than a month more or less you are better to follow this procedure: renew at current registrar, wait for 60 days (just a good global safeguard around other rules related to auto-renewals and grace period), then transfer.