An enterprise application is a business application, but more specifically, it is a big business application. In today's corporate environment, enterprise applications are complex, scalable, distributed, often component-based, and mission-critical. They may be deployed on a variety of platforms across corporate networks, intranets, or the Internet. They are data-centric and they typically meet stringent requirements for security, administration, and maintenance. In short, they are highly complex systems.
Designing and developing enterprise applications means meeting many separate requirements. Every development decision made to satisfy a requirement affects many other requirements, often in ways that are difficult to understand or predict. The failure to meet any of these requirements can mean the failure of the entire project!
Like any modern application, an enterprise application should be reliable and perform well, in addition to providing an intuitive and efficient user interface. But beyond these common qualities, it can be characterized by these three specific attributes:
These qualities clearly make the task of enterprise development challenging, and the trend is toward ever-increasing demands. The rapid improvement of computer hardware and software, combined with global economic competition—and opportunities—has created an environment in which business systems must respond quickly and deliver unparalleled levels of performance. As these demands continue, organizations must automate even more of their processes, build their software even faster, serve more and more users, and process a rapidly growing mass of data.
Aside from these challenges, the power, complexity, and rate of change of the technology used in building these corporate solutions make efficient development ever more difficult. Designing an enterprise application requires the weighing and balancing of an enormous array of application requirements, such as:
Without a systematic way to understand the relationships among these complex and often conflicting requirements, it's hard to know where to begin. What is needed is a straightforward method of reducing this complexity and providing an organized way to design and build applications that chart an optimum course among the many requirements.