Suffering-oriented programming can be summarized like so: don't build technology unless you feel the pain of not having it. It applies to the big, architectural decisions as well as the smaller everyday programming decisions. Suffering-oriented programming greatly reduces risk by ensuring that you're always working on something important, and it ensures that you are well-versed in a problem space before attempting a large investment.
I have a mantra for suffering-oriented programming: "First make it possible. Then make it beautiful. Then make it fast."
-- Nathan Marz
Quoted on Fri Aug 10th, 2012