It allows application functionality to be developed somewhat independently. Reusability leverages the domain knowledge and prior effort of experienced developers to avoid recreating and revalidating common solutions to recurring application requirements and software design challenges. Extensibility allows for the easy addition of new functionalities. Portability allows applications to run on machines of different operating systems. Consistence proves essential to a large-scale application to keep multiple ways of viewing and manipulating the same data.
Scalability improves the capability to increase functionality loads over time.