We try to follow a few basic principles:
Decisions are made by consensus. In general, we make an effort to discuss tricky problems until all the major contributors agree. This is similar to the IETF's philosophy of "rough consensus and running code". If you think a decision is wrong, explain your viewpoint carefully and be prepared to back it up with code. Use the magic phrase often: "Does anybody object to this?"
Final rulings are made by the core team. The core team consists of the most prolific Gwydion developers and those who have been involved the longest. If the other contributors would feel guilty about making a decision without considering your opinion, you're effectively a member of the core team.
Decisions within the core team should be made by unanimous consent whenever possible. This seems to have worked well enough historically. If this process ever breaks down in the future, the core team might choose to vote as measure of last resort.
No due dates. As a matter of policy, we do not promise completion dates to outside entities. This is because of the volunteer nature of the project and the traditional unreliablity of software estimation. Of course, individuals may promise due dates of their own, but nobody else will take responsibility for meeting those dates.
Don't bite off more than you can chew. Work on one or two projects at a time. Don't commit to implementing many separate libraries or fixing many separate bugs. By "reserving" too many areas, you effectively discourage others from working on them.