Instance Family
A group of instance types sharing a resource profile — general purpose, compute optimised, memory optimised, storage optimised, accelerated — chosen by which resource the workload actually exhausts first.
Providers publish dozens of instance types; they fall into a handful of families, and choosing the family correctly is worth more than fine-tuning the size within one.
The selection rule is to find the binding resource. A workload at 90% memory and 20% CPU on a general-purpose instance is paying for CPU it cannot use — a memory-optimised family of the same cost gives it two to four times the memory. The reverse is equally common: compute-bound work sitting on memory-heavy instances.
Two details that matter more than they look. Generation matters: a newer generation is usually cheaper and faster for the same nominal size, so staying current is one of the rare free optimisations. And ARM-based families (Graviton, Ampere, Cobalt) typically offer materially better price-performance for workloads that are not tied to x86, which for anything running on a modern managed runtime is most of them.
The practical process: measure utilisation of CPU, memory, network and disk over a representative period including peak, identify what saturates first, and pick the family whose ratio matches. Then size within the family from the measurement rather than from the number you first thought of.