Team Roles and Responsibility Areas
This document describes various
responsibility areas. Each
team member must take responsibility for one or more areas. They
have roles corresponding
to the areas that they take up e.g.
the Team Coordinator takes responsibility for the Teamwork
area. Roles will
last for the length of the quarter, however you are
encouraged to switch roles
periodically if everyone in the team is agreeable to it.
Please inform the
instructor of changes in roles, and also note the change on
the Team Roster
document.
Note that roles indicate responsibility for
ensuring that
particular concerns get addressed well, NOT that the person who
has the role
must do all the activities for the role. Thus it may happen that
the team
coordinator participates extensively in testing, while the
testing coordinator
helps to sort out configuration management problems. Assigning
coordination
responsibilities to a particular individual indicates that they
must take
leadership in ensuring that the objectives in that area are met
as well as
possible. The specific activities in each area may be done by
any of the
members on the team, based on knowledge and ability, allocated
tasks and need. Ultimately, all team members share
responsibility for the success of the
project i.e. everyone is empowered to contribute in any area and
any way they
can.
As a team you may decide to equally share all roles, and this is
an acceptable approach. However, your team must define a
team coordinator.
It should be strongly understood that all
team members
participate in development and unit testing of their code.
Review the list of goals for your role(s)
every week, and
make sure that they are being met. If they are not being
met, this is an
issue that must be brought up and resolved.
Teamwork (Team Coordinator)
Teamwork focuses on effective cooperation
within the team. The goals include:
- Participation:
Everyone on the team must participate in ensuring the success
of the project. They must be fully involved in team meetings
and decision making. Everyone must have a shared understanding
of the goals, the decisions (technical as well as managerial),
and the reasoning behind decisions.
- Effective use
of resources: Each member of the team should be put in a
position where they can contribute effectively to the project
e.g. if someone is good with tools, but not strong in Java,
they should be given opportunities to contribute based on
their strengths.
- Alignment with
individual goals: People who have an interest in developing a
particular aspect of their skills should be given an
opportunity to do so (if possible). For example, if someone
wants to learn more about building GUIs, interface development
tasks may be given to them, even if they are not proficient at
it.
(Note that sometimes there may be conflicts between team needs
and individual desires: the team may benefit more from a task
being done by somebody who can do it well, but someone else
may be more interested in doing the task, even though they are
not good at it. Balancing such considerations is one of the
challenges in teamwork. Tasks that “no one wants to do” must
be shared fairly among team members.)
- Motivation:
All team members should be motivated to meet the team goals
and produce a really good product.
- Interfacing
with the instructor: The instructor should be kept informed of
progress and issues.
- Effective
meetings: Team meetings should be participatory, orderly,
short and effective in decision-making and alignment (i.e.
ensuring everyone on the team is on the same page). 10 – 15
minutes of class time will be set aside at least once per week
for quick team meetings.
- Issue
resolution: Any problems within the team should be identified
and resolved.
- Timeliness:
Each deliverable should be completed on time.
The Team Coordinator may or may not serve as
a “team
leader”.
Capabilities needed: Work well with
people: good
communication, interaction and empathy (“understand where each
person is coming
from”). Creative problem-solving to resolve tough situations.
Meeting
facilitation skills.
Requirements Management (Requirements Coordinator)
If you do a great job of building the wrong
product, all
your effort is wasted. Hence requirements are critical to
product success. Goals include:
- Understanding
the project goals. The project description document describes
the goals, and the Project Concept and Requirements should be
checked to make sure that all the goals are met.
- Understanding
customer needs. The instructor serves as the customer. The
Project Concept and Requirements should be checked with the
customer, and there should be constant continuing interaction
with the customer to check whether the product being built
meets all customer needs.
- Documenting
the requirements: Creating the requirements document and
keeping it updated.
- Managing
requirements changes. Requirements changes may originate in
three ways: either customers may change or add new
requirements, or there may be errors in the requirements that
need fixing, or the development team may come up with ideas
for improving the product. In all cases, the change to
requirements must be managed. When requirements change, the
entire development team must be informed, and all development
artifacts (designs, code, documentation) must be updated to be
consistent with the changed requirement. Also the customer
must be kept informed of the change. If the development
team wants to modify the product requirements, it may only
do so with prior consent from the customer, otherwise the
changes will be considered to be bugs. For example, if
you wish to add context-sensitive help to your product, but
this was not part of the original requirements, you must
obtain the consent of the instructor before adding it. (Yes,
this is how it works in industry – unauthorized “improvements”
are NOT welcome).
Capabilities needed: User-oriented
thinking and user focus. Good interaction skills. Preferably
some knowledge of the problem domain.
Test Management (Test Coordinator)
Good
test design
and effective testing require considerable technical skill and
creativity, and
have a huge impact on project success. Goals include:
- Test strategy:
Selecting the test strategy, particularly for integration
testing. Identifying module granularity for unit testing.
- Testing:
Performing tests, identifying failures and ensuring the
problems are fixed.
- Regression
testing: Deciding which tests need to be performed again when
changes are made to the implementation.
- Tracking and
reporting: Keeping track of which tests were executed, whether
they passed or failed, and re-doing tests after bug fixes.
Capabilities needed: Excellent
understanding of the
requirements and design. Excellent development understanding
(actually test
coordination needs this as much or more than development
coordination). Being
systematic and organized. High technical creativity.
Configuration Management and Tools Support (Configuration
Manager)
Configuration management is critical to the
success of team
efforts with multiple artifacts and releases. Goals include:
- Managing
concurrent activity: If multiple team members try to make
changes to the same files concurrently, chaos can result.
Configuration management tools such as CVS or git and development
environments such as Visual Studio (or Eclipse) provide part of the solution, but
they must be complemented by procedures that minimize the
possibility of unwanted conflicts, while still enabling work
to get done most effectively.
- Using
versioning for releases and for backup: Artifacts such as
documents and code evolve continuously, but it is necessary to
create “release” versions for customers (instructors) so that
what they see is consistent and does not keep changing.
Versioning is also critical for creating backups, so that if
something goes wrong, the team has a recent “good” version to
fall back upon.
- Defining build
procedures for integration: When several people are working on
code simultaneously and constantly making changes, each of
them need to compile and test their code together with
everyone else’s code – but they want to see “good” versions of
other people’s code that does not have compile errors!
Facilitating this requires careful setup of a hierarchy of
workspaces and defining build procedures for the team.
- Identifying
and selecting tools and other resources to support
development: This includes both selecting the basic
development tools such as compilers, as well as identifying
tools that simplify development such as GUI builders and test
generators.
- Tools
expertise: One of the biggest hurdles typically faced in
projects is hassles with the development tools: something goes
wrong and all hell breaks loose until someone who understands
the tools well can fix things. Time and energy spent in
learning how to use the tools properly saves large amounts of
effort later on, and at least one person on the team needs to
develop expertise on each tool.
Capabilities needed: Familiarity with
tools / willingness to
invest large amounts of time in learning them well. An
understanding of the
challenges of concurrent development, and the concepts
underlying configuration
management. An interest in “finding easier ways to get things
done”. A
“support mentality” – enthusiasm to help other people to work
more effectively.