A good party is easier to manage when every character has a clear job. You do not need perfect optimization; you need enough coverage that one weakness does not define every encounter.
1. Decide who handles frontline pressure
Someone should be comfortable occupying dangerous space or protecting more fragile characters.
2. Keep reliable ranged options
Ranged attacks help solve positioning problems and let the party contribute before every character can reach the same target.
3. Cover recovery and utility
Healing, buffs, control and exploration skills all reduce the need to solve every problem with raw damage.
4. Avoid excessive role overlap early
Two characters can share strengths, but if the whole party depends on the same type of situation, difficult encounters become less flexible.