To design better software (and software-hardware solutions) one need to properly abstract the business. Good and adequate abstraction of real life leads to good system design. And vice verse, bad design is an origin of the failure to computerize smth. Who is guilty? The one who took responsibility for design, because others follow the first guy.