Hey, you know i thought a lot about this as well, and i totally agree that it’s just like your code, which should probably be as ‘readable’ (or in this case, easy to comprehend the flow of, build upon, and edit, etc) as it can be while being as performance friendly as it needs to be.
that being said, i’ll offer my own way of doing it at this point:
for any kind of game that is primarily in one perspective/mode of action/mechanics style such as a simple game, rpg, or one big map game like sotn, super metroid, or terraria, i would use one single scene for everything, then you would just have things like the title screen or credits etc each with parent objects turned into prefabs that can be loaded up with loadasset just by having a string stored. create parent objects for each segment of the map in big games including as much area as you can handle having loaded while also being able to load up the prefab parent of any other area the player could possibly be about to enter into, which can be done in the background as they approach a way to enter into that area, move it into position and setactive it (keeping track of all the active ones in an array or something). unless the player is walking into a portal or teleporting into another physical coordinate, or something, you don’t have to interfere with the player’s movements at all, they just walk right through. if they are walking through a door and you want the outside/inside world to disappear as the other appears, you just deactivate it and activate the other, which probably won’t cause a hiccup, and of course leave that area loaded until they can no longer just walk back through into it before you reload it. if the inside/outside world coordinates don’t match up or if the player is walking through a portal into another area, moving them into the necessary position can of course still be done without a hiccup. i have exits fade into black for example in a 2d game, and there is an object hanging out into the black in each area that has a script attached that just ontriggerenter activates one area and deactivates the other in the blink of an eye. of course there’s nothing stopping you from using a transition if you want. aside from this i would only use a separate scene for complex mini games or periods of play with totally different mechanics or perspective like the motorcycle/sub battles in FF7 or fishing in breath of fire 3 for example, because in those cases you aren’t going to be using almost all the same stuff minus change in only terrain or npcs etc. if the map is so huge that you’re concerned about storing a massive string array, they could also be loaded up in sections of adjacent groups of areas, if that makes sense.
now for a crazy scinematic game like dragons lair or phoenix write or a game with totally disconnected levels like goldeneye or katamari, to me at least, it makes more sense to imagine and separate them into difference scenes (which could also be broken down as described above if necessary), because they are actually different scenes with quite possibly more varied content between them, and more easily visualizable as a series of chronological scenes like a movie.
hope this helps anyone, feel free to ask any questions about making these things happen lol