Although the ability to implement different layers of an application using different technologies is one of the biggest advantages of n-tiered development, it also introduces additional complications. For example, the protocol used for communication between different tiers needs to be generic enough that both technologies can implement it practically. Additionally, a wider range of expertise is required to build and maintain the application. Before a development team commits to using different technologies, the advantages must clearly outweigh the costs. In other words, one technology must be the most practical solution for one area of functionality while clearly lacking in another, and the other technology must duly compensate for the deficiencies of the first.