We are used to the concept of a plug in the physical world. They make it easy to get all the specialty wires connected correctly so complex things work reliably. We use a variety of USB Connectors to connect things like chargers, disk drives, printers, mice, keyboards, and cameras to our computers, phones, watches, and tablets with almost no thought. The same goes for HDMI video cables connecting computers, satellite feeds, antennas, and disk drives to our TVs and screens.
But when it comes to software it is all too often the case that an interface between two software components looks more like a breadboard prototype than a simple, reliable plug.
While wiring components together is sometimes appropriate when developing and testing a prototype, it grows burdensome to leave things so informal when we move from doing a quick proof of concept to product development. Any time you have more that a couple of arguments passed into or returned from a software component, create a class with attributes that have meaningful and intuitive names in the context of the role of the software component. Our minds love names, almost as much as we love stories. Conversely, we are fairly oblivious and irritated by positions in lines. Make you software service components friendly to people. They’ll love you for it.