There's a lot more reasons why they build ugly products.
1) Lack of design abilities 2) Lack of understanding of how 'average' users use computers 3) Using the system model and architecture to drive the UI model. 4) Engineers have decades of experience debugging and learning all sorts of complicated software products and languages. They are experts in figuring out how complex systems with no documentation or learnability work. Average users just want to get work done and have no ability to diagnose and debug.