Signals vs Value Types vs blocks for object flow typing

I am trying to create a set of rules for my team that details when you should use a value type vs a block vs a signal element to type an object flow between activities or blocks. After quite some research I was not able to find anything concrete. Any suggestions?