I've found that the best way to use Github within an organization mirrors how many open source projects use it -- each member creates forks of the organization repository and changes are introduced via pull requests.

This is the process we used at my last company and I think it worked really well.

1. Each developer has their own fork

This allows developers to create and keep around as many branches as they want without cluttering things up for everyone.

One drawback is that it does make it a little more difficult for two developers to collaborate on the same feature branch. However, that can be managed by collaborating on one of the team member's forks.

2. Change is introduced via Pull Requests

Push access to the main repository can be limited to lead developers. This helps enforce that each change is going through a peer review process. It's also helpful if you need to control when something gets merged in (e.g., such as during a code freeze prior to release).

3. Squash Commits & Rebase

If you're not familiar with squashing commits, a good explanation can be read here. Here'a more information on rebase, which also touches on squashing commits This practice can make a huge difference when it comes to maintaining a clean history in the main repository and is especially helpful if circumstances arise where you need to revert a specific feature -- essentially you have just one commit to deal with rather than several scattered commits.

It's important to note that squashing commits is rewriting history. This is usually no big deal if done prior to the change being merged into the main repo. However, if you've shared a branch with anyone else you should avoid squashing.

4. Work toward one release at a time.

If you're not lucky enough to work in an environment that can do continuous deployment, at least save yourself a lot of headache by working toward one release at a time.

Trying to manage multiple release lines at the same time adds a lot of merging overhead and you'll inevitably forget to merge a change on one branch to another.

Find the best solution for your team

Like most things, the best approach will depend on factors such as the size and experience level of your team. Be sure to understand all the options out there and choose the best approach for your team. Check out this gist for examples of how others are using github in their organization.