For me, there is a somewhat fuzzy division between the different roles in a project. Sure, people specialise in their chosen role, but cross-functional work is the norm. So I may work on estimates and scope with a BA in the morning, then work with a QA on the testing framework in the afternoon. Of course, there's a lot of freedom even within the constraints of a project, to do something interesting. The trick is to find those hidden corners in a project, and chomp on a problem everyone takes for granted, fix it, and smile privately at a job well done.
I was interested in working on data analysis for a real client, and trying out statistics/machine learning in the real world, but unfortunately there weren't any projects out there with this sort of focus. ThoughtWorks went out of its way to procure not one, but two, projects for me to work on and sharpen my analysis skills. In addition, they were fine with me spending 2-3 days a week, doing my own reading on the subject, learning and experimenting. That's the sort of freedom that makes this place a kickass place to work in.
I'm engineer, first and foremost. That's why I believe you should have some familiarity with both the existing theoretical foundations of your field, as well as stay updated with ongoing work in your chosen line of work. I build custom solutions for customers, and my technical interests include machine learning, distributed algorithms, and data analysis. When not coding, I'm either sketching or playing World of Warcraft!