Assume you are a project manager and your job is to develop an application which is similar to what you have developed in past, only larger and complex.
The customer has documented the requirements clearly.
First of all, the question statement states that I have already done a similar project before. So, I would choose the same team structure as before.
Before choosing the team, I need to:
since this project is more complex, so I need to define its critical path, then define the broad goals of this project.
carefully create the project proposal that will be presented to the potential team members preparing and motivating them for the project.
I then need to recruit the team members, and assign them to the project. following this steps:
I will start reaching out to the team members of my old project, since they are already dealt with a similar set of requirements and problems.
since the project is more complex, I will need to hire more team members, at this stage rather than add more people later.
Adding more people in the middle of the project will cause a lot of problems, and will be very costly, since the team members will need to be trained and brought up to speed.
While carefully reviewing the requirements, I will need to identify the risks and issues that might arise during the project; I need to allocate the right amount of people to deal with these issues.
The next step is to prepare a schedule, putting in mind the number of people hired and the requirements/risks/issues that have been identified in earlier steps.
I would choose a agile team structure, as follows:
team members are self-organizing and self-managing.
Updates are given to/from the team members on a weekly basis.
the team members are given the freedom to choose the tasks they want to work on.
schedule meetings with stakeholders (probably every two weeks) to discuss the progress of the project, and receive feedback.
During development, I would present beta releases to stakeholders and selected group of users to get feedback and suggestions.
The schedule should be flexible, and the team members should be able to change the tasks they are working on, if they feel that they are not able to complete the task in time.
The schedule and the tasks might be adjusted upon receiving feedback from the stakeholders or users.
In case of intense competition, I would would :
call up the stakeholders and review the critical path of the project.
then maybe creates a new critical path that will ensure that my project will stand out in competition, and be available in the market as early as possible.
Any improvements to the project can be scheduled after the first release, in order to reserve our share in the market.
In case of tight deadlines, I would:
avoid adding more people to the team.
focus on optimizing the existing team, and reducing the time taken to complete the tasks.
make cuts to the non-critical tasks, and focus on the critical tasks.
negotiate with the stakeholders to extend the deadline, if possible.