Custom software development is hard because of the gap between the customer and the programmer: the programmer doesn’t know much about the business, and the customer has no idea about making software. However, in the end of a successful project, the programmer inevitably knows the business to the tiniest detail, while the customer may stay just as clueless on software.