[First published: September, 2005] No one makes bad software on purpose. No programmer has ever sat down, planning out weeks of work, with the intention of frustrating people enough to make them cry. Bad software, or bad anything, happens because making things is hard, making good things doubly so. The three challenges: Possessing the diverse skills needed to make good things. Understanding who yo