The 44780 chipset needs a time delay inbetween writing characters, as the chip needs to update the display, if you try to write another character or certain instructions too soon after the last one then the display will corrupt, if you wait to long it will still work fine.
Your mates delay routine was probably not taking long enough as the xtal frequency wasnt setup correctly.
I assume that the software is using the minimum wiring communication protocol, if all the connections from the display were made available there is a busy flag that can be read before writing the next character.
Basically I've just expanded on the post above.