There should never be empty slots (if the very few exceptions apply, you know who you are)
Leaving slots empty in a coriolis build might make sense just because you're trying to show a specific configuration to somebody and letting them pick what goes in the slots.
If you're trying to do a very specific/unusual high-speed combat build (trying to stay over 600 m/s), then you may want to restrict most of your internal slots to zero mass items (cargo rack, fuel scoop, repair unit).
Otherwise, it's really a matter of looking at your power, heat, resistances, shield and hull strength to figure out whether you want shield cell banks, hull reinforcement packages, or module reinforcement packages. All of these increase your "tankiness" in different ways.
I highly recommend a mix of module reinforcement and hull reinforcement, with the focus more on module reinforcement. Module reinforcement will generally provide more protection to your modules than hull reinforcement.
For any kind of PvE combat, you might want to consider cargo racks, a small collector limpet controller and a bunch of limpets. High rank (Dangerous/Deadly/Elite) ships drop high grade manufactured materials when you kill them.