For dynamic programming, I don't start coding until I have written down the recurrence relation.
For backtracking, I don't start coding until I have visualized the decision tree.
For greedy algorithms, I don't start coding until I have specified the greedy rule and looked for counterexamples.
For binary search, I don't start coding until I have established the transition point I need to pinpoint.
For trees, I don't start coding until I have decided what information needs to flow up the tree, down the tree, or sidestep the recursive flow (be stored "globally").
For sliding windows, I don't start coding until I have identified what information I need to maintain about the window, and what data structures allow me to do that incrementally.