I use a number of different metrics for grouping...
- Grade/Age
- Academic Level (low correlation with grade/age)
- Social/Emotional Maturity (moderately correlated with age/grade)
- Experience level with building in general, competitive youth robotics in general, and specific program (FLL in your case)
- Type of experience desired (fun/relaxed/learning vs. highly competitive)
- Area of interest (project, programming, mechanical, etc. - however you define roles)
- Ability to work independently including staying on task, prioritizing tasks, problem solving, and personal organization skills (highly correlated with academic level, moderately correlated with age/grade)
- Requests from students and parents (from students usually to be with friends, from parents to be with siblings to minimize the number of trips they need to take each week)
- Edited to Add: Personality conflicts. This is rare in my experience, but some kids just can't work together because 1) they clash constantly or 2) they get each other amped up and off task. There's a time for learning to work with people you really don't like, but I find that in season FLL is not that time. Your mileage may vary.
- Also Edited to Add: Meeting availability. File this under practical considerations. If all of your teams meet at once this won't matter, but if you do multiple meeting rotations the evenings on which students are available is something to consider when grouping.
I'm of the school of thought that kids should be primarily grouped by type of experience desired and ability to work independently. This minimizes the strife and angst within teams as kids that are more relaxed or still learning don't feel pressured by their highly competitive teammates, and highly competitive kids don't get frustrated by feeling like their more relaxed teammates are dragging them down. It also allows coaches to more easily give each kid the type of instruction that they need most, as the coaching techniques for new learners vs experienced or competitive kids are very different. If you know the kids personally or are able to run a camp or workshop as a sort of tryout to get to know them a little better, this isn't a terribly difficult thing to do. If you don't know the kids personally, I find age/grade based grouping is the way to go. If you have more than one group of kids per grade you can either further split them up based upon desired role (so you don't end up with 8 kids that all want to do the same thing on one team) or by academic level (I usually use reading level, not because that matters particularly, but because it's fairly highly correlated with ability to work independently which effects the best coaching style for the students/team).
The other school of thought I have tried is mixing age and ability levels on each team. This was challenging in a number of ways and I don't recommend it. Instead, I have a "high ability" and a "low ability" team meet concurrently so they can learn from and help each other without causing too much strife within each team.
You can decide whether or not you will take requests for grouping. I usually do, and it hasn't come back to bite me yet (been doing this since 2005). I do make a disclaimer that I don't guarantee I can fulfill a request, but I haven't had issues so far. Parent requests to keep siblings on the same meeting schedule I can usually accommodate by putting the siblings on different teams in the same meeting rotation. Not taking requests is also perfectly valid (learning to work with diverse people, making new friends, etc.).
As far as gender based grouping - If the girls get excited about it I see no harm (but not necessarily a benefit either). I've found that younger girls (ages 8-10) sometimes get excited about a girls-only team. I usually try and get them into coed teams as they get older (ages 11+) only because I use so many other grouping metrics that I can generally form more balanced teams without the additional gender based requirement. That said, if I ever had older girls request a girls only team I can't imagine I'd say no.
In general, I would recommend keeping the age gap between the youngest and oldest on a team no larger than 2 years. Minimizing the gap makes it more likely that kids will have similar needs as far as coaching style goes, making it easier to fulfill individual instructional needs. There's also a BIG jump in social and emotional maturity around age 11 usually, so keep in mind that a grouping of 10-12 year olds may have more issues than a grouping of 8-10 or 11-13 year olds. This isn't a rule, as some teams operate with a larger gap just fine. You know your kids better than than we do and thus are best qualified to make the decision. If you can, parents and teachers can be a great resource to help with grouping (teachers especially, since they do this every day).