You also have to specify your project organization in your project plan, which specifies the roles and also responsibilities and also the number of people that you need in your team for your project. To increase the likelihood of project success, it's a good idea to include a team member who have experience with a similar system, which is a system that is similar to the one that you're going to build for your project. The team organization should be modular to limit communication and also complexity of interaction, because if you have too many people in your team, then communication is going to be complicated. You have to assign clear responsibilities to each member in your team, and then form teams to have responsibility for the design and implementation of one or more parts of the system. Again, we're talking about divide and conquer. We try to junk the largest software system into smaller pieces, and then each team should be responsible for one or more smaller pieces of the system. You also have to identify a person in charge for each part and also the system as a whole, because if anything goes wrong in your project, you can always talk to the person in charge. The key to success is achieving the right level of communication in your project. In your project plan, you have to also specify the task, and also activities within your project. The definition of a task is a well-defined work assignment for a role, and the definition for activity is a group of related task. Some of the projects they are planned different. That means the task, activities, and also their schedule are well-planned in details at the very beginning of the project. Some of the projects, they are agile, so that means the tasks, activities, and also their schedule are incrementally planned as the project progresses. Which approach to use is highly project-dependent, and we're going to cover different software development processes in the next lecture. Some of them are plan-driven and some of them are agile. Also in the project plan, we have to come up with a project schedule, which specifies all the tasks within the project and also the ordering of the task, and also the time estimate for each task. Also resource assigning, milestones, and also deliverables within the project. Very often, we have to keep track three levels of schedule within a project. One is what we call the master schedule, which is going to give you an overview of the entire project for management and also client communication, and also macro-schedule for day-to-day project management, and also micro-schedule for team management. In this course, we're going to cover burndown chart and also gain chart for managing schedules. Also, you have to come up with all the estimates at different unit of the project in your project plan. For example, the size of the project, the effort that you need to spend on the project, duration, productivity, and also development cost, etc. Estimating is based on experience, historical data, or even using mathematical models. Trust me on that, in order to get the estimates to be correct or close to correct, somehow you need some people with experience on a similar project to tell you what are the possible numbers that you can use in your project. As mentioned before, estimating carry inherent risk, and the risk can be reduced by establishing the project scope in advance at the very beginning of the project, so you know exactly what you have to do and what you don't have to do at the very beginning of the project. Also, use historical data from past projects. Let's say from a similar project, you know that you need this number of lines of code and this number of people for your project, then you can come up with estimates using a past project. Also, divide and conquer. Try to break your large software system into smaller pieces, and then estimate on the smaller pieces and then sum them up. Another important P in a software project is process. The definition of process is the complete set of activities or sometimes called workflows, and also their sequencing that transforms the user requirements into a software product. A process prescribe all the major activities within your project, and it has a set of guiding principles that explain the goals of each activity. A process is going to use some resources and it may be composed of some processes. Each process activity has an entry and also exit criteria so that we know when the activity begins and when it ends. The process activities are organized in sequence so that we can perform one after the other. Constraints and also controls they may apply to a process activity. We may spend some time on a particular activity or spend some people to work on a particular activity within the project. Why process is important because it's going to help easy project management. By knowing exactly what are the activities that you have to perform in your project, it's going to help you with the management of your project. Also allow division of labor, because you know exactly what you have to do in your project, then you can divide those activities to different people in your team, and also promote teamwork, individual work, and also communication. It allows expertise to reuse and reassignment. That means let's say we use this process in this project and is successful, then we can apply the same process in another similar project. Also easy training and promotes productivity and also better development. The process is going to help imposes consistency and also structure on the software development activities. This is what I want to cover in this lecture. In the next lecture, I will cover different software development processes. Notice that some of the processes they are plan-driven, and some of them are actually agile, and we will cover them in the next lecture.