I think it actually depends on the language that you use. When I used languages based off C, that didn't lend as well to rapid prototyping, that didn't have a good repl; I would do a lot of design work on paper. I usually ended up over engineering things with this approach though.
Now that I think and write in Lisp, I find it is a much better approach to draw up one or two UI frames and then code up the UI with hard coded data. Then I just slowly build the hard coded data out and the actual app in. I don't actual engineer much at all. I just let it flow out. This leads to a much more efficient design process in terms of the time to quality ratio.
It also seems to me that every time I try to program bottom up on paper, I do a terrible job at it. It works much better when I have actual code.