So you create a real-time (synchronous) workflow, and when you test it out, it doesn’t do anything. Say you have a workflow that should fire when an opportunity status is changed to “Won,” but you close an opportunity as “won,” and nothing happens, and there are no errors.
Most likely, you have the workflow definition set to happen “Before” the status change. When you create a real time workflow, the workflow can fire before a status changes or record is updated. This is the default setting.
Problem is, with “Before,” your change hasn’t happened yet. If you have a workflow fire before the status change, and you change a record status to “won,” the workflow fires before your change is applied, and when it checks the status of the record, it will see the old status, not the one it is changed to.
Rule of thumb: use before if you need to work with the prior value, use after if you need to work with the new value.