In the JTS we propagate the remaining timeout down to the subordinates and the transaction they create locally has that timeout associated with it. So the leaf node can timeout even if the parent doesn't send a completion message. There's no fudge factor, i.e., we don't add a network delay to the timeout at the leaf, assuming that the transmission is instantaneous. Realistically since most timeouts are measured in seconds not milliseconds this hasn't caused a problem so far.