1. Understand the problem
2. Break the problem into subproblems. Goto 1 till subroblems
are small enought to be tackled.
3. Develop the algorithms for each of the subroblems you got
after step 2. No handwaving allowed.
4. Implement the algorithms.
I'd say for majority it ends around the step 2. Programming only matters at step 4.