Here's what I think. Note that some points overlap with other answers.
- Logical steps: Is each solve step clear and logical, or does it rely on unstated assumptions or unreasonable interpretations of the clues?
- Confirmation: Once you've solved a step, is there a good way of telling whether you're on the right track?
- Fair search spaces: If the puzzle is hiding a message via whitespace between words or Markdown in a post, then unless the formatting is clearly abnormal then a hint is a must. If the puzzle requires brute forcing all permutations of a Rubik's Cube... then that's just unfair.
- No artificial difficulty: Don't include anything that requires purely time and no brains. "My puzzle is too easy, maybe I'll just encode the first clue paragraph in Morse code and make them decipher it." Please, no — that's just no fun.
- Minimise red herrings: Unusual surface readings (e.g. for cryptic crossword clues) are fine, but red herrings placed for the explicit purpose of leading someone down the garden path isare not.
- Pay attention to the details: If something is irrelevant to the puzzle, then order it in some way such that the irrelevance is clear. For example, the order the words are given in a word search rarely matters, so order them alphabetically so nobody will try to find patterns in the word order. Also check your spelling and grammar — if something seems off, then people might end up thinking that it's relevant.
- Do your research: Unfortunately, even good puzzles written with the intention of having a single clear answer can fall into this trap. Maybe you have two clues saying "Morse" and "insect", telling people to interpret something as Morse code to get an insect as the answer. Well I'm sorry — as clear as the instruction may seem, Serenity is a firefly that communicates in Morse code and a Vibroplex is a semi-automatic Morse key that became known as a "bug". Think about how other people might interpret your clues, and try to get a feel for other possible interpretations out there.
- Consider your target audience: If you have a puzzle that requires specialist knowledge (e.g. programming, advanced mathematics) and you don't expect most of your potential solvers to have that knowledge, then try to make sure that the knowledge required is 1) minimised, 2) easily searchable and 3) easy to understand quickly.