Be smart about what is in your group. Plan out a way to organize your groups. Do not group an entire floor plate with exterior walls (basic or curtain), floors, balcony slabs, railings, ceilings, interior walls, stairs, etc... and expect that when that group is copied and mirrored all over the place that there will not be a performance hit when editing. There defiantly will be. This is not to say you can never do this. Just consider keeping it simple, as simple as possible.
If you find that you MUST group an entire floor plate, you might need to consider linking instead of grouping.
Groups get created using the same organization as worksets. The shell/envelope is its own group. The interiors are their own group. Floor slabs are typically part of the structure, so they are their own group. This may include the balcony slabs.
Make wall heights unconnected. By having unconnected wall heights, walls are less constrained. If Revit doesn't have to process constraints when finishing a group, it seems to work faster. Much faster.
Another thing to add to this point is that this procedure forces us to think about floor to floor heights. Groups in Revit can vary in definition but not if it's trying to make two group instances have two different floor to floor heights. This only causes errors and slows down the process of finishing a group.
If you have groups with connected (up to next level) walls, and you change the distance between levels Revit will create new separate groups for every level with a different height.
Make sure there are no pre-existing errors/warnings in any of the elements you are trying to group. Especially overlapping walls. This is includes walls that may be overlapping in the x,y direction as well as the z direction.
Disallow the joins of any walls inside the group, to walls outside of the group. This is only a recommendation. I have read other posts that argue this is not as critical. But in my opinion that depends on the situation and building type.
We create models with a lot of suites. The suites are groups. The groups are copied all over the place. The less constrained they are, the better. Automatic joins are a type of constraint.
Structure. Model structural walls from "zone to zone" (EDIT: Previously stated "Lift to Lift" which also means "Level to Level". Model the wall through the building, until the wall thickness changes (like a shaft). I am open to a challenge on this, but the Revit Structure guys we work with like this better. If the wall is 12" (300mm) thick on Level P3 and the thickness doesn't change until Level 12, draw the wall from Level P3 to Level 12. Then you don't have to group any of the structure.
Railings. Railings are usually part of the envelope workset, but they should be placed in a seperate group so when we update wall group, Revit isn't also updatin the railings and floors as well.