Outbound Messaging in Salesforce.com is an incredibly powerful feature for doing integration, but it does have a few drawbacks.  Before I get into the negative points, I want to point out some of the good.

The outbout messaging feature has two capabilities which are extremely important for integrating Salesforce.com with other systems.  First, it insure messages get sent immediately after the workflow fires, and second, it insures delivery of your message.

However, during a recent integration I quickly realized that insuring delivery of messages meant that my receiving system HAD to consume them and return a response message confirming that the data was consumed.  At one point during my integration development a large number of new records were added to the system for migration testing and all of these records fired outbound messages. (Think 1M records added or updated each taking about 1s to process.)

Another issue I quickly ran into after we went live is that my integration and Telephony applications were stepping on each other.  Apparently, both systems were trying to update data simultaneously and my users kept getting issues with records failing to update because the integration solution or telephony application had updated the data prior to them saving it.  Hitting the back button would loose all data.  So, be forwarned, examine how your integration timing is going to impact the live system and do some realtime tests.

In my case, I ended up forgoing outbound messaging and went with a polling approach instead.  This eliminated the timing issues we were having and life was again good.  However, I did give up real-time updates in favor of near-real-time updates, but this was a solution we were willing to live with.  Incidently the alternative would have been a Visual Force page that handled the UI differently.

So, there you have it.  A few good things, and a few challenges with Outbound messaging.  Happy integration!