To allow for maximum flexibility and best use of capacity within the team, I generally advise my teams not to self-assign a task until they are about to work on it during an iteration. In most cases, early self-assignment can lead to some team members running out of work or certain team members cherry-picking stories they want to work on even if they don't have the time right now.

In some cases, it does make complete sense to grab a group of related tasks/stories if delivering them together is the best thing for the team, but that only works when stories are granular enough that they are all part of a single flow.

There are exceptions, as always. Specialists (for example, a front-end developer) can't always tackle all the work and other members of the team may not be skilled enough to handle it. This is probably a good case for direct assignment to an individual during planning phases.

However, as @Steve Barnes mentioned in [his answer][1], it comes down to what works for your team!