I just finished debugging the bulk of my code last night using the mighty USART. I was contemplating buying the JTAGICE mkII to aid in debug, but felt the $300 was a bit too much.
So, I figured I would use the USART to dump out all kinds of information while the program was running. It was awesome. I had multiple bugs and in a few hours I had most of them licked. This project involved reading and parsing GPS module sentences and using double variables with lots of trig functions. Obviously, speed is not paramount here for this task.
Sure, the JTAGICE mkII would have been nice with its single stepping and breakpoint ability, but the USART did the trick and saved me lots of $$$.
So, take the pain of getting the USART running reliably (using a nice crystal value like 1.8432 MHz). Then, build up a few serial subroutines and have at it!