Varsity letter requirements
    As a preface, a student isn't required to do anything. That is, they can
    work on as much or as little as they want and show up when they please.
    With that said, one must earn their varsity letter. The following is
    a list of guidelines for students on the software subteam to follow.
    Meeting these guidelines signals to leadership that one has put in a
    varsity-level effort to learn what is being taught and deserves recognition
    for it.
    
      - Made a significant positive impact on the robot code base or other
      software project for the team
        
          - Rookie: needs to make enough contributions that we can
          feel confident we can tell them to implement something we typically
          do, and they can figure it out themselves.
- Veteran: should be able to implement something new and
          exciting themselves, but not necessarily in the best way because
          that's what mentors are for. Mentors use their experience to suggest
          alternative implmentations and teach students to consider the
          trade-offs in their design.
 
- Was involved in the design of the robot code's architecture
      (requirement gathering/synthesis, state machine design, application of
      control theory)
        
          - Veteran: can explain this year's robot code and defend
          their design decisions
 
- Veteran: has shown growth from the previous year
- Actively found ways to make meaningful contributions
- Basic knowledge
        
          - Is proficient in C++
          
- Can use version control effectively
- Exercises clean coding practices
          
- See our learning
          outcomes for more
          
 
- Can work productively with the other members
- Can provide meaningful feedback for other members' code
- Maturity
        
          - Handles design disagreements in a professional manner (contrast
          this with yelling at each other, which has happened before on the
          software team)
- Considers other people's opinions, viewpoints, and advice before
          making a decision
            
              - Evaluates ideas based on their merits rather than emotional
              attachment
 
- Treats mentors and other team members with respect
- Easy to work with
 
- Time commitment
        
          - Software strongly encourages working outside of build sessions,
          but that is not required
            
              - Be on Slack and engage in discussion
- Step up and take on tasks
- Follow through on tasks undertaken and assigned
 
 
Keep in mind not every software team member will have the opportunity to
    write a piece of production software from scratch. Maintenance
    programmers are important too. 
    The Ten Commandments of Egoless Programming provide a summary of what
    is expected in collaborative work environments (not just software
    engineering).