Roles and Responsibilities
It's important to know that on a typcial project, people will be in multiple roles and that roles can vary from project to project. This document is meant to be a guideline.
Client Relationship Manager
Is typically the business development person who brought in the client. Responsiblities include maintaining a relationship with the client for this and other potential projects. Can be used as a source of information on what was agreed to with the client. Is not a resource to be used on the the project or a source of requirements. Is responsible for rates and contracts.
Is handed the project by the Client Relationship Manager. Chief responsibility is to ensure the overall project is successful. Success is generally considered delivering the work as it was estimated within the budget and the client is happy and would consider us for future work.
Is responsible for managerial and other non-development tasks such as setting up and recording meetings, making sure work items align with the estimate, ensuring estimates are not being exceeded, reporting on project status, organizing, etc.
Is responsible for making technical decisions, setting technical direction, ensuring that code is reviewed, enforcing coding and other standards, developing coding patterns, creating the project skeleton, ensuring that automated builds and deployments work as expected, talking through upcoming tasks and ensuring task estimates are reasonable, suggesting approaches to tasks, providing context for tasks, alerting the Project Owner when it appears estimates will be exceeded.
Is responsible for entering the Labor Forecast into DevOps as work items and working with the client to define specific development tasks from more general tasks. The BA determines business needs (which is defined as the WHAT, not the HOW of what the system does) and workflows to create concrete tasks that a developer can clearly understand and implement. The BA is expected to work with the team to flesh out ways to fulfill the business needs. This may involve altering existing workflows, re-examining the relative need for historical tasks and/or re-imagining how needs are addressed in the system.
Often the Project Manager. Is responsible for excercising the software that's developed to ensure that it meets the business needs as we understand them, is intuitive to use and do not cause obvious problems, crashes or poor user experience. While we rely on the client to test all of the ins-and-outs of the system as it pertains to their business, internal testing should suss out obvious deficiencies not caught by the developer.
Is responsible for reviewing tasks, understanding the tasks to the level requried to implement them, and making reasonable estimates for the tasks (done as a group). Developers are responsible for completing the tasks within the agreed upon estimate and, if at any time the developer realizes that a task will go over the estimated time, the developer will stop work on the task immediately, and bring it to the attention of the project manager for discussion and resolution.
Everyone is responsible for delivering the system as it was estimated on time and within estimates. If any team member has concerns about success, those concerns should be brought immediately to the Project Manager and Project Owner.