Разница между should и should have done заключается в том, что should используется для советов и рекомендаций, относящихся к настоящему или будущему, а should have done — для критики или сожаления о действиях в прошлом. 14
Should сообщает о том, что рекомендуется, хорошо или правильно делать в настоящем или будущем. 4
Should have done указывает на то, что что-то должно было произойти в прошлом, но, возможно, не произошло. 2 Она выражает уверенность в несбывшихся ожиданиях или пропущенные возможности. 2
Таким образом, should даёт совет на будущее или настоящее, а should have done — критику или сожаление о действиях в прошлом. 14