One major obstacle to Communism is Dunbar's number - the size of the average person's "monkeysphere" (from Cracked, so language is somewhat crude at times). In short, the monkeysphere is the group of people with whom you associate and readily consider as people. An example the Cracked article uses is of teachers:
Remember the first time, as a kid, you met one of your school teachers outside the classroom? ... Do you remember that surreal feeling you had when you saw these people actually had lives outside the classroom?
I mean, they're not people. They're teachers.
In the next paragraph, it talks more about how we react to people in our monkeysphere vs. those outside of it:
It's like this: which would upset you more, your best friend dying, or a dozen kids across town getting killed because their bus collided with a truck hauling killer bees? Which would hit you harder, your Mom dying, or seeing on the news that 15,000 people died in an earthquake in Iran?
It's hard to really care about people outside of your monkeysphere. This is where Communism runs into problems. As Cracked puts it:
some people in the distant past naively thought they could sit all of the millions of monkeys down and say, "Okay, everybody go pick the bananas, then bring them here, and we'll distribute them with a complex formula determining banana need! Now go gather bananas for the good of society!" For the monkeys it was a confused, comical, ... disaster.
Later, a far more realistic man sat the monkeys down and said, "You want bananas? Each of you go get your own." ... As long as everybody gets their own bananas and shares with the few in their Monkeysphere, the system will thrive even though nobody is even trying to make the system thrive.
Democracy actually runs into the same issue - why vote for something that only affects some people on the other side of the country when it will use money that could have been spent on something else that would have benefited you and your community?
So how can we get around this? Base your society around reasonably stable monkeysphere-sized groups! That would be a couple hundred people at most, so set up communal groups of 100-200 people. With good education on how to care about people they don't know as well, you could probably push that up to 500 people without stretching believability. That's enough people to have a stable community with a reasonable amount of occupational opportunity. There will be some people who want to engage in some occupation for which they would have to move to a new community (perhaps they want to be a doctor, but there are already enough in that community), but that will help prevent your community from becoming too... stale.
This actually lends itself to a representational form of government - each community designates someone to be their political representative. If your society has more than 500 smaller groups, there should be more tiers of representation. For example, if there are 2500 groups of 500 people, then rather than having 2500 representatives get together to make decisions you should have them meet in groups of ~50 representatives and have each of those groups send a representative to join in the top-level meetings. I'd suggest that which representatives go to higher-level meetings should change regularly (perhaps yearly?)
I'd also suggest that job training should be centralized. That way people will still have ties to those outside of their immediate communities, allowing them to build a professional network that will also help them to care about the other communities.
One of the most important things for your society to work will be diversity - if you know a doctor personally, you're more likely to be friendly and care about all doctors. If you know someone of a different ethnicity, you're more likely to have a positive attitude toward that ethnicity in general.