It takes all sorts of components to make a modern app: a web server, a data store, search capability, caching, etc. Historically, these parts have communicated using different languages, protocols and data structures. This has forced people in the same team to learn very different skills to one another. It has also required the use of heavy abstraction layers to convert the data of one layer (e.g. objects in the server-side code) into the language of another (e.g. SQL records for the database).