Well there is no firm rule as to optimization and the “process” of building an environment evolves more through the iteration process than it does by always sticking with the ideal of the perfect workflow technique.
What the camera does not see does not get rendered so performance is based on what is being rendered per frame so the size of the object is what matters relative to screen size. So lets say your player is close to a door of a rather large building. If the building is a single object with complex shaders attached then the entire building will be rendered even though only the door is relative to screen space. In this situation it might be better to build the entire building (assuming say Blender is being used) and then instance copy common elements like windows or ledges to break things down into chunks. Now when close to the door only the door gets rendered and the rest is culled.
Draw call wise it’s less of a factor as to being up close as once again it’s about screen space rendering but back to the building example the sum total of all of the textures being used can be converted to a texture atlas so that the draw calls of the entire building can be based on the use of a single material.
For example I have a scene with about 24 buildings that are mapped to a single material using a texture atlas so no matter how many are in view at any given time the draw call is equal to the use of a single material.
So how I would approach designing a new environment from scratch is to just begin by placing objects based on my design and defer what would be consider best practice for later once the object and map get closer to completion via iteration. Once I happy with the result I’ll run a profile on the map as it’s this process that “tells” you what issues as to performance with out having to guess at what might be a common cause that does not apply. It’s also the opportunity to look at objects from different angles and make informed decisions based on what is in hand and not as being considered best practice before anything is built.
It’s not so much about following best practice as a workflow, as BP can only be applied in context, but rather what options are available to you that would work for any given situation based on the experience of cause and effect.
My general philosophy is “it’s always better to have too much than not enough as you can take too much and make it less where you can not always make not enough do more” ')
So always start by making what you want to see and then decided what has to happen later.