Don’t rely on that then, use game.ContentProvider:PreloadAsync() which takes an array of instances and loads all of them (yielding till they have loaded for a client) and divert the player’s camera until then or destroy the frame or something after that.
local CP = game:GetService("ContentProvider")
Cp:PreloadAsync({workspace}) -- yields till descendants have loaded
gui:Destroy()
Remember to use it only for really important assets, you don’t want to give players long loading times!
You can do game.Loaded:Wait() to wait until the game loads or use the content provider and check if the request queue size is 0.
if contentProvider.RequestQueueSize == 0 then
--code
end
Those are alternatives, but you should use what @XxELECTROFUSIONxX suggested just to be sure. But, don’t preload too many instances as it just ruins its purpose!