So what actually is an ESB? Some people call their software an ESB; others use it as a name for certain infrastructure that they have built in their company (or in their department); and still others think of it as an architecture concept or a particular technology. It’s all extremely vague.

The term was probably invented to provide a (more or less) simple way of referring to various pre-existing software products and their functions. But that doesn’t help us much. What does an ESB actually do?

The ESB facilitates communication between different systems without mapping out any complex logic in the process. That’s what makes it different from EAI and EDI. It understands the languages (i.e. data formats and interfaces) of all the connected systems, and it can transfer information from one system to another – but that’s about the extent of its functionality if it is limited solely to the tasks of a “true” ESB.

In other words, a system can hand a CSV file over to the ESB, which the ESB then passes on and also converts into an XML format (for example) that the destination system will understand. Yet business logic is a foreign concept to it. It offers a good way of simplifying communications between different systems. There is no need to teach every single system how to communicate with other systems (including conversion of data formats); instead, you can manage all this centrally with the ESB using an adapter. That means the ESB only needs to know how to convert a CSV into a particular XML format, irrespective of how many systems will then use those formats to communicate.

This all sounds very similar to the description of EAI above. And indeed, we can view the work of an ESB as part of the tasks that fall under the scope of EAI. The difference is that EAI also maps out and implements the logic and interdependencies in the business processes, whereas the ESB solely deals with translation and transmission. At any rate, the whole topic is genuinely very vague – and some experts even doubt that there is any reason to use the term at all – so we won’t spend any more time on it.