I don't want programmers to have to work harder but given the choice between programmers working harder and users working harder, I'll put the programmers to work in an instant. It is the programmer's job to satisfy the user and not vice versa. If the programmer thinks of the user as just another input device, it is easy to forget the proper pecking order in the world of software design. Another method of eliminating error messages is for the program, when it receives bad input, to assume that maybe it is unintelligible because the program, not the user, is ill-informed. Information that is entered in an unfamiliar sequence usually is considered an error by software, but people don't have a hard time with the concept.
Humans know how to wait, to bide their time until the story is complete.
Software usually jumps to the erroneous conclusion that out of sequence means wrong, and issues the evil error message box. If, for example, the user enters an invoice for an invalid customer number, the program could accept the transaction and make a special notation to itself that indicates that the user must eventually validate it. The program would then watch to make sure the user entered the necessary information to make that customer number valid before the end of the month book-closing. In fact, this is the way most humans actually work. Usually, they just enter codes in a sequence that the software isn't prepared to accept.