When it comes down it it, the Workspace should be organised based on what you need particular things for. For example, projectiles should have a Folder called Projectiles, that the server can parent projectiles to (this would include canons, bullets, arrows, lasers, etc). You would have a folder also for any map elements that don’t need interaction, or health, things like that. I usually call this StaticModels or Map it’s entirely up to personal preference. Folder for other more important things, like perhaps item drops should also have their own folder. I think it’s really important to keep the workspace as minimal as possible on the upper hierarchy, otherwise you’re going to have a huge list of miscellaneous items that you don’t need to see.
Similarly, ReplicatedStorage and ServerStorage should follow this rule. You don’t want to put everything directly as a child and hope for the best. If you have multiple assets, then why not create a folder called Assets that would parent sub-folders like Models, Sounds and Items to help better organise. This will also help when it comes to accessing these via Scripts and LocalScripts, because you know immediately where things are.
ServerScriptService might be a little different, but it essentially follows the same rules. Say you have a Script called ChatService then create a script inside of ServerScriptService, name it, and if you are using ModuleScript’s, put them as a child of it.
Overall, I think it’s basically providing yourself with the most sensible layout, where things are properly named, properly stored and you know where to find things easily.
Lua is a whole different story. There’s no right or wrong answer, as far as writing code goes. People have various different preferences on how to write, name and structure code. This isn’t to say there are recommended practices though, I personally think that when writing code you should always know what something does. When you’re reading it, it should make sense. If you have one function to turn on a light, then name it appropriately.
local function TurnOnLight()
-- Light turns on
end
And as I said earlier, you should always keep up-to-date with ROBLOX Lua/API so you’re not doing things like
Part:remove()
to permenantly get rid of something.