Part of that is because software development is usually concerned with optimizing things for their sale value, not for being useful. In my example, a lot of problems could easily be solved with the same CRUD stack, if not for the needs concerning the design (i.e. it can't look similar to that competitor's thing) and other goals unrelated to actual use of the product.