Non so da dove provenga, ma è un buon consiglio e abbastanza semplice da capire.
Qualsiasi programma progettato con cura verrà suddiviso in varie parti, combinato e composto in vari modi. Più è difficile ragionare su cosa fa una particolare parte, più difficile sarà assicurarsi che il tuo programma reagisca in modo prevedibile.
Isolare le parti che producono effetti collaterali rende il resto più facile da ragionare, testare e eseguire il debug. Ridurre il numero di effetti collaterali in ciascuna parte che genera un effetto collaterale renderà la parte più facile da lavorare allo stesso modo.
Se lo decomponi ulteriormente, un valore di ritorno è un effetto. Gli effetti collaterali sono un effetto. Una funzione dovrebbe produrre solo 1 effetto (se possibile) perché maggiore è il numero di input e effetti di una funzione, maggiore è la difficoltà nel ragionamento su ciò che effettivamente fa.