Any developer or designer should give highest priority to error handling than the happy path for an quality delivery.
Let us understand how the error flow happens in IIB with reference to below flow.

Say failure occurred at compute node in above flow.

How transactionality of message is affected by transaction property of input node:
If transaction property is set to “automatic/yes” and the input message is persistence message broker receives the message under the sync point and treat this as a transactional message. if transaction property set to No and message is persistence this creates no effect (treated as non-transactional message).
Few things to consider for effective error handling:
Always connect the Failure terminal and the Catch terminal of the input node to excpetion handling process.
Ensure that all messages that are received by an MQInput node are either transactional or non-transactional for length of entire flow, avoid ambiguous configurations.
It’s a good practice to have try-catch node in middle of complex flows, thus the exception is handled with less time and CPU usage.
because if only input node has to handle exception of big flows ( having too many nodes and complexity), the failed message control has to travel all the way back to input node causing heavy usage of memory,CPU and time.