One thing that tripped me up is sibling events can run in parallel if the event is async. If you do a "Wait" event in one block, then under it is another event, that event will trigger in parallel. This can cause what's known as a "race condition", which is very very hard to debug as it can produce obscure and sometimes random results.
What I try to do is have a top level condition, that then calls a function with the proper parameters, and have a local "Handled" variable, making that a condition for all values except the first, and having each sub event making "Handled" true if it's executed per the parameter condition - effectively creating a switch statement.