Managing Student Software Projects Eddie Burris burrise@umkc.edu University of Missouri—Kansas City Software—being a one-off product—is almost always developed as a project. Consequently, project work is an integral part of the undergraduate student experience. While there is no clear dividing line between a large assignment and a project, work generally becomes a project when the scope of the work is large enough to require a layer of organization and planning. Project work may be included in any class but it is fundamental to the senior-level capstone class that is a part of the degree requirements of most undergraduate computer science degree programs [SE2004]. A capstone course provides the opportunity for students to apply what they have learned in previous courses to the definition, design, construction, verification and validation of a significant realworld software system. Projects expose students to the practical problems of software development, but the very nature of projects that provide dynamic and unscripted learning opportunities for students also creates additional challenges for instructors. Instructors responsible for running a project class might be tempted to take the easy way out and simply assign a project and let the students figure it out for themselves. This sink or swim approach requires little effort and students rarely blame the instructor for any failings. After all, the instructor didn’t drown the students the water did. If anything the instructor deserves gratitude for courageously standing on the bank of the water shouting helpful advice like “Swim! Swim!” Students are ultimately responsible for their success or failure but instructors supervising student projects have a special responsibility to create an environment that maximizes the opportunities for success. Running a project class requires a different approach than what is used on ordinary teach-and-test type classes. Just as there is no one best way to run a project, there is no one best way to supervise those who are performing the project. There is no prescriptive formula that will work in all situations but the following list highlights the 10 most important issues instructors supervising student projects will need to address. Issue 1: Should students work on real-world community projects or is it better to give them artificial problems? Comment: Working on real-world projects with real customers and users provides for a richer learning experience but may also be more than what students are prepared to handle. There is also more pressure to succeed when doing a community project. Even when external customers aren’t paying for a system they are investing their time and expect a product in return. Poor performance on a community project can tarnish a school’s image. Real projects have messy details that aren’t easily duplicated in fake projects (conflicting constraints, uneven customer involvement, ambiguity, changing requirements, etc). Real projects are generally more motivating for students but can also be more frustrating when things don’t go well. Targeted learning objectives are easier to meet with instructor-defined problems. Issue 2: It’s difficult to complete a sizable project in one term, but keeping a team together across two terms presents its own challenges. Comment: The only way a two-term project is feasible is when the courses are part of the degree requirements. It’s nearly impossible to maintain a stable team across two courses that are electives. Issue 3: It’s impossible to fully cover the software development life cycle in one term. For projects intended to be completed during a single term, what topics should be given priority? Alternately, when a project class spans two terms, how do you divide the work between the two terms and manage disruptions to team composition? Comment: Single-term projects generally choose to focus on either the technical or non-technical aspects of performing a project. Multi-term projects typically focus on the early phases of the software life cycle during the first term, and later phases during the second. Issue 4: No matter how the coursework is divided some items will be left for students to learn on their own. What should students be expected to learn on their own? Comment: In general, class learning objectives and the unique characteristics of individual projects along with the background and experience of the instructor will dictate what topics are emphasized in class. Here is an abbreviated list of topics for consideration: Project management topics: organizing, estimation, planning, tracking, measurement, control, configuration management, risk management, etc. Software development topics: requirements gathering, requirements analysis, design, programming, testing, etc. Software development practices: design patterns, refactoring, test driven development, etc. Project tools: modeling and development environments, project planning, source code control, defect tracking, etc. Issue 5: Team dynamics and other soft skills are important for project success but not all computer science instructors are comfortable or qualified to teach these soft skills. Comment: Soft skills can be taught on an as needed basis or in anticipation of problems. The comment to issue #4 may also apply here as well. Issue 6: Should students be allowed to work alone or required to work in teams? Comment: Working in teams gives the students the opportunity to experience team dynamics, organization, coordination and negotiation but leaves less time for focus on more technical challenges. Issue 7: When students are working in teams how do you accurately assess individual performance and structure the assessment in a way that encourages teamwork and discourages social loafing? Comment: One way of rewarding both group and individual effort is to assign a value to the team result and then use peer review to decide what percentage of this value is owed to each student. Issue 8: Should instructors enforce process on student projects and if so, what kind of process and at what level of rigor and formality? Should students be allowed to define their own process? Comment: When defining a process it can be difficult to find the right balance between discipline and agility. Also, students must be sold on the idea of following a process. Most students haven’t experienced a runaway project so might not fully appreciate the value of following a defined process. Potential processes include: IEEE-STD-12207, PSP, XP, Rational, etc. Issue 9: When grading deliverables what portion of the project grade should be allocated to intermediate deliverables (requirements, design, test plan, etc.) vs. the final result? Comment: Putting more weight on upfront work helps insure a successful result but can also send the message that paperwork is more important than working software and a satisfied customer. Issue 10: Students often need dedicated hardware and software resources to complete a project. Those responsible for campus computers don’t like to give students admin authority on public computers. This is especially true with equipment connected to the Internet. The IS departments at most universities have a mandate to protect the computing infrastructure which is sometimes at odds with the teaching mission of the university. Comment: Special isolated machines may be set up for students to use. Also, several online ISP’s offer hosting services at reasonable prices.