By adding the errback to the execute_event deferred you shorten the visual and causal distance between failing to execute an event and adding it to the deleted set.

There are two reasons to use gatherResults/DeferredList:  

1) You want to collect all the results and operate on the resulting list.
2) You want to wait until a number of operations have completed.

While this code looks like it might be #1 it's actually #2.  The only reason you care about the result of the DeferredList is you need to find which events failed.  You do this by interleaving the results with the input events and iterating over them.  This works, it does it was it says on the tin, it just (in my opinion) doesn't say it as clearly as it could.

For the purposes of my example gatherResults and DeferredList are equivalent.  gatherResults is just a better name because it is closer to saying what it actually does.