# CodeDay Labs Tags: #oss #education [[codeday (organization)]]'s internship-style program at scale, matching students with real-world projects and mentors from leading tech companies. There are two variants of this format: ## Format In a nutshell, students: - are matched with in a team of 2-3 students + 1 industry mentor + 1 project (see "Projects" below) - complete one week of onboarding assignments - work with their teammates to complete the project (with high-level guidance from an industry mentor, and day-to-day guidance from CodeDay TAs) There are two versions: ### Init The "beginner version", helping CS undergrads make their first open-source contribution. Students are matched to an extremely simple open-source issue (such as fixing a failing test, improving an error message, adding translations to a file, etc), and complete a one-week onboarding introducing skills in the [[core software engineering process]]. For the following three weeks, students have 1 team meeting and 1 mentor meeting each week to make progress on the PR, with guided agendas. Init has the following objectives: - help students become comfortable outside of the step-by-step guidance they're used to in schools - teach students the [[core software engineering process]] - achieve their first real-world contribution, and become more confident (and thus apply for more jobs, see [[social cognitive career theory (scct)]]) - gain something valuable for their resume. Init is 4 weeks. ### Labs The "advanced version", with the goal of replicating an internship experience for students who are already comfortable working independently, but are unable to achieve an internship for one reason or another. Students in Labs also get access to daily tech talks and career panels. Labs is 6-12 weeks. ### Timeline Overview **Week 1:** ```mermaid gantt dateFormat YYYY-MM-DD axisFormat %a todayMarker off section Init Software Development Process :init_general, 2018-01-01, 4d Project-Specific :after init_general, 3d section Labs Kickoff :labs_kickoff, 2018-01-01, 1d Project-Specific :labs_general, after labs_kickoff, 6d ``` **Week 2...(n-1):** ```mermaid gantt dateFormat YYYY-MM-DD axisFormat %a todayMarker off section Init Project Work :init_general1, 2018-01-01, 47h Group Meeting :init_gm1, after init_general1, 1h Project Work :init_general2, after init_gm1, 47h Mentor Meeting :init_mm1, after init_general2, 1h Project Work :init_general3, after init_mm1, 20h section Labs Project Work :labs_general1, 2018-01-01, 6h Mentor Meeting :labs_mm1, after labs_general1, 1h Project Work :labs_general2, after labs_mm1, 41h Group Meeting :labs_gm1, after labs_general2, 1h Project Work :labs_general3, after labs_gm1, 41h Mentor Meeting :labs_mm2, after labs_general3, 1h Project Work :labs_general4, after labs_mm2, 24h ``` **Final Week**: ```mermaid gantt dateFormat YYYY-MM-DD axisFormat %a todayMarker off section Init Project Work :init_general1, 2018-01-01, 47h Group Meeting :init_gm1, after init_general1, 1h Finish PR :init_general2, after init_gm1, 47h Mentor Code Review/Debrief :init_mm1, after init_general2, 1h Update Resume :init_general3, after init_mm2, 20h section Labs Project Work :labs_general1, 2018-01-01, 6h Mentor Meeting :labs_mm1, after labs_general1, 1h Presentation Work :labs_general2, after labs_mm1, 41h Group Meeting :labs_gm1, after labs_general2, 1h Presentation Recording :labs_general3, after labs_gm1, 41h Mentor Debrief :labs_mm2, after labs_general3, 1h Update Resume :labs_general4, after labs_mm2, 24h ``` ## Org Chart † Contractor/Part Time ‡ Volunteer ```mermaid %%{init: { "flowchart": { "curve": "linear" } } }%% flowchart TD ed[CEO] head[VP, Programs & Engineering] pm[Program Manager] edu[Education Lead] oss[Open-Source Partnerships Lead] subgraph _mm [5-10 Mentor Managers] mm1["Mentor Manager<sup>†</sup>"] mm2["Mentor Manager<sup>†</sup>"] subgraph mm1_t[5-20 Mentors/ea] mm1_m1(["Mentor<sup>‡</sup>"]) mm1_m1 --- mm1_m1_s1[Student] mm1_m1 --- mm1_m1_s2[Student] mm1_m2(["Mentor<sup>‡</sup>"]) end mm1 --- mm1_m1 mm1 --- mm1_m2 end subgraph _ta [3-5 TAs] ta1["TA<sup>†</sup>"] ta2["TA<sup>†</sup>"] end subgraph _oss [10-20 Partners] oss1(["Project<sup>‡</sup>"]) oss2(["Project<sup>‡</sup>"]) end ed --- head ed --- edu head --- pm pm --- mm1 pm --- mm2 pm --- oss edu --- ta1 edu --- ta2 oss --- oss1 oss --- oss2 ``` - **Program Manager:** Lead for this program. - **Education Lead:** Maintains onboarding assignment database, recruits speakers, and manages TAs. - **Open-Source Partnership Lead:** Develop partnerships with open-source maintainers and cultivate projects for students. - **Mentor Manager:** Contractors who handle recruiting and onboarding [^labs-mentor-onboarding] between 5-20 mentors (allowing for 15-60 students). - **TAs:** 3-5 TAs (contractors) provide on-demand debugging help during the program. ## Mentors Mentors are software developers at leading technology companies, who are recruited by Mentor Managers. See the following CodeDay resources: - [Recruiting](https://codeday.notion.site/Mentor-Recruiting-8bc05026053540809b948d2b25ffb7a5) - [Training](https://codeday.notion.site/Mentor-Training-379764d4bc1e46bc9fbdeb1bc0a949ae) - [Requirements/Apply](https://labs.codeday.org/mentor) ## Projects Projects are one of two options: 1. **Existing open-source project:** Most of the projects fit into this category. A mentor manager finds an open-source project which matches with their mentor interest from the database of partner projects/issues. For more about how these projects are selected, see [[oss (open-source software)#What makes a good project for students?]] For more on selecting specific issues see [[oss (open-source software)#What makes a good issue?]] 2. **Non-profit proposes a project:** Rare, see e.g. [ForestGEO](https://github.com/ForestGeoHack/ForestGEO). 3. **Mentor proposes a project:** Most of the early years of the program relied on mentor-proposed projects to create a new open-source system to replace proprietary software. These seem to make for better presentations at the end, and may have better student outcomes, but don't look as good on a resume. See [CodeDay Notion: How to Propose Your Project](https://codeday.notion.site/How-to-Propose-Your-Project-e5e2a6cb29c2413d8ec8b969f865db9c) Projects are categorized by which technologies and frameworks they use, which are used to assign [onboarding assignments](https://www.notion.so/codeday/Onboarding-Week-Assignments-23c35d0d6d264bb597944d8c9d97b3a5) ## "Industry Track" This is just a special edition of CodeDay Labs, specifically for high-skill graduating seniors, with a few extra touchpoints: - Projects will be related to a technology and vertical in use at a company. - Students have accelerated hiring pathway (see below) - Students present to company leadership at the end The industry track requires buy-in from engineering leadership (to recruit mentors) and HR (to review resumes). Without HR buy-in resumes have still been ignored. ## Results **Demographics:** 80% undergraduates, 97% had never completed an internship before, and only 19% of undergraduates were from an R1 school. 67% were underrepresented in technology: 51% were women or non-binary; and 31% were Black/Latinx/Native American. **Outcomes:** 12% more graduating seniors who completed the program found jobs within 6 months compared to average (total 69%), and 60% of rising seniors found internships, according to data from LinkedIn (so this is likely understated). Mentor evaluation of student skills (in [[core software engineering process]], time management, communication, and technical proficiency) improved by 30-40% throughout the course of the program. 83% of survey respondents reported the program improved their ability to work independently. Among high school students who participate, 83% major in Computer Science (27x the national average and 4x the number of students who take AP CS A) [^labs-mentor-onboarding]: Mentors optionally propose an idea for a project; during the onboarding call mentor managers are responsible for turning their ideas into a specific project proposal meeting certain criteria. ## Challenges - scalability - bus factor - students don't understand how to contextualize what they are learning - hard to evaluate how well an individual student did - communication with partners - TAs provide a lot of the value, but we don't have a way to find/create/train them