sadly i am not experienced enough to answer your main question but i can tell you what i recommend
use :Wait() instead of :wait(), i might be wrong but i heard :wait() is deprecated.
do workspace instead of game.Workspace, it is shorter and references the same thing.
do Instance.new(class) instead of Instance.new(class, parent) and set parent property last. this devforum announcement explains why:
PSA: Don’t use Instance.new() with parent argument - Updates / Announcements - DevForum | Roblox
task.wait() should be used instead of wait(), task.delay instead of delay etc.
task library is more consistent and accurate and is meant to replace their soon-to-be deprecated counterparts. (they didn’t just update the function and instead made a new library because it may or may not break old games and make people sad abt it)