I like to think of software design as cracking a code.  You keep working on the design over and over until you've finally cracked the code and an elegant design emerges.  I believe the solution exists out "there" and I just have to find it.  Albeit there is more than one solution but some are more elegant than others.  The act of searching for it is software design. 

I've been working on a design the past few days both at work and sometimes at home while in bed (my brain just doesn't like to take a break sometimes).  Last Saturday morning, I think I finally cracked the code.