I always find managing gui in scripts tedious , because I never implemented a system for it. How Should I manage stuff like when a specific gui needs to be put on screen and should it already be inside of the playergui or should a new one be cloned. I will always just end up having a single script with a million functions for everything.
Sure you can do that if you want it’s really your preference.
If it’s anything to do with organizing functions, it’s always ModuleScripts.
You can easily create one for cloning, one for activating, one for rewarding, etc.
Then call the function in the module and give/receive inputs like (player, reward, amount)
so it’s easily able to be applied in many different scenarios.
Further help: Intro to Module Scripts | Documentation - Roblox Creator Hub
A lot of it just comes down to really good planning and foresight.
I usually come up with the UI design (or at the very minimal, a wireframe) first, and then dedicate a script to every part of the GUI.
Eg: a script handles CoreGui, another may handle the HUD that the player will look at, another for shops, etc etc.
I also use modules to contain generic functions that I can use for my GUIs (eg: tweening any GUI into view).
The GUIs that I would clone (such as an item frame) would be first designed, and then stored in ReplicatedStorage for easy cloning.
Last thing, and it’s something not a lot of UI devs do, I use ValueObjects (eg: a BoolValue) to keep track of state changes that may happen from a UI input.
It’s an entirely different story for GUIs that need to be restricted to a specific group of players (such as an admin panel), but that’s a discussion for another time.
This workflow isn’t for every project of course, but considering I’m working on a really big one, it has saved me so much time and trouble.
I have UI “Components” in modules which are required by the client and set up their respective frames. Due to heavy animation stuff and fairly info packed GUIs almost every frame has its own module