Home > Learning, Student Projects > Three Rules for Supervising Student Programming Projects

Three Rules for Supervising Student Programming Projects

August 25th, 2010

Jen Dodd recently posted an article titled “3 rules for running events“, plus one metarule that I particularly appreciated: “Stop deluding yourself.” In the same spirit, I’d like to offer up three rules for running student programming projects. To set the stage, here’s the number of student programming projects I’ve organized, supervised, or otherwise been guilty of since David Wallace first asked me to look after a couple of summer interns in Edinburgh half a lifetime ago:

Students Supervised per Year

Year 1987 1988 1989 1990 1991 2002 2003 2004 2005 2006 2007 2008 2009 2010
Number 2 4 12 14 26 7 13 35 42 34 38 78 110 49

Yes, the numbers for 2008 and 2009 are crazy, but those are the years I ran consulting projects at the University of Toronto and started UCOSP. If you only count students I directly supervised, the numbers for 2008-09 drop back down to the high thirties—say, a dozen or so per term, three terms a year.

So what have I learned in those 23 years?

Rule 1: It’s Not Thirteen Weeks, It’s Three

This was the hardest one for me to learn, and it’s almost always the hardest to get across to both students and their clients. University terms may be thirteen weeks long, but students are usually juggling five courses, and many have part-time jobs as well. That means they can only put eight hours a week into their project without sacrificing grades somewhere else. If you figure a full-time work week is 35 hours, that means students actually spend 8×13/35 = a bit less than three weeks working for you. In that time, they have to:

  • figure out what problem they’re actually going to solve,
  • learn some new technologies,
  • digest the existing code base,
  • get to know their teammates,
  • build something, and
  • jump through whatever hoops are required for getting a grade, like writing a final report or some documentation that no-one will ever read.

That’s an awful lot to squeeze into three weeks: very few open source projects expect their GSoC students to start checking things in after three weeks of full-time work, but students in school are expected to be done in that time. Prof. Karen Reid says that she usually divides the term into three pieces:

I find that I spend the first 3 weeks working hard to get the students up to speed and essentially demanding that they get something real done in the first 3 weeks. In other words, my students are more successful if they push hard at the beginning. After that, they usually have a good idea of what they need to do for the remainder of the term and I can kind of let them set the pace. Then I spend the last 3 weeks defining what it means to be done.

There’s another catch lurking in here too. The iron triangle of project management is scope, schedule, and resources. In a student project, both the schedule and resources are fixed (13 weeks and N students respectively), so the only thing that can give is scope. There are two ways to reduce it: lower quality, or fewer features. Lowering quality is self-defeating—the students you want in a project course are the ones who take pride in their work and care about their grades (which aren’t necessarily the same thing), and they’re not going to like being told that the only way to pass a course is to produce crap.

That leaves the number and scope of features as the only free variable. Problem is, neither students nor clients are going to be excited about fixing a couple of minor bugs or adding one small new feature. If you want to get people on board, you have to aim higher, and be willing and able to reduce scope as the term goes on without making anyone feel like the project has failed—which brings us neatly to our second rule.

Rule 2: It’s Not About Technology

It really isn’t. When I ask students I’ve supervised in the past what they learned in their project, they never mention technology—never. They might have learned Ruby on Rails, or CUDA, or touch-screen interface design, or database performance optimization, but that’s not what they remember afterward. What sticks is how to run a project: how to run a progress meeting, review someone else’s code, manage their time, present their work in five minutes or less, and negotiate scope with a client.

I’ve tried teaching these things in regular software engineering classes, but it has never worked. (This is one of the reasons I have so little use for standard undergrad software engineering textbooks: you can talk about riding bicycles all you want, but the only way to learn how to do it is to do it.) On the upside, once I students understand that I’m trying to teach them process, rather than technology, the problems I mentioned in the previous section are greatly reduced: cutting the set of features we’re going to deliver, for example, becomes an exercise in scope negotiation rather than a failure on the students’ part.

