In enterprise business applications, complexity stems from complex enterprise needs. To give you a flavor of these, here are just a few examples of requirements that lead to creation of complex platform infrastructures that make up the complex enterprise software.
- Translation for multiple languages
- Localization for different areas (e.g. currency, dates etc)
- Complex Query Needs (custom fields, saved queries etc)
- Adding custom attributes, objects
- Modifying out of the box functionality e.g. business processes
- Modifying the look and feel for personalization by end users (e.g. MyYahoo)
- Verticalization needs (e.g. industry specific flavors)
- High Availability (for planned downtimes)
- Selective feature uptake (to avoid re-training thousands of users)
- Performance requirements for high volume, latency, throughput etc.
- Complex security needs (users, roles etc)
- Organizational setup (e.g. business units, divisions etc)
- Error handling and compensation for rolled back business processes
In addition, there are a few additional factors to consider for large enterprise software products:
For multi-product application suites, economies of scale is achieved by consolidating common functions into a common platform, which then have the same complexities that the applications face when trying to develop products for a wide range of customers. This adds a layer of “knobs” to tune over and above the functional knobs that the application software provides.
No enterprise software lives in an island and integration with other systems is usually one of the big costs in application deployments. Integrations are inherently complex due to the nature of trying to tie together heterogenous applications with different data models, granularity, cardinality, semantics and protocols.
To allow for a plug-n-play model, most platform level APIs are driven with facade style interfaces that can plug-in to various implementations e.g. jazn; that add a layer of complexity. Use of standards-based technologies (BPEL, ESB, Web Services) also contributes to some level of complexity, as those standards are aimed towards satisfying requirements from all the participating members who created those standards.
I do not pretend that all enterprise software are absolutely user-friendly, but do realize that large chunks of enterprise software are targeted towards specific roles, which may seem very unfriendly to users who are not in that role. For example, a snazzy, graphical UI is not necessarily “simple” for data-entry clerk as it is to a knowledge worker.
When you think about it, a large percentage of the world economy depends on enterprise business software (ERP, CRM, HCM etc), and requirements such as above tend to add complexity.
Note that while the software can be complex, there is no excuse for not making the end-user experience as smooth as it can be. Although in my experience, some complexity does tends to bleed into the user experience, especially in on-premise deployments. The SaaS model, to some extent, shields end-users from most of the complexity, but once you start getting into requirements such as integration, complexity does find its way through during implementations.