No solid rule applies. Here is my order from best to worst:
FS -- As much as possible -- This is, as mentioned above the most defendable and causes the least amount of progressing issues.
SS and SS +lags -- as long as the lag is reasonably short relative to the predecessor activity
FS -lag - as long as the -lag is relative short to the predecessor activity.
FF only where you really need the successor activity needs to finish at the same time as the pred.
FF+lag will work much the same as FS-lag,
There are good use of a SF relationship in a continue process operations schedule where a successor shift (or task) must start prior to the completion of the pred activity. However, in the Construction / Engineering industry it causes more problems than it solves. Therefore, I would agree to avoid this relationship