Sorry about misunderstanding.
I think that's where SRP and naming comes in like mentioned elsewhere in the thread. If methods really do one simple thing and are properly named, it's easy to tell if they should be re-used or not.
A lot of the time, side-effects are not mentioned in method names or params (or the params are optional, that's where the issue comes in).
E.g.
SaveCandidate(Candidate candidate);
In reality, SaveCandidate does two things, saves the candidate and updates their "ProfileCompletionStatus".
If someone sees SaveCandidate and not SaveCandidateAndUpdateCompletionStatus
or
SaveCandidate(candidate, SaveSideEffects.DO_UPDATE_COMPLETION_STATUS)
they will re-use SaveCandidate in places here completion status shouldn't be updated (contrived example - data migrations).
The problem, of course, is that these overly-clear, overly-detailed methods are a pain to read. The common advice is "it's separate", but then we are repeating
SaveCandidate(candidate);
UpdateProfileCompletionStatus(candidate);
everywhere, despite them being generally one process. I guess this is all pretty pedantic. When you spend a ton of time on this, you are missing out on getting stories done, but if you don't, the code eventually becomes umanageable.