StarterGui essentially gets cloned by the server into player GUI.
So the client has to download StarterGui + items parented to their PlayerGui
It also confuses a lot of people because they rely on StarterGui, but their actual GUI is inside PlayerGui
This means you have 2 versions of your GUI, and one of them is just doing nothing
An alternative is having UI in replicated storage/first and parenting it via script to PlayerGui, but at this point compiling it will be better because you get direct control over each instance without needing to index them