So what goes into a rational student-oriented development process?

  1. A weekly status meeting (face-to-face if possible, online if not). Whoever is running it (me for the first few, one student in turn thereafter) is responsible for drawing up an agenda and posting a summary afterward. They’re also responsible for checking that the previous week’s to-do items were completed, and for keeping the meeting on track (politely, but firmly). The first meeting each term usually runs 90 minutes or so; by the end of term, we can do them in 45 minutes or less.
  2. Version control, ticketing, a blog, an archived mailing list, an IRC channel, and (most recently) code review—in short, the same infrastructure you’d use for a small open source project. You’ll note that “wiki” isn’t on the list: we’ve set them up in the past, but no one has ever made much use of them. You’ll also note that five of these six items are about communication—all six, actually, if you think of version control as a way to share files.
  3. Demos and presentations. I emphasize this less when project teams are distributed across several universities, but if they’re collocated, I expect every team to present or demo weekly or every couple of weeks. I usually don’t give grades for each presentation or demo except to cure procrastination.

And that’s about it. On some projects, I’ll ask students to draw up a plan for the term at the end of their second or third week (i.e., once they’ve learned something about the problem—if they have to do it at the start of term, waterfall-style, all they can do is write some science fiction and hope I won’t hold them to it). On others, there’s some formality around handing off their code to their client, such as submitting it as a patch, doing a presentation at the client site, or showing off their work to all comers at a local pub.

Other people handle process differently, of course. Andrew Ross, of Ingres, says:

I tend not to have regular weekly meetings with my teams. Instead, we have meetings as needed to discuss things that can’t be covered acceptably in emails/IM’s/IRC/calls. We do the latter constantly. The more important underlying concept is keeping students from drifting away and losing contact.

Rule 3: Steady Beats Smart Every Time

I once had three students working on separate projects during the same summer term. Two had straight A’s; the third was struggling to maintain a low ‘B’ average, but he’s the only one I would have hired back, because he was the only one I could actually rely on. One of the ‘A’ students had spent his whole life acing exams, and didn’t know how to do anything else. He panicked when asked, “What do you think we should do next?” Literally—you could see his pulse race and his mouth dry out. The second had the same fatal flaw I had when I was twenty: he’d do the first three quarters of every job in record time, but getting the next 20% out of him was like pulling teeth, and the last 5% never got done all.

The third student, though, was as reliable as a grilled cheese sandwich. If he told me on Monday that something was going to be done on Friday, it was done on Friday; when I asked him, “Where are you?” he always gave me a straight answer: no “almost done”, no “just another couple of bugs” if he hadn’t actually started. It took me a couple of months to appreciate him, but once I did, I started looking for that same quality in every student I interviewed.

Of course, this isn’t to say that every student with low grades is a gem waiting to be uncovered, or that everyone with an ‘A’ average is unreliable. Far from it: grades are a fairly reliable indicator of ability and persistence, especially grades in courses that no one loves. But the correlation is a lot weaker than I, a former ‘A’ student, once believed.

Keep in mind that even the steadiest students will doubt themselves sometimes. Quoting Karen Reid again:

I find I spend a lot of time reassuring students who are climbing the learning curve. Having different levels of expectations for students depending on their background is something I have to explain to students used to the same evaluation standards.

And “steady beats smart” applies to supervisors as well as students. If you’re unreliable—if you miss meetings, promise to do things but don’t get around to them, or pretend to know more about technical matters than you actually do—your students will respond in kind. If you can’t or don’t commit at least 3-4 high-quality hours a week for each project you’re running, it would be better for everyone if you did something else. (This is, by the way, one of the many reasons I prefer team projects to individual ones: the number of hours required per project grows only slowly with the team size, at least up to half a dozen students, so you can reach more students without sacrificing everything else.)

And finally, a metarule:

Have Fun

Students won’t ever enjoy a project more than you do. After all, they have to do all the hard work, like tracking down bugs, while you get to do the fun stuff like argue over what it’s all supposed to do. And if you’re not having fun, they will quickly start to treat the project like just another course. It’s very hard to pull out of that downward spiral, so don’t get into it: no matter what happens, grit your teeth and have some fun. Go out for ice cream; borrow a projector and introduce them to Tron, WarGames, or Startup.com. They’ll remember that long after the course is over, too, and so will you.

Later: a recent study confirmed what most of us probably knew already: what makes people happiest (or saddest) are group events and achievements, not individual accomplishments.  Maybe that’s why students enjoy team projects, and come away appreciating most what they learned about teamwork rather than technology…

