At workshops the same issue pops-up. As you assume, you are probably running out of airtime for the gateway which has to adhere to the same limits a node is subjected to. If I recall correctly the console might list a message in the device data stating there is no gateway available to send the response.
If there is no gateway available to transmit a packet (join response or downlink) it is discarded. For joins a new join request will be sent by the node for which a new reply will be generated by the back-end.
You could add gateways at your location to increase the available downlink capacity. TTN will choose the gateway with best link and available airtime to transmit a packet.