Bad design choices, Bad implementation, Incomplete implementation, Lack of documentation
Many un-necessary layers of abstractions, Complex abstractions that are difficult to understand, Undocumented framework
Patterns like MPC (Model presenter controller), Developer unfriendly - barrier to entry is high, Installer that cannot be automated
Service Hosting, Logging, Component packaging and deployment, Object Relational Mapper