I remember wondering about this sort of thing when I first bought in to Indigo. I asked about "best practices." I approach this as best practices **for non-programmers**. If you're comfortable with Python, there are bound to be better ways to do things via scripting.
Over time, I've come to realize that as much as possible, it's sanity-preserving to move discreet actions into action groups, rather than have a trigger or schedule that directly does the action. That way you may have multiple triggers or schedules and change them all however you want, but they still do the same thing which you've hopefully tested.
So for example, I have an action group "Camera 1 Snapshot" that:
Takes a camera snapshot with a specific camera and saves it.
Manipulates that snapshot so it meets the upload file size limit for Indigo's web server
and that's all.I have multiple triggers that can call that Camera 1 Snapshot for a variety of things sensors notice. This does two important things:
Makes it easy to troubleshoot if something in the action group isn't working right
Makes it easy to duplicate the action to other cameras.
In particular, I don't have to hunt through multiple different triggers to find the place where, for example, I have the delay before saving the snapshot file set too short. Because that delay is only ever set in ONE place, but then called by multiple triggers.
I'll go so far as to suggest that once you have two triggers with different conditions activating the same things, you're in a situation where you want to use an Action Group.
There's a similar but less compelling argument to make for Virtual Device Groups.