When the subprogram must have no "memory" of previous calls - When persistent state would cause bugs (e.g., accumulator that should be fresh each time) - When you want guaranteed predictable behavior regardless of calling sequence