  * **Code Drafting**
    * In previous years we’d said “just follow the form of the code around you and you’ll be fine”
      * We now recognize a lot of bad patterns in our old code and we are working to eliminate them
    * Look at the code around yours and learn from its expression, but don’t necessarily follow it without thinking through the choices available to you
    * git branches are for making mistakes and trying out things. As long as it’s not on the master branch, go ahead and do whatever you like.
    * Plan on including running tests as active demonstrations that your code works.
  * **Code Review**
    * Receiving end
      * Be clear about whether or not you think your code is ready for integration.
        * It's okay to push commits that say "FOR REVIEW ONLY" when you're asking for an opinion.
      * Who’s been reading the code review discussions on melange-soc-commits@?
        * You all should be.
      * Make sure you’ve read the [Style Guide](PythonStyleGuide.md) and that your code conforms to it
      * Ask for review when you're satisfied with your own work
      * Having your work critiqued can be stressful but it shouldn't diminish your long-term quality of life
      * Be prepared to answer questions about why you made design and implementation decisions
    * Giving end
      * Please jump onto any code reviews. Ask questions about what doesn’t seem clear.
        * Because Melange is a project that has contributors of all skill levels continuously joining and leaving, it is important that all Melange code be easily approachable by everyone.
  * **Productivity**
    * Don’t go dark.
      * It’s the single biggest indicator of students succeeding or failing.
      * There’s a capability dynamic about which I want everyone to be very clear:
        * The mentors have a lot more knowledge, but very little time (because we all have other things that we’re doing)
        * The students have a lot more time (because Summer Of Code is a forty-hours-per-week full-time commitment) but very little knowledge.
        * It’s not symmetric. It’s not supposed to be.
        * The students’ job is to produce as much as possible. The mentors’ job is to refine that production.
        * Just like an airplane wing cannot provide lift unless the aircraft is moving forward through the air, so our mentors cannot provide guidance without student work driving the conversation forward.
  * **Mailing lists**
    * Everyone should be subscribed to, and reading every message on, every list: melange-soc, melange-soc-dev, melange-soc-issues, melange-soc-commits, and melange-soc-build. The traffic is reasonably light.
  * **Meetings**
    * Our current meeting time is weekly on [Tuesdays at 4:30 p.m. UTC](http://www.timeanddate.com/worldclock/converted.html?iso=20140502T1630&p1=0&p2=505&p3=2255). If that time doesn’t work for you, let us know and we’ll move it.
    * Our current meeting technology is Google Hangouts. Try to have a working camera, microphone, and speakers/earphones.
    * Make arrangements to maintain some persistent textual interaction with your mentor - chat, IRC, a daily email thread, or something like that.
  * **Evaluation**
    * The only chisled-in-stone rule here is that your work at both midterm and final will be judged in terms of what has been included in the Melange master branch, not what might be half-completed and buggy and still-in-progress elsewhere.