In a single app, objects should talk to each other and databases and queues and junk via protocols, not by being glued to an ORM or a particular implementation of a queue or whatever. Most devs don't do this because it's more work, but you end up with a much cleaner/more testable structure to work with.
On a higher level, many/most programs aren't made to communicate with each other at all. Look at web software, it's all about communicating with a browser and that's it. The API driven movement is helping things along, but it's still a HTTP Browser driven mindset complete with holy wars about REST/Hypermedia.
Unix pipes are a great example of what is possible with standard communication protocols, but it seems like it could be taken further. What if you could pipe a stream of API's together? Yahoo's YQL and Pipes plays in this realm, but you still have to kind of glue pieces together yourself.
Imagine if you could say...
fb search --name 'John Doe' --location 'Chicago, IL' | linkedin --filter 'Ruby Programmer' | twitter tweet 'Hey check out our ruby meetup next week'
That's a somewhat contrived example, but it would be great if we could do something that simple and not just via a command line, but from any language in a similar amount of code. That would be a step forward I think.