Despite the fact that many people espouse prototyping, there is relatively little on the web about how to actually go about it. Through trial and error, I have arrived at a robust solution that is flexible enough to handle a wide variety of projects.
Frequently, I find that paper prototypes are sufficient for smaller projects since the functionality and interactions are pretty standard. On these projects, I am frequently acting as a front end developer as well as a designer, so a fully-fledged prototype seems redundant.
On larger projects I find that a prototype is worth a million words, both to me as I test out ideas, and to the developer. For these projects, my preferred prototyping tool is Middleman, a static site generator built on Ruby.
An interactive prototype is in no way a replacement for Photoshop. For one, I rarely prototype the entire project. I prefer to put the big ideas and interactions into the prototype, and to refine details and pixels in Photoshop. I find that these prototypes give me a very strong idea of which screens will need the most attention, and that they help me to set smart priorities prior to moving too far into the level of detail that Photoshop best serves.
While Middleman may not be the right tool for everyone, I definitely think that more designers should take the time to find a prototyping method that works for them. I see so many instances of poor design choices that could have been avoided pre-development with even the most basic of prototypes.
Wireframing can certainly help, and is a good place to start, but prototyping takes this one step further. It allows you to actually interact with your content or data in the way that your user will. You will notice right away if something in the flow feels overly complex or if the layout is too constraining for your dynamically generated content. It saves you and your team time, money, and lots of frustration. Your developers and clients will thank you.