Visio Rules! If you program, build databases, or build database driven websites (which counts as programming) then you should be documenting your code within the code itself in the form of comments and externally in documents. My stand-bys are a site map (created in Visio), a data dictionary (created in Word), a data map (created in Visio), and a specification (created in Word). I also maintain a single document that records all my assumptions, questions, and notes about future upgrades or oversights that need to be modified "later." Maintaining these documents is enjoyable and having them on -hand makes the coding go so much smoother.