Roles in software development

Here's a list of various roles, gathered from "Organizational Patterns of Agile Software Development" and Scrum. Some roles need to be predefined, but most appear by themselves as team members assume different roles.

Role categories

Producers
The people who directly contribute to the product. This includes Designers, Architects, and Programmers.
Supporters
The people who are necessary for the project, but don't directly contribute to the product. This includes Managers, accounting, tech support, etc.
Deadbeats
Unnecessary people that add no value to the project. These we shouldn't have in the project.

Roles

Developers (aka Programmers or Designers)
generate source code for the product.
Architects
work on the technical architecture of the product.
Designers
work on the vision, usability and aesthetics of the product, in collaboration with the Product Owner and end users.
Interaction logic designers
work on the interaction logic of the user interface. ("How everything happens?")
Graphical designers
work on the colors, layout, fonts and images of the user interface. ("What things look like and where they are?")
Product Owner
is an end user and has final say on features that are included into the product specification.
Proxy Product Owner (aka Enlightened Customer, Surrogate Customer)
knows the end users and can substitute a real Product Owner when necessary.
Scrum Master (aka Gatekeeper, Firewall, Public Character, Matron)
is the developer team's "manager", who organizes daily scrums, makes sure everything goes smoothly and removes obstacles from the developers' way. He works as an interface between the developers and other interested parties and "keeps the pests away".
Apprentice
works with an expert developer so he quickly learns the platform being worked on.
Mentor
supports Apprentices, by way of (for example) pair programming.
Patron
is a high level manager who defends the project.
Wise Fool
has the courage to raise uncomfortable issues for discussion.