But too many of these applications are done as "one-offs" by heroic programmers
Much work gets done "from scratch" with low-level tools and sub-optimal programming languages and engineering practices
Little reuse of data models or processes across applications
"Hand-crafted" user interfaces that don't follow standards and are hard to customize
Business rules and workflow that are embedded into application logic, rather than being externalized and interpreted by separate processors or "engines" – instead of modifying them when requirements change, people "work around" them
Applications that are tightly-coupled by APIs or complex data formats, making them interdependent in unpredictable ways