В еволюції програми, як і в еволюції живих організмів, деякі зміни (мутації) є корисними, в той час як багато інших можуть бути шкідливими. Ключовим у питанні еволюції програмного забезпечення є те, чи покращується якість коду, чи погіршується. Програміст повинен розглядати процес внесення змін в програму як можливість покращити якість її дизайну та коду. Якщо ж помічається деградація якості коду, то це однозначний сигнал про те, що еволюція програми йде неправильно.
Другим фактором, який впливає на еволюцію ПЗ є те, чи зміни вносяться під час розробки, чи під час підтримки. Ці зміни розрізняються за декількома параметрами. Зміни під час розробки вносяться в більшості початковим розробником до того, як код є повністю забутим. Система ще не знаходиться в роботі, тому немає такого часового тиску, як під час підтримки. З тієї ж причини, зміни під час розробки дешевші, тому що система знаходиться в більш гнучкому динамічному стані. Дані обставини диктують стиль внесення змін, який відрізняється від того, що використовується під час підтримки.
Поняття рефакторингу
Ключовим методом виконання "основного правила еволюції програмного забезпечення" є рефакторинг. За визначенням Мартіна Фаулера це "зміна, внесена у внутрішню структуру програмного забезпечення для більшої його зрозумілості і здешевлення внесення змін без зміни зовнішньої поведінки програми". Слово “refactoring” в сучасному програмуванні походить від поняття “factoring” в структурному програмуванні, яке означало як можна більшу декомпозицію програми на складові частини.