Mentoring {#mentors}

Students working on large software development projects will need advice and guidance, as they will never have been involved on a software development project of this size. It's not feasible for the course instructor to be at all the group meetings -- for one reason, many of them are likely to happen at the same time, but in different locations. Furthermore, students tend to not speak up when the course instructor is in the room. This gave rise to the idea of a mentor: a local computer scientist, software engineer, faculty member, graduate student, etc. with some years of experience with developing software. One mentor would be assigned to each group of six students; the projects that will be worked on are described on the main SLP page.

The mentorship idea has a number of advantages. It allows the students to benefit from the years of experience from the mentor. It allows the students to get to know somebody in the software business, and may even allow the mentor to know students who may soon be looking for a job. But the primary advantage is that it allows professional software developers to help out a local nonprofit while using their expertise.

 

A mentor's purpose {#purpose}

The purpose of a mentor is to help the students by imparting his/her experience, and helping to advise the students throughout the project. Where does one start? How to start breaking down the problem? These are things that the mentors will have seen with his/her previous projects, and things that the students will never have seen.

In particular, a mentor is NOT to do any of the coding for the project. If a software challenge is too difficult for the students, then it's too much for this project. The students are told this on day one. The challenge in these projects is not the difficulty or complexity of the software being developed; instead it is the project management, customer interactions, managing the system complexity, etc.

Typically what the students need help with is a number of aspects, listed below. While these are all gone over in lecture, it is hard for anybody to really understand them unless they are experienced first-hand.

  • Framing of the problem: getting the requirements from the customer, preparing prototypes, validating requirements, etc.
  • A sense of scope: are these requirement changes too much? Are the requirements well beyond what could reasonably be completed? Have they bitten off more than they can chew? Can this given set of tasks be completed in one iteration?
  • Problem solving: this is not software coding, but instead brainstorming with the students about how best to solve some problem. Because this is not code-specific, it will be at a higher level: perhaps a system redesign; perhaps a design pattern; perhaps a database schema tweak; etc.
  • Anything else: this list is not meant to be exhaustive! A mentor can help with anything relating to the project (other than coding, of course). This list is just meant to give some ideas, and things that students have historically needed the most help with.

A mentor is part of the team, in addition to the six students and the customer (these projects use the customer team member practice from Extreme Programming). While the mentor has a very different role (offering of advise and no programming), the expectation is that s/he will be a full fledged member of the team.

 

Mentor duties {#duties}

The primary duty of a mentor -- and likely the most time-consuming -- is to attend the group meetings with the customer (two per month, about an hour each), and generally keep up with the progress of the project. A mentor's job is to help advise the students, not to develop the software. A mentor is not meant to be a replacement or a surrogate for the course instructor -- s/he is somebody in an advisory role who has a lot of knowledge and experience in software development, and is interested in helping out with this type of project.

The responsibilities of the mentor would be as follows. The mentorship idea is new to all of us, so these are all up for debate.

  • Attending the customer meetings (every two weeks for one hour).
  • Advising the students with the aspects discussed in the mentor purpose section, above. This includes: framing of the problem, scope, and problem solving, etc.
  • Helping to act as a liaison between the students and the customer. This is remarkably similar to a translator: many students will not have that much experience discussing software development topics with customers who may not have much computer knowledge. And customers may not have much experience explaining their requirements and concerns to software developers. When misunderstandings occur, a mentor -- being neither a student nor the customer -- can help to resolve it.
  • Keeping the course instructor up to date with how the development process is proceeding. Much of the information about how things are going will come from the students directly, but periodically knowing the thoughts and perceptions of the mentors can only help. The course instructor sends an e-mail to each mentor at the end of the week with a customer meeting asking how things went; a reply to that e-mail is sufficient to keep the course instructor updated. This e-mail prompt is meant to make it easier on the mentors, not to be nagging.
  • Occasional meetings with the course instructor: 2 or 3 per year. I like to have a kick-off meeting with the mentors in the early fall, one in the early spring, and one after the semester ends.

If a mentor is interested, s/he can give a guest lecture on a relevant topic of his/her choice. This is certainly not required, but some mentors have found it enjoyable to do.

 

Legal issues {#legal}

Formally, a mentor will be a long-term volunteer for the University of Virginia. UVa's policy on volunteers is here, and the page on volunteers is here. Volunteers will have to complete UVa's Documentation on University Volunteers form. This form is mandated by the University.

 

Sign me up! {#signmeup}

Interested in being a mentor? Do you have experience in managing software development projects? And want to help the community using your computer skills?

Wonderful! Please email me (aaron (at) virginia (dot) edu) to inquire further.