Learning, Student Projects

  1. August 25th, 2010 at 18:21 | #1

    Hi Greg – I was one of those interns in 1987 and 1988. Can’t remember much specific about what I learned, but I do remember I had fun, so you had obviously already sussed that rule back at the start :-)

  2. Pardis Beikzadeh
    August 25th, 2010 at 23:24 | #2

    Hmm so true! I wish I knew about rule #1 back when I was doing my own project.

    All the things you mention in rule #2 are exactly all I remember from your courses and I am very grateful for it! Yours was the only course that taught me how to stand on my feet, so to speak, in a real job.

    I wouldn’t change anything from your course. You even did the reassuring Karen mentions. You taught me to find my own strengths and work with them instead of moping over weaknesses.

  3. Matthew Basset
    August 25th, 2010 at 23:48 | #3

    Hi Greg – I really enjoyed reading your entry. I very much agree that its the process and not the technology that student need to learn. Learning how to run a project and building the habits required to do so are always harder than learning the technology. :)

  4. Aran
    August 26th, 2010 at 00:04 | #4

    A large delta in skills or effort between group members is more dangerous than low total skills or effort.

  5. Tom Plaskon
    August 26th, 2010 at 00:34 | #5

    I can definitely relate to #1. On the one hand, I can understand the logic of doing these types of projects in fourth year (you want mature, knowledgeable students). On the other hand, there are often even more demands on your time in fourth year. In my case I was in the process of interviewing for jobs post-graduation and starting a serious relationship (getting married next year).

    I found the most challenging part of the course to be getting enough of our client’s time to get proper requirements out of them, and that after the initial meeting communication with them was very slow. With such a tight time line this was a major stumbling block. If I could redo the course I would make sure that I picked a project had a very well defined initial pitch.

  6. August 26th, 2010 at 01:45 | #6

    1. Code reviews are important, they should be enforced early on, or they will never happen at all. This is not about the trust, or about the sensibility of the individual members of the team, this is about the code quality, especially when not all of the team members are familiar with the technology they are using to build the application. That prevents the need of rewriting code that “works” and replacing it with code that “works well” and looks sensible. This is especially important for the mature projects that are regularly extended by the students semester after semester.

    2. Setting realistic expectations. As students, we are really eager the first couple of weeks :) We are dreaming of building a mega-application that is capable of making coffee besides besides its regular features. It’s easier to estimate what you can deliver in the short period of time but the longer this period gets, the easier it is to fall behind. I think in my projects Greg did a great job of making sure that we bite what we can chew and that we make things happen gradually.

    3.
    >>A large delta in skills or effort between group members is more dangerous than low total skills or effort.

    I felt different about that one, actually. It’s not dangerous at all if there is a way to balance the extra skills and effort. One of the things that helped us were code reviews, feature freeze dates, and milestones that hold horses back when more active team members became too excited.

  7. Jitendra Gupta
    August 26th, 2010 at 04:02 | #7

    Hi Greg
    Totally agree with Rule 2 and 3. I don’t even remember what code I wrote in my course project however the good things that I took away from the course was how to manage the project, communication skills, presentation skills, how to work with stakeholders (technical and non-technical). In all my interviews after graduation, this course was the first thing I talked about and usually the interviewer were impressed with what we had done in such a short amount of time. Also, Rule 3 I see a lot at my work. There are a lot of people who are very smart and will work on projects and don’t finish it completely and once the deadline starts approaching, they panic and try doing things wrong way in order to just get things done.

  8. August 26th, 2010 at 06:29 | #8

    A large delta in skills could introduce some interesting group dynamics to consider though. In my experience, our group had new students of various skill levels, and other members who have worked on the project before. In the “3 weeks” timeframe, they were lightyears ahead. New students seemed to have been intimidated to make code reviews or feature suggestions, waiting for more experienced members to lead with more detailed reviews or insights.

  9. August 26th, 2010 at 15:24 | #9

    When I started the project course doing OLM, I had no idea what to expect. I was told it was easy to do well, and get those marks. Coming in as a student who tried to maintain high marks, I soon realized there was more to learn than that.

    I became passionate about actually learning, rather than walking away with the marks. I agree it was never about the technology, because learning TurboGears and writing nose tests was only the surface of what I learned. You can never truly appreciate technology in 13/3 weeks…

    But you can truly appreciate the other things you learn in depth. How to give a good demo, how to organize a team, how to work with 3 other people on the same piece of code. Time management. Taking pride in what you produce. The best part was I forgot about the marks, and really cared about the piece of software.

  10. Ali
    August 27th, 2010 at 10:00 | #10

    Have to agree with Rule #2. The parts I really remember are how to run projects and meetings, managing time and expectations and when to say ‘no’ to things (e.g. when dealing with run-away feature requests) and most importantly, that its OK to say ‘no’ sometimes.

    Also I imagine all the students come in with very high expectations and bringing them down to realistic, achievable goals is important too. And you seem to do a great job of that in the beginning of the course.

    The only thing I found surprising is that a blog works better than a wiki for documentation?

  11. acr
    August 27th, 2010 at 21:52 | #11

    There’s a lot that can still be learned from “failures”–be they in code, project goals, group dynamics, industry partnerships, presentations, etc. So don’t fret if you find yourself facing a lot of them. A “good” prof will know these things and not grade solely on the end product.

  12. Lenny Han
    August 28th, 2010 at 08:23 | #12

    To speak of reality, I’d like to add a comment: doing a student project is not about creating something that’s gona change the world, or coming up with an idea that’s worth a million. Having a couple of projects that you can talk about when you are at an interview, talk about how you worked with your team to analyze the problem and to solve it is really going to help you get a job. You can fill your resume with such a paragraph “I have the ability to work and cooperate in a team because: a) I worked on project A in xxxxyear with a team of x people, the problem we had to solve was… b) I worked on project B … ” etc. I think this is much more persuasive than “I have the ability to work and cooperate in a team because I promise I do”.

  13. yulia kotseruba
    August 29th, 2010 at 03:36 | #13

    I can relate to pretty much everything Greg said. After graduation I realized that UCOSP was pretty close to the real world experience. The only difference is that now I’m paid to do it and my teammates are in the same building.

  14. Nil Goyette
    August 30th, 2010 at 05:51 | #14

    This brings back some great memories.

    Rule 1) So true. It’s kinda sad that I had only ~3 weeks to work on Eclipse4Edu. It was my first open source contribution and I did what I could … but I find it sad that I could not do more. It’s especially sad to remember that I had to “write a final report AND some documentation that no-one will ever read” … I guess it’s part of the game. [...] The hardest part to start was, by far, learning the eclipse framework. As Karen Reid wrote, a hard push in the beginning would have helped much!

    Rule 2) Perfectly true. Of course, I have learned some parts of the Eclipse framework, but what I remember the most is how a team can easily fall apart. It’s especially easy when we are separated by ~650km, but even if all the team members are in the same room, they are useless without proper communication. I guess it’s better to learn that lesson at UCOSP than during a multi-millions project! :)

    Metarule) FUN! Thank you UCOSP! I’m not the brave type and UCOSP was a wonderful experience for me. I did learn about development and communication but I also learned about myself and my fears.

  15. Ally Hume
    August 30th, 2010 at 08:09 | #15

    As one of Greg’s 1991 students I’d recommend everybody to pay attention to his advise. That was a great experience and one of the most influential on my career. Thanks Greg.

  16. Igor Foox
    September 3rd, 2010 at 12:47 | #16

    Great post Greg!

    I agree with all your points Greg, and I think #3 and #1 work in concert. I also have the problem of doing things 80% and having trouble finishing things, and also definitely tend to procrastinate. The 13 deadline and lack of time were definitely an issue in the projects that I worked on with Greg and have taught me a lot. Although I can’t really say that I’ve solved these problems since, I do try :)

    Two more practical takeaways I had from my projects with Greg:

    1) It’s about the overall experience. I found that having a project (or two) like this was probably the most useful thing on my resume when looking for jobs as an almost-grad or recent-grad. I think these projects give you a maturity and understanding of the software process that just taking courses can’t give.

    2) It’s about the relationships. I think one of the important things I got out of working on these projects were relationships (with fellow students, with Greg, with other profs) that were very insightful, helpful and fun, both personally and professionally since. I’m grateful for the opportunity to meet such awesome people!

Comments are closed.