For me, it's a combination of side projects and pushing the boundaries on work projects (where budget and time exist). I tend to structure my side projects so that I'm covering ground that's new and uncomfortable, say learning a new language (Python, Haskell), a new paradigm (functional), or a new platform (Linux, OS X). If you're just doing more of what you already know how to do, the utility is limited. It's doing focused work on new areas that stretches you.