They say people work on what they want but they still advertise for specific jobs (https://github.com/about/jobs), so surely there is some level of direction there. i.e. If you're hired as a Data Miner then you are expected to spend your time mining data, what happens when that engineer decides he wants to work on something else?
We've been splitting up into teams (or roles) a bit more as we've grown- it just helps to keep the focus on things that matter.
That said, the most important part about this is that those teams are extremely weak. In other words, you should feel strongly able to float between teams, work on different repositories, or take a week or month off and pursue a different problem if the problem seems important or if it keeps you happy and productive.