I take the approach where I ask myself a few questions before I decide what to do.
- Do I need to notify before the user can continue?
You will find that there are very few times where the user actually needs to stop and wait for notification before continuing. This means that most of the time you should be able to do the work in the background (background thread or other async method). Note that this really applies to actions or operations where the "work" isn't visible, IOW it doesn't apply to situations like spell-checking a document or applying effects to an image because they can physically see what is going on so shouldn't usually need a notification.
- Do I really need to notify the user?
You should consider whether the user even really needs the notification. Have they just triggered a routine operation which the can reasonably expect to never fail (like saving a document)? If so then it is pointless notifying every time they perform the action, instead you should only notify when the action/operation doesn't succeed.
If it is an important notification, or contains results the user will be most likely to want to see each time, then put the notification front and centre. If it is just a feel-good notification (like "Action xyz succeeded") then put it out of the way, the user knows where to find it if they really want to see it.
- Should I prompt or notify?
If your code cannot reasonably make a decision based on the context of the user's actions so you actually need to ask the user what to do, or if they are about to make irreversible changes, or they need to be presented with results, then prompt. Otherwise notify (if you must, subject to the top two questions).
Basically, I try to stay out of the user's way. They don't want a "Hey, you saved the document!" prompt every time they press Ctrl-S. They don't want a "Are you really sure?" prompt when they perform the same action for the hundredth time that day (and it's only Monday.....arghhh!!). Of course if you try hard enough you will always be able to find tricky little edge cases that these questions don't help with, but they do me right most of the time.