Plan a design before you start.[...]
Plan to throw away at least one design and start over.
Try to keep your design fairly compartmentalized, and
loosely coupled. That way, when you do find a flaw
in your first design, you don't have to throw everything
away: some of the code you've already written will easily
work with your new code. (For instance, if you're always
updating a database the same way, and you keep the database
update code well-separated from everything else, you won't
need to make any changes to it when you realize that your
interface code is hopelessly screwed, trash it, and start
The hell with paco, vote for Erudil!