Welcome to Industry Experience 1!
Course Description
Industry Experience is a form of experiential learning that will let you apply your academic knowledge in a professional context. You will work to build software that meets the needs of a professional organization by completing either:
- An approved internship, or
- an open-source project
During your industry experience, you will work on tasks that meet the needs of your sponsoring organization. Whether you undertake an internship or open-source collaboration, your industry experience must include significant, substantial computer science.
For students contributing to an open-source project, you will submit daily stand-up updates and meet regularly with your technical mentor. At the end of the term, you must obtain written feedback from you organization supervisor. You will also submit a final report which describes the problem statement, approaches/methods used, deliverables, and skills you gained.
Learning Outcomes
By the end of the course, you will:
- Cultivate your professional network, and use your network to aid in job searching
- Apply academic knowledge and skills in new professional settings
- Demonstrate the ability to cope effectively with ambiguous and unfamiliar situations
- Develop interpersonal and professional skills to successfully transition to work
- Reflect on your personal skills, and identify opportunities for further development
- Demonstrate professional and ethical behavior, and ability to maintain accountability for your commitments
Enduring Understandings
By the end of this course and your subsequent internships and career experiences at Kibo, we hope you will agree with four key claims.
- Career success is a journey, not a single destination
- Knowing yourself is the beginning of career wisdom
- Your professional network will power future opportunities
- Experience is the best teacher
Instructors
- Ope Bukola, ope@kibo.school
- David Walter, david@kibo.school
Live Classes
There are no weekly live classes, except for two workshops listed below. The majority of synchronous time in this course will be spent at work during your internship.
You are expected to attend two workshops which will be held during the following dates/times:
- Kickoff Workshop: Wednesday, April 10, 4:30 PM - 6:00 PM GMT
- Mid-point Workshop: Wednesday, May 8, 4:30 PM - 6:00 PM GMT
Office Hours
Optional office hours will be held weekly. Office hours times will be posted in the course help channel in Discord.
Core Reading List
- Personal Brand Workbook (2015). PricewhaterhouseCoopers
- Northeastern University (2020). Job Search Guide
- Bolton, G. and Delderfield, R. (2018). Reflective practice: writing and professional development (5th edition). London: SAGE.
- Rollag, K. (2015) Succeed in New Situations. Harvard Business Review
Supplemental Reading List
- Yancy, G. B., Clarkson, C. P., Baxa, J. D., & Clarkson, R. N., (2003). Examples of good and bad interpersonal skills at work. Eye on Psi Chi, 7
- Rollag, K. (2015) What to Do When Youāre New. AMACOM
Live Classes
You are expected to attend two workshops which will take place during the following dates/times:
- Kickoff Workshop: Wednesday, April 10, 4:30 PM - 6:00 PM GMT
- Mid-point Workshop: Wednesday, May 8, 4:30 PM - 6:00 PM GMT
Video recordings and resources will be posted after each workshop. If you have technical difficulties or are occasionally unable to attend, please be sure to watch the recording.
Week | Topic | Video | Materials |
---|---|---|---|
1 | Kickoff Workshop | Class Recording | |
5 | Mid-point Workshop | Class Recording |
Assessment and Grading
This course requires you to work independently to achieve your goals. Your overall course grade will consist of:
- Daily Standup Updates & Team Meeting Attendance: 20%
- Technical Mentor Evaluation: 40%
- Final Project Report: 40%
We provide the details about how each of the above items will be assessed here, though you should also carefully review the corresponding materials in Weeks 1 (Daily Standups) and 10 (Mentor Evaluation and Final Report) of the course for the full details.
Assessments
Daily Standup Updates & Team Meetings
Standups
Daily standups are a critical component, reflecting a practice widely adopted in the tech industry to promote team alignment and facilitate efficient problem-solving. Conducted asynchronously via a Slack bot, these standups require students to provide updates on their well-being, accomplishments since the last update, objectives for the current day, and any obstacles they might be facing. The expectation is for students to engage consistently and promptly, offering clear, honest, and concise updates, while being open to feedback and collaboration with mentors and teammates.
Please carefully review the detailed lesson in Week 1 on Daily Standups.
Team Meetings
Weekly meetings with your team mentor are a valuable component of Industry Experience. These sessions, lasting between 30 to 60 minutes, will focus on project updates, challenges, feedback, and goal setting. To make the most of these meetings, you should prepare by reviewing your past week's work, identifying specific topics or questions, and setting goals for the upcoming week. Active participation, note-taking, and engaging with your mentor's advice are key during the meeting. Afterward, act on feedback and reflect on how to incorporate this into your work.
Please carefully review the detailed lesson in Week 1 on Team Meetings with Mentor.
Technical Mentor Evaluation
As you begin your Industry Experience, itās crucial to understand how your performance will be evaluated by your Technical Mentor, as this evaluation constitutes 40% of your final grade. Over the 10-week course, you're expected to contribute 30 hours of work per week to an open-source software project, working collaboratively and making meaningful contributions. Your mentor will assess your performance across several categories, which collectively paint a picture of your readiness for future roles in the industry.
Your mentor will evaluate you based on your technical skills, the quantity and quality of your code contributions, your initiative in taking on tasks and learning new skills, your communication effectiveness (especially in a remote work setting), and your professionalism, including attendance, promptness, and dependability. These aspects are critically analyzed with a rating scale ranging from New Grad Hire Level, indicating exceptional performance, to Below Intern Level, signaling that performance does not meet the basic expectations of an intern. Itās important for you to actively seek out responsibilities, deliver high-quality work, and maintain professional standards. Your ability to exceed in these areas can lead to a recommendation for future internships or full-time positions. Understanding these expectations early on will help guide your efforts and focus throughout the internship, ensuring you maximize this opportunity for growth and professional development.
Please carefully review the detailed information in Week 10 on the Mentor Evaluation.
Final Project
Completing a thorough final report is essential, accounting for 40% of your final grade. This report, which should be styled as a blog post, is your opportunity to reflect deeply on your 10-week journey, emphasizing not only the technical contributions you made to an open-source project but also your personal growth, challenges faced, and learnings. Itās crucial to begin working on this report early, as late submissions are not accepted.
Your report should include detailed technical descriptions of the project and issues you tackled, emphasizing the specific contributions and achievements you're most proud of. Reflect on the challenges encountered, discussing how they were overcome and what was learned in the process. Additionally, consider how the experience has expanded your technical skills and software knowledge, including any new programming concepts or tools you've engaged with.
The writing should be clear, concise, and focused on your personal journey. Remember, this report is an individual assignment meant to capture your thoughts and experience.
Please carefully review the detailed information in Week 10 on writing the Final Report.
Late Policy
In the Industry Experience Course, punctuality for daily standups and the final report submission is mandatory, reflecting professional reliability. Non-attendance to team meetings or an inability to adhere to your commitments will negatively impact the your grade. The technical mentor will evaluate students on their promptness in meetings and task completion, influencing the overall course assessment. Clear communication and commitment management are essential for success in this professional setting.
Getting Help
If you have any trouble understanding the concepts or are stuck on a problem, reach out for help!
Below are the different ways to get help in this class.
Discord Channel
The first place to go is always the course's help channel on Discord. Share your question there so that your Instructor and your peers can help as soon as we can. Peers should jump in and help answer questions (see the Getting and Giving Help sections for some guidelines).
Message your Instructor via Email
If your question doesn't get resolved within 24 hours on Discord, you can reach out to your instructors directly. Email is the preferred method for reaching out, and should include both instructors.
Office Hours
There will be weekly office hours with your Instructor and your TA. Please make use of them!
Tips on Asking Good Questions
Asking effective questions is a crucial skill for any computer science student. Here are some guidelines to help structure questions effectively:
-
Be Specific:
- Clearly state the problem or concept you're struggling with.
- Avoid vague or broad questions. The more specific you are, the easier it is for others to help.
-
Provide Context:
- Include relevant details about your environment, programming language, tools, and any error messages you're encountering.
- Explain what you're trying to achieve and any steps you've already taken to solve the problem.
-
Show Your Work:
- If your question involves code, provide a minimal, complete, verifiable, and reproducible example (a "MCVE") that demonstrates the issue.
- Highlight the specific lines or sections where you believe the problem lies.
-
Highlight Error Messages:
- If you're getting error messages, include them in your question. Understanding the error is often crucial to finding a solution.
-
Research First:
- Demonstrate that you've made an effort to solve the problem on your own. Share what you've found in your research and explain why it didn't fully solve your issue.
-
Use Clear Language:
- Clearly articulate your question. Avoid jargon or overly technical terms if you're unsure of their meaning.
- Proofread your question to ensure it's grammatically correct and easy to understand.
-
Be Patient and Respectful:
- Be patient while waiting for a response.
- Show gratitude when someone helps you, and be open to feedback.
-
Ask for Understanding, Not Just Solutions:
- Instead of just asking for the solution, try to understand the underlying concepts. This will help you learn and become more self-sufficient in problem-solving.
-
Provide Updates:
- If you make progress or find a solution on your own, share it with those who are helping you. It not only shows gratitude but also helps others who might have a similar issue.
Remember, effective communication is key to getting the help you need both in school and professionally. Following these guidelines will not only help you in receiving quality assistance but will also contribute to a positive and collaborative community experience.
Screenshots
Itās often helpful to include a screenshot with your question. Hereās how:
- Windows: press the Windows key + Print Screen key
- the screenshot will be saved to the Pictures > Screenshots folder
- alternatively: press the Windows key + Shift + S to open the snipping tool
- Mac: press the Command key + Shift key + 4
- it will save to your desktop, and show as a thumbnail
Academic Integrity
When you turn in any work that is graded, you are representing that the work is your own. Copying work from another student or from an online resource and submitting it is plagiarism. Using generative AI tools such as ChatGPT to help you understand concepts (i.e., as though it is your own personal tutor) is valuable. However, you should not submit work generated by these tools as though it is your own work. Remember, the activities we assign are your opportunity to prove to yourself (and to us) that you understand the concepts. Using these tools to generate answers to assignments may help you in the short-term, but not in the long-term.
As a reminder of Kibo's academic honesty and integrity policy: Any student found to be committing academic misconduct will be subject to disciplinary action including dismissal.
Disciplinary action may include:
- Failing the assignment
- Failing the course
- Dismissal from Kibo
For more information about what counts as plagiarism and tips for working with integrity, review the "What is Plagiarism?" Video and Slides.
The full Kibo policy on Academic Honesty and Integrity Policy is available here.
Introduction
Welcome to the Industry Experience 1! This term you will learn about the world of Open Source Software (OSS) and become an active contributor. By the end of the term, you should have a solid understanding of how to find, join, and contribute to open source projects, as well as how to develop your open source resume. But first, let's set the stage by discussing the prerequisites, objectives, and expectations for this course.
Prerequisites
Before diving into the world of open source, it's essential to have a basic understanding of programming concepts and some experience working with code. While we will provide examples and guidance, you'll get the most out of the material if you apply your prior technical knowledge.
Expectations
This week, we will focus on the logistics of getting started with your open source project and team. In the coming weeks, you will learn about being present as a professional, how to work effectively, and about a wide variety of OSS topics. It's essential to have realistic expectations about what you can achieve during the term:
-
Practice is crucial: Learning about open source is just the beginning; to truly develop your skills and become a proficient contributor, you'll need to practice consistently. Keep in mind that the more you contribute to open source projects, the more you'll learn and grow as a developer.
-
Patience is key: Becoming proficient in open source collaboration takes time and effort. Don't be discouraged if you encounter challenges along the way; remember that every contribution, no matter how small, is valuable and helps improve the project.
-
Engagement with the community: Open source is more than just code; it's about the people who collaborate and contribute to projects. Engage with the community by asking questions, sharing your knowledge, and supporting others. Building relationships with other contributors will enhance your open source experience and help you grow as a developer.
-
Continuous learning: Open source is a rapidly evolving field, with new projects, tools, and technologies emerging all the time. Stay curious and open to learning, and take advantage of resources like documentation, tutorials, and community forums to expand your knowledge and stay up-to-date with the latest developments.
-
Developing a growth mindset: Embrace the challenges and opportunities that come with open source collaboration. Adopt a growth mindset, which focuses on learning, improvement, and resilience. By viewing obstacles as opportunities for growth, you'll be better equipped to navigate the complex world of open source and achieve success in your contributions.
Let's get started!
What is Open Source?
Open source refers to a type of software whose source code is made available to the public, allowing anyone to view, use, modify, and distribute the code. This is in contrast to proprietary software, where the source code is kept secret and only the compiled program is distributed. The core principle behind open source is the idea of collaboration and the belief that sharing knowledge and resources leads to better, more reliable, and more innovative software.
Open source software is built on the premise that when many people work together, they can create something greater than the sum of its parts. Contributors to open source projects come from diverse backgrounds, and they bring a wide range of skills, experiences, and perspectives to the table. This diversity of thought and expertise leads to more robust, innovative, and reliable software.
Watch this short video to get an additional introduction to what Open Source software is.
It's valuable to have an idea of what open source software (OS) is, and how it differs from closed source or proprietary software, particularly since you'll be spending time throughout your Industry Experience working on OS software. However, you should also know that not all OS software is created equally. There is a myriad of open source software licenses, each with their own limitations. Many private companies allow the use of open source software (e.g., libraries), though they are selective of how the OS software must be licensed so they will adopt it. We will spend a bit more time exploring this in another module.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Why Open Source?
Let's delve into the many benefits of contributing to open source projects. By understanding the advantages of open source collaboration, you'll be better equipped to leverage the opportunities it presents and make the most of your open source journey.
Access to Knowledge
One of the key benefits of contributing to open source projects is the opportunity to access a wealth of knowledge and resources. As an open source contributor, you'll be able to:
-
Learn from real-world projects: Open source projects provide a unique opportunity to study and learn from real-world codebases. By examining how other developers have tackled complex problems, you can gain insights into best practices, design patterns, and cutting-edge techniques that you can apply to your own projects.
-
Access diverse perspectives: Open source projects attract contributors from all around the world, each bringing their own unique set of skills, experiences, and perspectives. By collaborating with others, you can broaden your understanding of different technologies, programming languages, and development methodologies.
-
Stay up-to-date with the latest trends: The open source community is often at the forefront of innovation, with new projects, tools, and technologies constantly emerging. By participating in open source projects, you can stay up-to-date with the latest developments in your field and learn about emerging trends and best practices.
-
Access high-quality resources: The open source community is known for its commitment to producing high-quality documentation, tutorials, and other educational resources. By tapping into this wealth of knowledge, you can deepen your understanding of various technologies and concepts, and continue to grow as a developer.
Access to Community
The open source community is a diverse, global network of developers, enthusiasts, and advocates who share a common passion for collaboration and knowledge sharing. By contributing to open source projects, you can:
-
Connect with like-minded individuals: Open source projects provide an opportunity to collaborate with others who share your interests and passions. By working together, you can form lasting connections and friendships that can enrich your personal and professional life.
-
Expand your network: The open source community is vast and interconnected, with countless projects, events, and forums where developers come together to collaborate and share knowledge. By participating in these activities, you can expand your professional network and connect with potential mentors, collaborators, and even employers.
-
Develop communication and collaboration skills: Working on open source projects often involves collaborating with others, either remotely or in person. This can help you develop essential communication and collaboration skills, such as providing constructive feedback, resolving conflicts, and working effectively in a team.
-
Give back to the community: Contributing to open source projects is a way to give back to the community that has provided you with valuable knowledge and resources. By sharing your skills and expertise, you can help support the continued growth and success of the open source movement.
Access to Skills
Contributing to open source projects can help you develop a wide range of technical and non-technical skills that are highly valued in the job market. As an open source contributor, you'll have the opportunity to:
-
Improve your programming skills: Working on real-world projects is an excellent way to improve your programming skills and deepen your understanding of various technologies and languages. By tackling challenging problems and learning from other contributors, you can refine your abilities and become a more proficient developer.
-
Gain experience with new technologies: Open source projects often involve cutting-edge technologies and tools that may not be used in your day-to-day work or studies. By contributing to these projects, you can gain hands-on experience with new technologies and broaden your skill set.
-
Build your portfolio: Contributing to open source projects allows you to create a public record of your work, showcasing your skills and expertise to potential employers. A strong portfolio of open source contributions can help you stand out in the job market and demonstrate your commitment to continuous learning and professional growth.
-
Develop problem-solving and critical thinking skills: Working on open source projects often involves tackling complex problems and making important decisions. By navigating these challenges, you can develop valuable problem-solving and critical thinking skills that can be applied to various aspects of your life and career.
-
Learn project management and organization: Contributing to open source projects can expose you to various aspects of project management and organization, such as setting priorities, managing deadlines, and coordinating with team members. These skills can be invaluable in both your personal and professional life, helping you become a more effective and organized individual.
-
Develop leadership and mentorship skills: As you gain experience in the open source community, you may find yourself in a position to mentor and guide new contributors. By taking on these leadership roles, you can develop essential skills, such as communication, empathy, and delegation, that can help you succeed in your career and personal life.
Additional Benefits
In addition to the above-mentioned benefits, contributing to open source projects can also provide several other advantages, such as:
-
Increased job opportunities: Many employers value open source experience and actively seek out candidates who have a proven track record of contributing to open source projects. By showcasing your open source contributions, you can increase your chances of landing your dream job or advancing your career.
-
Personal fulfillment: Contributing to open source projects can be a rewarding and fulfilling experience, both personally and professionally. By sharing your skills and knowledge, you can make a tangible difference in the world and contribute to something greater than yourself.
-
Opportunities for recognition: Open source projects often attract the attention of industry leaders, influencers, and media outlets. By making significant contributions to high-profile projects, you can gain recognition and establish yourself as an expert in your field.
In the next lesson, we'll discuss the essential tools and resources you'll need to be successful in your open source journey, including GitHub, Git, CodeSee, VS Code, and Discord. By familiarizing yourself with these tools, you'll be better equipped to collaborate with others, manage your projects, and contribute effectively to open source projects.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Tools to be Successful
To be successful in your open source journey, it's essential to familiarize yourself with the tools and platforms commonly used by the community. These tools will help you collaborate effectively, manage your projects, and contribute to open source projects. In this chapter, we'll discuss the following essential tools for open source collaboration:
- GitHub & Git
- Visual Studio Code (VS Code)
- Discord
GitHub & Git
In your prior Kibo courses, you have been exposed to GitHub and Git. However, it can never hurt to review key concepts and learn about them in a slightly new context.
Introduction to Git
Git is a distributed version control system designed to handle everything from small to very large projects with speed and efficiency. It was created by Linus Torvalds, the creator of the Linux kernel, to manage the development of the Linux kernel itself.
Git allows developers to track changes in their code, collaborate with other developers, and manage multiple versions of their projects. Some of the key features of Git include:
- Branching: Git allows developers to create branches, which are separate copies of their codebase. This enables them to work on new features or bug fixes without affecting the main codebase. Once the changes are complete, they can merge the branch back into the main codebase.
- Staging Area: Git provides a staging area where developers can prepare their changes before committing them to the repository. This allows them to review and organize their changes before making them permanent.
- Distributed Version Control: Unlike centralized version control systems, Git is a distributed version control system. This means that every developer has a complete copy of the repository on their local machine, allowing them to work offline and independently of a central server.
Introduction to GitHub
GitHub is a web-based platform for version control and collaboration that uses Git as its underlying technology. It provides a simple and user-friendly interface for managing Git repositories, as well as a host of features and tools for collaborating with other developers.
Some of the key features of GitHub include:
- Issue Tracking: GitHub provides an integrated issue tracking system that allows developers to create, assign, and manage issues related to their projects. Issues can be categorized using labels, milestones, and assignees, making it easy to keep track of project progress and prioritize tasks.
- Pull Requests: GitHub introduces the concept of pull requests, which allow developers to propose changes to a project's codebase. Pull requests enable code review, discussion, and collaboration before changes are merged into the main codebase.
- Forking: GitHub allows users to create a copy of a repository, known as a fork. This enables them to make changes to the codebase without affecting the original project. Once the changes are complete, they can submit a pull request to have their changes reviewed and potentially merged into the main codebase.
- GitHub Actions: GitHub Actions is a powerful automation tool that allows you to create custom workflows to automate tasks like building, testing, and deploying your code.
Getting Started with Git and GitHub
To get started with Git and GitHub, follow these steps:
-
Install Git: Download and install Git on your computer by visiting the official Git website and following the installation instructions for your operating system.
-
Configure Git: After installing Git, open a terminal or command prompt and configure your Git user information by running the following commands:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
Replace "Your Name" with your full name and "your.email@example.com" with the email address you used to sign up for GitHub.
Practicing Contributing with VS Code
To practice using GitHub, we're going to walk through creating a repository, cloning the repository, making changes, and pushing those changes.
- Create a new repository: Log in to your GitHub account and click the green "New" button on the sidebar. Alternatively, click the "+" icon in the upper right corner and select "New repository" from the dropdown menu.
Choose yourself as the owner of the repository, and enter a name for your repository. For this example, we'll use practice-repository
.
Choose whether you want it to be public or private. You can also choose to initialize the repository with a README file, a .gitignore file, and/or a license.
For this example, initialize the repository with a README file.
- Clone the repository: Once you have created a new repository, you can clone it to your local machine by running the following command in your terminal or command prompt:
git clone https://github.com/username/repository-name.git
Replace "username" with your GitHub username and "repository-name" with practice-repository
.
-
Access your repository in your code editor: For this example, we're using VS Code. Open VS Code, navigate to the file tab, and then open your
practice-repository
. -
Make changes and commit: There should be one file in your repository:
README.md
. Inside that file, below# practice-repository
, type 'hello world!' Once you have made changes, you can stage and commit them.
Open your terminal and make sure you are in the right directory. For example, my coding projects are inside of my Projects
folder. Using my terminal, I would access this repository by running this command:
cd projects/practice-repository
Once in the correct repository, use the following commands to add the changes you made and write a commit message with a description of the changes:
git add .
git commit -m "Your commit message"
Replace "Your commit message" with a brief description of the changes you made.
- Push your changes: After committing your changes, you can push them to your remote GitHub repository by running the following command:
git push origin main
This will push your changes to the "main" branch of your remote repository. If you want to check your work, navigate to your GitHub repository. You should now see 'hello world!' in your README.md file.
You have now successfully set up Git and GitHub on your local machine and are ready to collaborate on open source projects!
VS Code
Visual Studio Code (VS Code) is a popular, free, and open source code editor developed by Microsoft. It supports a wide range of programming languages and offers many features that make it a great choice for open source development, including:
- Built-in Git support: VS Code provides built-in support for Git, allowing you to manage your Git repositories, stage and commit changes, and resolve merge conflicts directly from the editor.
- Extensibility: VS Code offers a rich ecosystem of extensions that can enhance your development experience and add support for additional languages, tools, and frameworks.
- Integrated terminal: VS Code includes an integrated terminal that allows you to run commands, scripts, and build tasks directly from the editor.
- Customizable: VS Code is highly customizable, allowing you to tailor the editor to your preferences and workflow. You can customize the theme, keybindings, and settings to create a personalized development environment.
To download and install VS Code, visit the official website and follow the instructions for your operating system.
Discord
Discord is a popular messaging and voice chat platform that is widely used by open source communities for communication and collaboration. By joining Discord servers related to your interests and projects, you can:
- Connect with other developers: Discord allows you to chat with other developers, ask questions, and share your knowledge with the community.
- Stay up-to-date: Many open source projects use Discord to share updates, announcements, and other important information. By joining their servers, you can stay informed about the latest developments and contribute more effectively.
- Participate in discussions: Discord servers often host discussions on various topics related to open source development. By participating in these discussions, you can learn from others, share your insights, and contribute to the collective knowledge of the community.
- Find collaboration opportunities: Discord servers can be a great place to find others who share your interests and are looking for collaboration opportunities. By networking with other developers, you can discover new projects to work on and form valuable partnerships.
To get started with Discord, visit the official website and sign up for an account. Once you have an account, you can search for open source communities and projects on platforms like GitHub, GitLab, or OpenSauced to find their Discord servers and join the conversation.
By familiarizing yourself with these tools and platforms, you'll be equipped to collaborate effectively, manage your projects, and contribute to open source projects. In the next chapter, we'll discuss how to contribute to open source projects, including finding projects to work on, submitting contributions, and what happens after your contribution is accepted.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Daily Standups
Introduction
Standups are a staple in the tech industry, serving as a key component of agile methodologies to ensure team alignment, facilitate quick problem-solving, and foster open communication on a daily basis.
As part of your open-source experience, beginning in the second week, you'll be engaging in daily standups to ensure continuous communication and progress within your project team. Standups will be conducted asynchronously via a dedicated bot in Slack. This lesson outlines expectations for your daily standup participation, provides examples of meaningful updates, and introduces the rubric for evaluating your standup contributions at the end of the term.
Standup Questions
Every day, you will be prompted to answer the following questions:
- How do you feel today?
- What have you done since yesterday?
- What will you do today?
- Anything blocking your progress.
Expectations
- Consistency: Submit your standup updates daily and promptly.
- Honesty: Provide genuine updates and express real blockers.
- Clarity: Make your updates concise but informative.
- Responsiveness: Acknowledge and act upon feedback or questions from mentors and teammates.
Examples of Standup Updates
Good Update
The following is an example of a good update. It clearly communicates the work that was completed and what the plan is for today (to help inform other team members if their work may be impacted). While their are no blockers at the moment, it provides a heads up to the team members and the Technical Mentor that you may need some assistance in a specifically mentioned area.
- How do you feel today? Energized and ready to tackle some complex issues!
- What have you done since yesterday? Completed the integration of the new authentication module and tested it for potential security vulnerabilities. All tests passed successfully.
- What will you do today? I plan to start working on optimizing the database queries to improve application performance, as discussed in our last team meeting.
- Anything blocking your progress. No blockers at the moment, but I might need some guidance on database optimization techniques later.
Bad Update
This update is not useful at all. It doesn't provide any information that is actionable to your team mates or to your Technical Mentor.
- How do you feel today? Fine.
- What have you done since yesterday? Some work.
- What will you do today? More of the same.
- Anything blocking your progress. Not really.
Is this Good or Bad?
Update 1
Read through each of the following updates and assess if you think the update is of good quality or of poor quality and why. After you have come to your conclusion, expand the answer below each and see if it matches your assessment.
- How do you feel today? Pretty good, a bit tired.
- What have you done since yesterday? I managed to fix a couple of bugs in the login feature and started looking into the user feedback module.
- What will you do today? Planning to continue with the user feedback module and maybe start drafting documentation for the features I worked on.
- Anything blocking your progress. Struggling a bit with understanding the best practices for documentation. Might need to look up some resources or ask for help.
Answer
Moderate Update: This update gives a clearer picture of the intern's current state, their recent accomplishments, and plans for the day, along with identifying a potential area where they might need assistance. However, it could still benefit from more specifics, such as the nature of the bugs fixed or the aspects of the user feedback module they're working on, to fully engage teammates and mentors.
Update 2
-
How do you feel today? Well, to start with, I woke up feeling quite groggy because I stayed up a bit too late last night watching the final episodes of my favorite TV series, which, by the way, had a rather disappointing ending. So, I guess you could say I'm not entirely at my best today, but I'm hoping that after my second cup of coffee, Iāll start feeling a bit more energized and ready to tackle the day ahead of me. Itās always interesting how much of an impact a good night's sleep has on your productivity the next day, donāt you think?
-
What have you done since yesterday? Yesterday was quite a day; let me tell you. I started off by checking my emails, as one does, and then I moved on to reviewing some of the code I wrote the day before. I spent quite a bit of time trying to debug this one annoying issue that I couldn't seem to figure out. It was related to the new feature I've been working on, you know, the one I mentioned last week? Anyway, after a lot of back and forth and consulting with various online forums, I finally managed to get it sorted out, though it took much longer than I had anticipated. Then, in the afternoon, I had a long meeting with the team where we discussed our progress on the project and outlined our goals for the next sprint. It was a productive meeting, but it did run over the scheduled time, which meant I had to push back some of the other tasks I had planned for the day.
-
What will you do today? Today, my main focus is going to be on continuing the work I started on that new feature. There's still a lot to do, and I'm expecting it to take up most of my day. I'll need to write some new code, test it thoroughly, and probably go back and make a few tweaks to ensure everything is running smoothly. I also need to catch up on some documentation that I've been putting off for a while now. It's not the most exciting part of the job, but it's important, and I know I need to get it done. Plus, I promised my teammate that I'd review their code by the end of the day, so I'll have to make sure I set aside some time for that as well. It's going to be a busy day, but I'm hopeful that I'll be able to get through most of it if I manage my time effectively.
-
Anything blocking your progress. At the moment, I don't think there's anything specifically blocking my progress, but I am a bit concerned about how much I have on my plate today. I tend to underestimate how long tasks will take me, which can lead to me feeling rushed and stressed. I'm also still trying to get a handle on some of the more advanced features of the software we're using, which can slow me down at times. But I'm determined to push through and make as much progress as possible. Hopefully, everything will go smoothly, and I won't encounter any major issues.
Answer
Bad Update: This update is overly verbose, providing too much unnecessary detail about personal matters, general thoughts, and the minutiae of daily tasks, making it challenging to quickly grasp the essential points about work progress, plans, and blockers.
Update 3
- How do you feel today? Motivated and focused, ready to tackle today's tasks.
- What have you done since yesterday? I successfully merged the pull request for the new login feature after addressing all code review feedback. I also initiated a round of user testing to gather early feedback and identify any usability issues.
- What will you do today? My main goal is to start working on the user profile management feature, focusing on designing the database schema and drafting the API specifications. I plan to collaborate with the UX team to ensure the feature's user interface will be intuitive and efficient.
- Anything blocking your progress. Currently, I'm waiting for access to the production database to implement the new schema. I've reached out to the database administrator and hope to get the necessary permissions by noon so I can proceed without delays.
Answer
Good Update: This update is concise and informative, clearly communicating feelings, accomplishments, plans, and potential blockers in a manner that's easily digestible and actionable for team members and mentors.
Update 4
- How do you feel today? Excited and a bit overwhelmed. There's so much to learn, but I'm eager to contribute more significantly.
- What have you done since yesterday? Spent most of my time getting familiar with the project's documentation and codebase. I've set up my development environment following the project guidelines and ran a few test builds to ensure everything works as expected.
- What will you do today? Today, I plan to start small by picking up a beginner-friendly issue related to documentation improvements. This will allow me to make a tangible contribution while continuing to navigate and understand the larger codebase. I also intend to attend a virtual meet-up with other project contributors to gain insights and ask questions.
- Anything blocking your progress. So far, the main challenge has been the steep learning curve associated with the project's technology stack. However, I've been utilizing online tutorials and forums (cites specific link), and I'm slowly becoming more comfortable with the tools and languages used in the project.
Answer
Good Update: This update is a good example for a student who is new to contributing to an open-source project. It acknowledges the learning process, sets realistic goals for contribution, and identifies areas of challenge without being deterred by them.
Rubric for Evaluating Standup Updates
1. Completeness
- Excellent: Provides detailed responses to all questions, clearly outlining activities and feelings.
- Good: Answers all questions with sufficient detail but may lack some specificity in describing tasks or emotions.
- Fair: Responses are brief and lack detail in one or more areas, making it difficult to assess progress or well-being.
- Poor: Omits one or more questions, offers very little detail, providing no meaningful insight into daily activities or challenges.
2. Clarity and Conciseness
- Excellent: Updates are clear, concise, and to the point, with no unnecessary information, making it easy for team members to understand tasks and progress.
- Good: Generally clear and concise but may include minor unnecessary details or could be more straightforward in explaining tasks.
- Fair: Some responses are vague or overly wordy, clouding the understanding of activities or needs.
- Poor: Updates are unclear, overly brief, or excessively verbose, hindering comprehension of activities, feelings, or blockers.
3. Engagement and Responsiveness
- Excellent: Actively engages with feedback or questions from mentors and teammates, demonstrating a willingness to collaborate and adjust based on input.
- Good: Responds to feedback and questions but may not always initiate or seek out engagement actively.
- Fair: Occasionally engages with or responds to direct questions but generally does not show proactive communication.
- Poor: Rarely or never responds to feedback, questions, or direct communications, showing a lack of engagement with the team process.
Daily Checkins & Time Tracking
Tracking the time you spend on your industry experience or open-source contribution work each week is not only crucial for self-management but is also a required part of your participation in the program. We will be using Botimum in Slack for you to check in and check out whenever you're working. This method allows us not only to ensure you're developing disciplined work habits and managing your time effectively but also to collect this data as part of your assessment. Regularly logging your hours helps prevent procrastination and makes your workflow transparent to your team members, letting them know when you're available or focusing on tasks. Remember, this practice is about more than just fulfilling a requirement; it's about enhancing your productivity, honing your time management skills, and contributing to a supportive and collaborative team dynamic.
Team Meetings with Mentor
Weekly meetings with your team mentor are designed to provide you with personalized guidance, facilitate your learning, and ensure the smooth progress of your work. These sessions are a platform for you to discuss challenges, seek advice, and align on goals with your mentor and team. Team meetings will begin in the second week. Use the following information to know what to expect and how to properly prepare for and engage with the meetings.
What to Expect
Structure and Content
- Duration: Meetings typically last between 30 to 60 minutes.
- Format: Depending on the mentorās preference, meetings could be held via video conference or voice call.
- Agenda: Meetings usually have a structured agenda, which may include project updates, discussion on challenges, feedback sessions, and goal setting for the coming week.
Objectives
- Guidance: Receive targeted advice on technical issues, project management, and professional development.
- Feedback: Get feedback on your recent contributions, standup updates, and overall project involvement.
- Alignment: Ensure that your work aligns with the projectās objectives and timelines.
- Skill Development: Identify opportunities for skill enhancement and areas for growth.
How to Engage
Before the Meeting
- Prepare: Review your contributions and challenges over the past week. Have specific topics, questions, or issues ready to discuss.
- Set Goals: Think about what you want to achieve in the coming week and what support you might need from your mentor.
During the Meeting
- Participate Actively: Engage in the discussion, share your thoughts and updates, and be open to feedback.
- Take Notes: Write down important advice, feedback, and action items.
- Ask Questions: Donāt hesitate to ask for clarification or further explanation on any advice or tasks.
After the Meeting
- Follow Up: If there were any action items or advice given, make sure to act on them before the next meeting.
- Reflect: Consider the feedback and how you can apply it to improve your contributions and learning.
Rubric for Participation
Engagement
- Excellent: Actively participates in discussions, consistently brings thoughtful questions and updates to the meeting, and demonstrates a high level of interest in feedback.
- Good: Regularly contributes to the conversation and shows engagement with the mentorās advice, occasionally asking questions.
- Adequate: Participates in the meeting but may be passive at times. Shows some interest in feedback.
- Poor: Rarely engages in the discussion, offers minimal updates, and shows little interest in feedback.
Preparation
- Excellent: Comes well-prepared with a list of topics, questions, and updates. Clearly has reviewed past work and feedback.
- Good: Generally prepared with topics to discuss but may lack detail or specificity in questions and updates.
- Adequate: Shows some preparation but often relies on the mentor to direct the conversation.
- Poor: Comes to the meeting without preparation, with no clear agenda or questions.
Follow-Through
- Excellent: Consistently acts on feedback and advice, demonstrates progress on action items by the next meeting.
- Good: Usually follows up on feedback and action items, but progress may be inconsistent.
- Adequate: Sometimes follows through with advice but often needs reminders or additional motivation.
- Poor: Rarely or never acts on feedback or completes action items, showing little progress between meetings.
Types of Open Source Contributions
This term, your main objective is to make one or more contributions to an assigned open source project. To help you get started, we have identified issues for you to work on, which are well-suited to first time OS contributors. There are many types of contributions that individuals can make to open source projects. We will explore the various types of contributions here, but we want you to focus on coding contributions for your Industry Experience.
Contributions to open source projects can take many forms, such as coding, documentation, testing, and more. It is important to note that open source contributions are not limited to developers only. Anyone can contribute to open source projects, regardless of their technical skills.
Non-Coding Contributions
Non-coding contributions are types of contributions that do not involve writing or modifying code. However, they are essential for the sustainability and growth of open source projects.
These types of contributions allow individuals with various skills and backgrounds to participate and make meaningful contributions to the software and the community. You can read this article to learn more about contributing to open source projects without knowing how to code.
Next, we will talk about some common types of non-coding contributions.
Documentation
Are you a lover of words? Do grammar errors irritate you? Do you like breaking down complex problems or helping people learn? Then, documentation is for you!
Documentation is crucial to open source projects. It involves creating, improving, or maintaining the written resources accompanying open source software projects. Documentation can make a project more accessible and user-friendly, help attract new users, and encourage repeat contributions to the project.
Tips for Contributing to Documentation
If you are interested in contributing to documentation, here are a few tips that you might find helpful:
-
Read the entire documentation.
Reading the whole documentation will help you better understand the product and how to use it. -
Find a task that fits your skills and interests.
If you're unsure where to start, look for issues or discussions you believe you can solve before reaching out to a maintainer. -
Use the product.
Using the product yourself will help you gain user insight and help you determine which information needs to be added to or removed from the documentation. -
Be patient and persistent.
Writing good documentation takes time. Don't be afraid to ask for help if you need it.
Examples of Documentation Contributions
Now, you might wonder what you should do to contribute to a project's documentation. Here are some examples of what to contribute:
-
Write or update the README file
If you see that a project needs a README explaining how to install and use it, you can offer to write one. Or, if you notice information or instructions are missing from the README, you can create an issue and suggest how to update it. -
Create a tutorial
When the documentation about a feature is unavailable, you can address this and create a tutorial that guides users through the feature. -
Update documentation
Sometimes, a project has new changes or releases, but the maintainers still need to update the documentation. You can help update the documentation to reflect these new changes. -
Translate documentation
If you are proficient in other languages, you can help a project by translating the documentation to expand its reach to more users. -
Fix typos and grammatical errors
Although they seem small, fixing typos and grammatical errors can help maintain consistency and clarify the documentation.
Graphic Design
Are you a creative person who's into design? If so, you might want to consider contributing to an open source project through design.
This contribution involves creating visual assets for open source projects, such as logos, icons, illustrations, website designs, and other graphical elements. These visual assets play a significant role in enhancing the project's overall user experience and branding. Graphic design contributions can make open source software more appealing, user-friendly, and recognizable.
Here are some examples of what to contribute through design:
-
Logo and branding
Designing a unique and memorable logo for an open source project can help establish its identity and brand. A well-designed logo can make the project recognizable and give it a professional image. -
Icon design
Icons are essential for user interfaces. You can create custom icons for software applications or websites, improving the visual appeal and usability of the project. -
Website design
Open source projects often have websites to provide information and documentation about the project. You can contribute by designing website layouts, graphics, banners, and other visual elements to make the site more attractive and user-friendly. -
User Interface (UI) design
UI design is crucial for software projects. You can create mockups, wireframes, and high-fidelity designs for the user interface, making it more intuitive and visually appealing. -
User Experience (UX) design
By considering how users interact with the software, you can contribute to improving the overall user experience. This includes designing user flows, navigation, and usability testing. -
Accessibility design
Software and websites must be accessible to all users, regardless of whether they have disabilities. You can contribute, for example, by creating accessible color schemes and contrast or positioning visual elements within the project. You can help ensure all visual elements are clear and easy to use. -
Responsive design
Designing visuals that work well on various devices and screen sizes is crucial for modern web applications. Responsive design ensures the project looks good and functions properly on desktop and mobile devices.
Content Creation
Contribution through content creationāblog posts, videos, or streamingāinvolves researching, writing or recording, editing, and publishing the content. The goal is to inform and educate others on a particular open source software, project, technology, or best practices to attract more users and contributors. Like documentation, you don't necessarily have to know how to code to create these contents.
Here are some ideas about what to create:
-
Latest features
You can share the latest features of an open source project, such as a new version of the software or a new plugin. -
Tutorial
Most of the time, documentation has limited space to explain the project in detail to accommodate all levels of users. You can take this opportunity to target particular audiences and create a tutorial on installing and configuring the software or using it. -
Impact
You can consider sharing about an open source project's impact on its users. Why do they want to use it, or what are the benefits of using the software? That way, you are helping to promote the project to gain more users. -
Open source best practices
Although many content creators have shared information about how to use Git and GitHub or how to contribute to open source, whenever you learn something new, you can always share it through your content. You never know if what you create can inspire and help others contribute to open source.
Coding Contributions
Coding contributions power open source development. They entail writing, modifying, or improving the actual source code of an open source project, directly impacting the software's functionality and quality.
Contributors collaborate with project maintainers and the community to ensure their code contributions align with project goals and coding standards. Open source projects typically have guidelines and processes for accepting and integrating coding contributions, such as code reviews and continuous integration.
Here are some examples of contributions you can make to a project with your coding skills:
-
Write new code
You write new code to add features or enhance the functionality of an open source project. -
Bug fix
Identifying and fixing bugs is a critical coding contribution. You locate issues within the codebase, diagnose them, and then write code to fix them. Bug fixes improve the software's stability and reliability. -
Code refactor
Refactoring code involves restructuring and improving existing code without changing its behavior. This helps enhance code readability, maintainability, and scalability, which are vital for the project's long-term health. -
API design and maintenance
You can contribute to projects with public APIs by designing, maintaining, or improving the API to ensure its quality and reliability. -
Feature development
You can help implement new features or functionalities in response to user needs or project goals. Feature development involves planning, designing, and coding new components or capabilities. -
Performance optimization
You can contribute to optimizing the software's performance by improving algorithms or optimizing resource usage. This type of contribution aims to make the software run more efficiently. -
Testing and Quality Assurance (QA)
Writing automated tests, including unit tests, integration tests, and end-to-end tests, is a coding contribution that ensures software reliability. Testing helps catch and prevent regressions and issues.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
How to Contribute to Open Source
In this lesson, we'll guide you through the process of contributing to open source projects. Note that you won't achieve all these steps this week, but we want to introduce them up front so you have an understanding of the overall process.
For Industry Experience, we have pre-selected projects for you to contribute to and first issues for you to work on. But if you want to find other projects to contribute to in the future, their is some great advice listed below.
Finding Projects to Work On
One of the first challenges you might face when getting started with open source is finding a project to contribute to. Here are some tips to help you discover projects that align with your interests and skills:
-
Browse GitHub and GitLab: Both GitHub and GitLab host a vast number of open source projects. You can use their search functionality to find projects based on specific keywords, programming languages, or topics.
-
Follow your interests: Think about the tools, frameworks, and libraries you use or are interested in learning more about. Many of these projects are open source and welcome contributions from the community.
-
Join open source communities: There are numerous online communities, forums, and chat platforms dedicated to open source development. By joining these communities, you can connect with other developers, discover new projects, and find collaboration opportunities. In the OpenSauced Discord, for example, we share good first issues, cool GitHub projects, and issues we have open on our repositories.
-
Leverage OpenSauced: OpenSauced is a platform that helps developers discover and contribute to open source projects. By using OpenSauced, you can find projects that align with your interests, skills, and goals.
Discovering Open Source with OpenSauced
OpenSauced is a powerful tool for finding open source projects to contribute to. To get started with OpenSauced, follow these steps:
-
Sign up for an account: Visit https://www.opensauced.pizza/ and sign up for an account using your GitHub credentials.
During the signup process, you'll be asked to pick some interests and set your timezone. This will help OpenSauced recommend projects that align with your interests and schedule.
-
Explore the dashboard: Once you've signed up, you'll be taken to your dashboard, where you can view your current projects, goals, and contributions. Clicking "Explore" in the header will enable you to browse projects based on your interests and skills.
-
Search for projects: In Explore, you can see a list of repositories and their relevant activity levels and engagement levels that are currently trending. You can also search for projects by typing in the search bar. You can search for projects by name, description, or topic and use this tool to find something that resonates with you.
-
Save projects to your Insights pages: When you find projects you're interested in, you can add them to "Insights" pages that give you more details about the activity over the projects. Or, if you'd rather just dive in and contribute, you can skip to the next step.
-
Start contributing: When you click on the name of a repository, you'll be taken to its GitHub page, where you can explore issues that are open and ready for contribution, knowing that the community around this project is active and your contributions will be welcomed.
By using OpenSauced, you can streamline the process of finding open source projects to work on and focus on contributing to the projects that align with your interests and goals.
Onboarding in a New Project
When you're interested in contributing to a new open source project, it's important to familiarize yourself with the project's guidelines, conventions, and workflow and take the initiative to onboard yourself.
Here are some tips to help you onboard successfully:
-
Read the project's documentation: Read the README file, Contributing Guidelines, and Code of Conduct to familiarize yourself with the project. This will help you understand the project's goals, requirements, and expectations for contributors.
-
Start small: When you're new to a project, it's a good idea to start with small, manageable tasks, such as fixing bugs, adding tests, or updating documentation. This will help you become familiar with the codebase and development workflow without getting overwhelmed.
-
Join the community: Many open source projects have online communities, forums, or chat platforms where developers can ask questions, share knowledge, and collaborate. By joining these communities, you can connect with other contributors, learn from their experiences, and get help with any issues you encounter.
-
Ask for help: If you need clarification or encounter a problem, don't hesitate to ask for help. Open source communities are generally supportive and welcoming; other contributors will gladly assist you.
-
Be patient and persistent: Onboarding in a new project can be challenging, especially if you're new to open source development. Be patient, and don't be discouraged by setbacks or mistakes. You'll become more comfortable and confident in your contributions with persistence and practice.
Getting Started With Contributing
So, you've onboarded yourself in the project. Now, you can prepare to contribute by following these steps:
-
Read the Contributing Guidelines: Investigate how the project receives contributions by reading the CONTRIBUTING file. You want to ensure that you follow the project's contributing rules.
-
Find or create an issue: Look for issues labeled as "good first issue" or "beginner-friendly" that are suitable for your skill level. Alternatively, identify a feature or improvement you'd like to work on. Check if it aligns with the project's roadmap and create an issue. This could include documentation updates, bug fixes, content changes, and more.
-
Ask to be assigned the issue: When making your first contribution to a project, it's a good idea to ask the maintainers to assign the issue to you. This will ensure that you're not duplicating work and that your contribution is aligned with the project's goals and requirements.
If there are no directions in the CONTRIBUTING file, you can leave a comment on the issue, "Can I please be assigned this issue?" When the maintainer has assigned you, you'll notice that your username is now under the "Assignees" section.
Contribution Workflow
Once a maintainer has assigned you an issue, the next step is to work on the changes. Here's a general workflow of the process:
-
Fork the repository: Forking a repository means creating a copy of the repository under your GitHub account. It allows you to push changes to the remote codebase without affecting the original project.
-
Clone your forked repository: Make a copy of your forked repository to your local machine. Run the following command in your terminal:
git clone https://github.com/YOUR-USERNAME/REPOSITORY-NAME.git
Replace "YOUR-USERNAME" with your GitHub username and "REPOSITORY-NAME" with the repository's name.
-
Create a new branch: Before making any changes, create a new branch in your local repository to work on your contribution. Creating a new branch is the best practice in open source because it keeps your changes separate from the
main
branch.You can create a new branch using the following command:
git checkout -b YOUR-BRANCH-NAME
Replace "YOUR-BRANCH-NAME" with a descriptive name for your branch, such as "fix-bug-123" or "add-new-feature".
-
Make your changes: Now that you have a new branch, you can make changes to the codebase. Always follow the project's coding guidelines and conventions, and test your changes to ensure they work as expected.
-
Add and commit your changes: Once you've made your changes, add your changes to the staging area and commit them with these commands:
git add . git commit -m "Your commit message"
Replace
"Your commit message"
with a brief description of your changes. -
Push your changes: Push your changes to your forked repository on GitHub by running the following command:
git push origin YOUR-BRANCH-NAME
Replace "YOUR-BRANCH-NAME" with the name of your branch.
-
Create a pull request: Once you've pushed your changes, navigate to the original project's repository on GitHub and click the "Compare & pull request" button. Fill in the required information and submit your pull request by clicking the "Create pull request" button.
-
Respond to feedback: After submitting your pull request, the project maintainers may provide feedback or request changes. Be sure to respond promptly and address any concerns or suggestions they may have.
By following these steps, you'll be able to submit your contributions to open source projects and collaborate with other developers to improve the codebase.
What Happens Next?
After your contribution has been submitted and reviewed, one of the following outcomes may occur:
-
Your contribution is accepted: If your contribution is approved by the project maintainers, it will be merged into the main branch of the codebase.
Congratulations! Your work is now part of the project, and you've made a valuable contribution to the open source community. -
Your contribution requires changes: Sometimes, the project maintainers may request changes to your contribution before it can be accepted. This could be due to coding issues, conflicts with other changes, or a need for additional documentation. In this case, make the requested changes and resubmit your pull request.
-
Your contribution is rejected: In some cases, your contribution may not align with the project's goals or requirements, or it may not be the best solution to a problem. If your contribution is rejected, don't be discouraged. Take the feedback you received as an opportunity to learn and improve. You can always try contributing to another project or submitting a different contribution to the same project.
Keeping Branches Up to Date
It is highly recommended that you update your remote and local branches habitually. That way, your branch will have the latest update when merged into the main
branch of the original (upstream
) repository.
The best times to update your branches are before you push your changes to the remote repository and while you're waiting for your pull request to be reviewed.
Updating Branches
First, you must update your forked (origin
) repository:
- Go to your forked repository on GitHub.
- Click the "Sync fork" button.
- Click the green "Update branch" button.
Then, pull the latest changes in the main
branch in the origin
repository to update your local working branch by following these steps in your terminal:
-
Go to your working branch.
git checkout YOUR-BRANCH-NAME
-
Pull the latest changes with this command:
git pull origin main
Merge Conflicts
Merge conflicts are something you'll commonly encounter when contributing to an open source project. When two branches have made different changes to the same line(s) in the same file(s), Git cannot automatically determine which change to keep, resulting in a conflict.
When a merge conflict occurs, Git adds conflict markers (<<<<<<<
, =======
, and >>>>>>
) to indicate the conflicting lines from different branches. Everything between the <<<<<<<
and =======
is the changes that you worked on (current changes). And everything between the =======
to >>>>>>>
is the incoming changes from the remote main
branch.
You need to pay attention to the conflicts and decide how you want to resolve them. You can keep only your change, incoming change, or both changes.
Tips to Prevent Resolving Merge Conflicts Repeatedly
Some open source repositories have high contribution activities in the same files that can cause merge conflicts.
Below are some tips to prevent you from resolving merge conflicts repeatedly when contributing to open source projects:
1. Following Instructions
Ensure you follow the instructions in the project's README or Contributing Guide, and don't miss any step.
2. Pull Request Form
Complete the template form and fill in all areas when creating a pull request.
If a repository doesn't provide you with a pull request template, you need to have these in your pull request form:
-
A descriptive title: A descriptive title would help maintainers and other contributors gain an idea of what your contribution is.
Consider using the following method to write your title:type: brief description of your contribution
. For example,fix: color contrast issue on the navbar
,feat: create a warning button
, etc. -
A clear description of your pull request: Describe your pull request clearly. Consider explaining your changes, thoughts behind the solution, etc. A clear description gives maintainers and other contributors insight into the details of your changes. Here is an example of a clear description in a pull request.
-
The link to the related issue: Linking a pull request to the addressed issue will close the linked issue automatically when the pull request gets merged. This makes it easier for maintainers to keep their projects organized.
-
A screenshot or screen recording when you make a UI change: Providing screenshots or screen recordings will make it easier for maintenance to visualize your changes and review your pull request.
3. Resolving Merge Conflicts Immediately
If a branch has merge conflicts that must be resolved, the merge button is automatically disabled. So, maintainers are not able to merge the pull request.
When you notice merge conflicts in your pull request or if a maintainer asks you to resolve merge conflicts, fix them immediately. The sooner you resolve the conflicts, the sooner maintainers can review and merge your pull request.
As you continue to contribute to open source projects, you'll gain valuable experience, develop new skills, and build a strong portfolio of work.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Additional Resources
Congratulations on your journey into open source! Here are some resources for further learning about getting started in open source:
Guides and Tutorials
-
Open Source Guides by GitHub: Comprehensive guides on various aspects of open source, including getting started, contributing, maintaining projects, and building communities.
-
First Contributions by Roshan Jossey: A beginner-friendly guide that walks you through making your first contribution to an open source project.
-
A Beginnerās Guide to Open Source Software Development by The Linux Foundation: A free online course that covers the basics of open source software, including its history, licenses, and development models.
-
Mozilla's Open Source Student Network (OSSN): Provides resources and support for students interested in open source, including guides, events, and mentorship opportunities.
-
Introduction to GitHub and Open Source Projects by DigitalOcean: A beginner-friendly tutorial series that covers the basics of open source, including how to find projects to contribute to, understand the codebase, and submit contributions.
-
Open Source Friday by GitHub: A global movement that encourages individuals and organizations to contribute to open source every Friday. The website provides resources and guides on how to get started in open source and find projects to contribute to.
Blog posts
- Beyond Content Creation: How Open Source Contributions Can Help You Get Noticed
- Writing Your First Pull Request: Tips, Best Practices, and AI-Powered Tools for Success
- How to Contribute to Open Source without Knowing How to Code: A guide with project suggestions -How to Write a Good Issue: Tips for Effective Communication in Open Source
- Good first issues don't exist
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Introduction
šŗ Watch the following video from your instructor to learn what you will study in this lesson.
Learning Outcomes
After completing this lesson, you will be able to:
- Understand the general structure of work and professional expectations.
- Articulate self-management behaviors that support and hinder success in the workplace.
- Understand how to effectively work with others in the workplace.
- Identify personal challenges and create a personal action plan for internship success.
- Understand how to receive and solicit feedback for professional growth.
Getting Hired is Just the Beginning
Landing an internship role is a great achievement, but the reality is that it is only the first step in a series of milestones that will shape the trajectory of your career. Getting hired is just the beginning, and it is important for you to think about and prepare for what happens after you receive that coveted internship offer.
Meet Jane
Nairobi's vibrant tech scene welcomed Jane, a third-year computer science standout with remarkable grades and a passion for technology. Her academic brilliance did not go unnoticed, and Microsoft's Nairobi office extended an internship offer to her, marking the beginning of what she hoped would be a transformative professional journey.
As Jane stepped into the Microsoft office, she was met with a palpable buzz of innovation and collaboration. Eager to apply her theoretical knowledge to real-world projects, she dove headfirst into her assigned tasks. However, the transition from academic excellence to professional effectiveness proved to be more challenging than she had anticipated.
One of the significant hurdles Jane faced was the difference in the complexity of real-world projects compared to her academic endeavors. In the controlled environment of her university, problems were neatly defined, and solutions were within reach. At Microsoft, the projects presented challenges that demanded a level of problem-solving and creativity she hadn't encountered before. The real-world complexities left her searching for effective strategies to navigate the uncharted waters of professional problem-solving.
Setting up her development environment within Microsoft's specific ecosystem added another layer of difficulty. Despite her proficiency in programming languages, adapting to the company's tools and technologies was a steep learning curve. Jane found herself spending an inordinate amount of time troubleshooting and configuring her environment, detracting from her ability to contribute meaningfully to the projects at hand.
Communication, a skill often taken for granted in academic settings, emerged as a significant obstacle. Jane had excelled in solo projects, but the collaborative nature of her work at Microsoft required her to articulate ideas clearly within a team setting. The nuances of effective communication, such as conciseness and clarity, were hard for her to master, leading to misunderstandings among team members.
Working alongside a diverse team introduced another set of challenges for Jane. Some team members presented unique perspectives and collaborative strengths, but others proved to be challenging to work with. Navigating these interpersonal dynamics tested her ability to collaborate and adapt, skills that weren't as emphasized in her academic journey.
The fast-paced nature of the industry introduced a new pressure ā the pressure of deadlines. In academia, timelines were more flexible, allowing for thorough exploration and refinement of ideas. However, at Microsoft, quick turnarounds were the norm, and Jane struggled to meet the demands of tight schedules. Regrettably, Jane found herself occasionally being unreliable, failing to meet deadlines or delivering work that fell short of expectations. The weight of her commitments, coupled with the pressure to perform, led her to over-commit, setting unrealistic expectations for herself and, ultimately, setting the stage for disappointment.
As the challenges mounted, Jane unintentionally isolated herself from her team. The struggle to communicate effectively, coupled with feelings of inadequacy, led her to withdraw from team discussions and collaborative efforts. The isolation hindered her ability to seek guidance and support, exacerbating her difficulties.
Feedback from mentors and managers, though constructive, was sometimes met with resistance from Jane. In her pursuit of perfection, she occasionally ignored valuable insights and suggestions, hindering her growth and improvement.
As the internship drew to a close, her manager, appreciating Jane's potential but mindful of the observed challenges, made the decision not to extend a full-time employment offer. The realization hit Jane hard, serving as a humbling reminder that success in academia does not guarantee a seamless transition to the professional sphere.
Discussion
ā What are some of the challenges that Jane faced during her internship? And which of these are things that you struggle with as well? Post your answer and reasoning in the padlet below.
How Work Works
If you've never had a formal job before, you might be wondering: How does work actually work?
Here's a quick summary of how formal employment works:
-
Employment Structure: In professional employment, you'll work for an employer who hires you to perform specific tasks or roles within their organization. This relationship is typically governed by a contract or agreement outlining your responsibilities, compensation, benefits, and other terms of employment. Depending on the industry and employer, positions may have regular full-time hours (e.g., 9 to 5), part-time hours, or alternative schedules such as shift work, flextime, or remote work arrangements.
-
Expectations and Conduct: You are expected to adhere to your agreed-upon work schedule and be punctual and reliable. You are expected to perform your job duties to the best of your ability, meeting quality and productivity standards set by your employer. You are also expected to conduct yourself in a manner that reflects positively on your employer and the profession as a whole. This includes treating colleagues, clients, and stakeholders with respect, maintaining confidentiality when appropriate, and adhering to ethical standards and codes of conduct relevant to your field.
-
Expectation of Continuous Learning: Learning doesn't stop once you obtain your degree and secure your job. You're expected to stay current with developments in your field, update your skills and knowledge as needed, and pursue opportunities for professional development and continuing education. This may involve attending workshops, conferences, or training programs, earning certifications or advanced degrees, or seeking mentorship from more experienced professionals.
-
Performance Management: Your performance will be regularly evaluated by your supervisor or manager through performance reviews, assessments, or feedback sessions. Your employer will assess factors such as your job performance, productivity, teamwork, communication skills, and adherence to company policies and procedures. Constructive feedback will be provided to help you improve and grow in your role.
-
Opportunities for Career Advancement: Professional employment offers opportunities for career advancement and growth. This may involve taking on additional responsibilities, pursuing leadership roles, transitioning to higher-level positions within your organization, or seeking opportunities with other employers. Advancement often requires a combination of experience, skills development, networking, and a track record of success in your field.
ā Review the following behaviors that a typical software engineering intern may exhibit. For each scenario, evaluate if the intern is meeting professional expectations or not.
Scenario 1: An intern consistently seeks feedback on their code from senior engineers and incorporates suggestions to improve their programming skills.
Answer
Meets Expectations
Scenario 2: An intern regularly takes extended breaks during work hours to browse social media, neglecting their assigned tasks.
Answer
Does Not Meet Expectations
Scenario 3: An intern takes the initiative to document their code thoroughly, including comments and explanations for future reference by themselves and their colleagues.
Answer
Meets Expectations
Scenario 4: An intern misses team meetings and fails to communicate their absence or provide updates on their progress to their supervisor, but ultimately accomplishes assigned tasks by their deadlines.
Answer
Does Not Meet Expectations
Scenario 5: An intern repeatedly makes the same coding mistakes, despite receiving feedback from their supervisor.
Answer
Does Not Meet Expectations
Scenario 6: An intern consistently arrives late to work but stays late to complete tasks, often exceeding expectations in terms of quality of work.
Answer
Does Not Meet Expectations
Scenario 7: An intern consistently submits documents with minor errors that require correction by their supervisor before distribution.
Answer
Does Not Meet Expectations
Scenario 8: Despite facing challenges in completing a project, an intern reaches out to their supervisor for guidance and collaborates with team members to find solutions.
Answer
Meets Expectations
Scenario 9: Due to a local power outage, an intern is unable to submit an assigned task by an agreed-upon deadline.
Answer
Does Not Meet Expectations
Scenario 10: During a team retrospective meeting, an intern provides thoughtful reflections on what went well, what could be improved, and actionable steps for enhancing team performance in future projects.
Answer
Meets Expectations
Scenario 11: When facing criticism on their code during a code review, an intern becomes defensive, arguing that the task instructions were unclear.
Answer
Does Not Meet Expectations
Scenario 12: Despite lacking experience in a particular programming language, an intern proactively learns it to contribute effectively to a project requiring that language.
Answer
Meets Expectations
šŖ Reflect on the intern behaviors provided above. Is there one that you were surprised to learn met or did not meet expectations? Share your thoughts in the padlet below, along with an explanation of why you were surprised.
An interesting thing to note is that none of the behaviors above would be described as "exceeding expectations." If you avoided doing the things that "don't meet expectations" and did all the things that "did meet expectations," you would probably still just be an average intern. In the tech industry, just being "not bad" often isn't enough to keep your job or grow your career. As you think about how to approach your role, your goal should be to strive for excellence in your performance and development.
šŗ Watch the following video for a summary of how to succeed in a new job.
From the video, we learned that success in a new job can be built through:
-
Competence: Showing people that you can do your job by "showing your homework" and giving others something to react to.
-
Commitment: Showing people that you are dedicated by staying curious and asking questions.
-
Compatibility: Understanding the team and company culture, and showing people that they can work with you to accomplish their goals.
Managing Yourself
Why Self-Management Matters
When approaching school or work, we often place a lot of focus on "who's in charge." At school, this might be the instructor or, at work, a manager. While it's important to understand what your supervisors expect of you, your first and most important manager is yourself. To succeed at work, you need to become an effective self-manager.
Self-management requires cultivating various skills and practices, including self-awareness, goal setting, task management, emotional regulation, effective decision-making, adaptability, self-discipline, and self-care. In this lesson, we'll focus on a few of those practices that will help you excel in the workplace.
Task Management
šŗ Watch this video to understand how to be more organized and productive at work (5:34)
The video shares six habits of highly organized people:
- Keep it simple: have a few steps in your plan; elaborate systems are hard to maintain, and most of the time, they are not worth the effort.
- Develop routines: turn your important tasks into routines to save yourself the mental energy of constant planning.
- Have a place for everything and put everything in place: take the time to put items where they belong to make it easier to track and save time trying to locate them.
- Keep a current and detailed to-do list: work backward by determining your end goal and then decide the steps you will follow to get there.
- Don't be a perfectionist: it's less about perfection and more about action and progress.
- Toss things and purge routinely: continuously re-evaluate your tasks and only continue working on the relevant and important tasks.
Understanding Your Tasks
In school, you are evaluated through assessments that (hopefully) have clear instructions and maybe even a rubric that tells you exactly what you need to show to get points. At work, you will frequently be faced with tasks that are unclear and complex, and your manager probably won't be great at articulating their expectations...until you fail to meet them. This may seem unfair. How can someone evaluate your performance against expectations that they didn't share with you?! But this is the reality of the workplace. To counteract this, it is very important that you learn how to ensure that you have a complete understanding of the tasks that are assigned to you, as well as an understanding of the expectations (to whatever degree this is possible).
Therefore, when you don't understand an assigned task at work (or you have just been assigned a task and you are thinking about how to start), it's important to take proactive steps to clarify your understanding and seek the necessary support. Here's what you can do:
Review the task instructions: Start by carefully reviewing any instructions or documentation related to the task. Pay attention to specific requirements, deadlines, and expectations outlined in the task description. If you are lucky, there will be detailed instructions. If you are unlucky, you might just have a message from your manager to go on or a discussion from a meeting with some action items.
Break down the task: Break the task down into smaller, manageable steps to identify any areas where you're unclear. This can help you pinpoint specific aspects of the task that you need clarification on.
Ask for clarification: Before you start working, don't hesitate to reach out to your manager, supervisor, or colleagues for clarification if you're unsure about any aspect of the task. Approach them respectfully and explain the areas where you need clarification or additional guidance. Doing an amazing job on the wrong task is the same as doing a bad job on the correct task.
Seek examples or demonstrations: Sometimes, seeing examples or demonstrations of similar tasks can help clarify your understanding. Ask if there are any examples, templates, or previous projects you can refer to for guidance. This will also help you understand expectations more clearly while giving you something to benchmark the quality of your work.
Take notes: As you receive clarification or guidance, take notes to ensure you understand the task thoroughly. This can help prevent misunderstandings and serve as a reference as you work on the task.
Provide updates on your progress: Once you have a clearer understanding of the task, provide regular, concise updates on your progress to your manager or supervisor. This allows them to monitor your progress, provide feedback, and address any issues or concerns along the way. You should provide updates on both what is going well and what is not going well. You want to ensure that they always have an accurate picture of the status of the work. Updates can be in the form of active updates, where you send a summary of progress to them. Or passive updates, where you create a dashboard or other system that your manager can take a look at whenever they want to check on the progress of your work.
Getting Help
Part of understanding your tasks requires you to ask for help, so it is worth spending some time discussing how to ask for help more broadly. Getting help at work requires a balance of assertiveness, humility, and respect for your colleagues' time and expertise. Here's a step-by-step approach:
Assess the Situation: Take a moment to evaluate the situation and determine the specific help or support you need. Clarify your own understanding of the problem or task before seeking assistance.
Identify the Right Person: Consider who the best person is to help you with your specific issue. It could be your manager, a colleague with relevant expertise, a mentor, or someone from another department who has the necessary knowledge or resources.
Choose the Right Time: Respect your colleagues' time by choosing an appropriate time to approach them for help. Avoid interrupting them during busy periods or when they're clearly occupied with other tasks.
Be Clear and Specific: When requesting help, be clear and specific about what you need assistance with. Provide context, background information, and any relevant details to help the person understand the problem or task.
Ask Open-Ended Questions: Instead of simply asking for the solution, consider asking open-ended questions that encourage dialogue and collaboration. This can help you gain a deeper understanding of the issue and facilitate a more productive exchange of ideas.
Listen and Learn: Be receptive to the advice, feedback, or guidance you receive from your colleague. Listen actively, ask follow-up questions, and take notes if necessary. Learning from others' expertise is an invaluable opportunity for professional growth.
Express Gratitude: Remember to express gratitude to your colleague for their help and support. A simple "thank you" goes a long way in acknowledging their time and expertise.
Offer Assistance in Return: If appropriate, offer to return the favor by helping your colleague with something in the future. Building a culture of mutual support and collaboration fosters a positive work environment and strengthens professional relationships.
Check Your Understanding
ā Answer the following questions to see how well you understand the appropriate ways to understand your tasks and ask for help.
Question 1: Which of the following actions demonstrates an effective approach to understanding a task as a software engineering intern?
a) Immediately starting to work on the task without seeking clarification.
b) Breaking down the task into smaller steps to identify areas of uncertainty.
c) Avoiding asking questions to prevent appearing incompetent.
d) Asking a colleague for help before attempting the task independently.
Question 2: When is the best time to approach a colleague for help with understanding a task?
a) During a busy period when they're occupied with their own tasks.
b) Right before a scheduled team meeting.
c) When they're taking a break or not engaged in a task.
d) After you've completed the task, to get validation on your approach.
Question 3: Which of the following is an effective way to ask for help when you don't understand a task?
a) Prefacing your request with an apology for not understanding.
b) Providing context and specific details about the task you're struggling with.
c) Simply stating, "I don't get it. I'm confused about everything."
d) Requesting assistance without explaining the nature of the problem.
Question 4: What is an appropriate response when seeking clarification from your manager about a task?
a) Agreeing to everything your manager says, even if you don't fully understand.
b) Providing updates on your progress without acknowledging any confusion.
c) Asking follow-up questions to ensure you have a clear understanding.
d) Avoiding contact with your manager until you figure it out on your own.
Question 5: How can you show gratitude to a colleague who has helped you understand a task?
a) Ignoring their assistance and moving on to the next task.
b) Offering to help them with a completely unrelated task.
c) Criticizing their approach even if it was helpful.
d) Thanking them sincerely for their time and expertise.
Answers
- B, 2) C, 3) A, 4) C, 5) D.
Adaptability and Resilience
Change is inevitable, and the ability to embrace it is critical at work. You may be asked to step into an unexpected role, a client might require substantial changes to something you're working on, or a colleague might leave your team. It's normal to feel uneasy during transitions, but by developing the ability to adjust your plans and strategy, you can transform uncertainty into possibility. Embracing change will not only help you thrive personally but also contribute to the success of your organization.
Here are a few things to remember when striving to be adaptable and flexible in the workplace:
Reframe Setbacks: When faced with challenges, start by reframing setbacks as temporary roadblocks rather than permanent failures. Take a moment to acknowledge your emotions, but don't dwell on them. Instead, focus on analyzing the situation, identifying lessons learned, and adapting your approach.
Cultivate Flexibility: Embrace flexibility and be willing to step outside your comfort zone and explore different ways of doing things. As you encounter unexpected situations, remain calm, and assess the best course of action. Ultimately, flexibility is not about compromising your values or goals but rather finding creative solutions to overcome obstacles.
Build a Support Network: No one succeeds alone. Surround yourself with positive and supportive individuals who can offer guidance, encouragement, and constructive feedback. Cultivate relationships with colleagues, mentors, and peers who inspire you to grow and develop.
Practice Self Care: Engage in activities that rejuvenate you, such as exercise, hobbies, and spending time with loved ones. Take breaks when needed and practice mindfulness to stay grounded. Taking care of yourself allows you to better adapt to challenges and bounce back stronger.
As you prepare for your industry experience, reflect on your own past experiences and consider how you can apply these concepts to your daily life. Developing adaptability and resilience is a lifelong journey, and by embracing change, navigating setbacks, cultivating flexibility, building a support network, and prioritizing self-care, you'll be well-equipped to thrive in any situation.
Managing Up
While it is important to be an effective self-manager, there is a similar technique called managing up, which can indirectly support self-management by providing clarity on expectations, feedback, resources, and opportunities for professional growth. It can enhance your ability to navigate the organizational hierarchy and advocate for your own needs, ultimately contributing to your effectiveness in managing yourself.
There are a couple of ways in which managing up supports self-management:
Clear Expectations: By effectively managing up, you can gain clarity on your manager's expectations, priorities, and preferences. This understanding allows you to align your own goals and tasks accordingly, helping you manage yourself more effectively.
Feedback and Guidance: When you have a good relationship with your manager, you're more likely to receive constructive feedback and guidance. This input can help you improve your performance and adjust your self-management strategies as needed.
Resource Allocation: Through managing up, you can advocate for the resources and support you need to effectively manage yourself. Whether it's additional training, tools, or time allocation, having a positive relationship with your manager can make it easier to negotiate for what you require to succeed.
Professional Development: Managing up can provide opportunities for professional development, such as mentorship or exposure to new projects and responsibilities. These experiences can enhance your skills and competencies, ultimately supporting your ability to manage yourself more effectively.
Recognition and Rewards: While it is often true that actions speak louder than words, in a busy workplace, if you are poor at managing up, it is easy for your accomplishments to go unnoticed. When you manage up effectively, you're more likely to receive recognition for your contributions and achievements. This acknowledgment can boost your confidence and motivation, reinforcing positive self-management behaviors.
šŗ Watch this video to learn about managing up.
Here are five tips for managing up effectively:
Tip 1 - Understand your manager's preferences and communication style: Take the time to observe how your manager likes to communicate, their preferred communication channels, and their expectations for updates and feedback. Adjust your own communication style to align with theirs, whether it's providing concise email updates, scheduling regular check-ins, or seeking face-to-face meetings.
Tip 2 - Anticipate needs and provide solutions: Proactively anticipate your manager's needs and provide solutions before they're asked for. This can involve staying ahead of deadlines, identifying potential challenges, and offering suggestions or alternatives to address them. By demonstrating initiative and problem-solving skills, you can build trust and credibility with your manager.
Tip 3 - Seek feedback and act on it: Actively seek feedback from your manager on your performance, projects, and areas for improvement. Listen attentively to their feedback and take constructive criticism in stride. Use the feedback to adjust your approach, refine your skills, and demonstrate your commitment to continuous improvement.
Tip 4 - Manage expectations effectively: Be transparent with your manager about your workload, priorities, and capacity. Set realistic expectations for what you can accomplish and communicate any challenges or constraints you may be facing. By managing expectations effectively, you can avoid misunderstandings and ensure alignment on goals and timelines.
Tip 5 - Build a positive working relationship: Invest in building a positive and mutually respectful relationship with your manager. Take the time to get to know them as a person, show appreciation for their guidance and support, and demonstrate your commitment to the team's success. Building a strong rapport with your manager can make it easier to navigate challenges, collaborate effectively, and advocate for your needs.
Following these tips will help you become a "low-maintenance superstar," as mentioned in the video!
Advise Rachel
ā Read the following scenario about the experience of a 2nd year Kibo student during their internship role. Then, based on what you now know about self-management and managing up, give Rachel some advice on what she could do to improve her situation and turn her internship experience around.
When Rachel joined GlobeTech for a summer software engineering internship 3-weeks ago, she was eager to learn and contribute to real-world projects. However, in her first few weeks, she dove into her assigned tasks without seeking clarification or guidance from her manager, Mark. She was hesitant to ask questions for fear of appearing incompetent, so she worked in isolation, often missing important details and deadlines. As a result, Rachel's work didn't meet the expected quality standards, and Mark started to notice issues with her performance.
Feeling bad about her performance, Rachel started to avoid interacting with Mark, hoping to figure things out on her own. When Mark finally reached out to check on Rachel's progress, he was surprised by the lack of clarity and organization in her work. He tried to provide constructive feedback and guidance, but Rachel seemed defensive and unwilling to accept help.
Now, a third of the way through her internship and despite being an A student with strong technical skills, Rachel is still struggling to prioritize tasks, communicate effectively, and collaborate with her manager and team members.
Working With Others
šŗ Watch this video on the importance of cultivating quality relationships at work (2:23)
As the video explains, we often have to work with people we would not otherwise choose to spend time with. Interpersonal conflict is inevitable. In order to move through and learn from interpersonal conflict, you can focus on managing yourself and your reaction. In this lesson, we'll explore three key habits for working effectively with others:
- Be professional
- Be ethical
- Build relationships
Be Professional
Stepping into a professional environment may feel overwhelming. However, you can navigate work with confidence.
First impressions matter. From the moment you walk through the office doors (or join the first virtual meeting), remember that you are representing both yourself and the organization. Dress appropriately for the workplace, ensuring your attire is professional and aligns with the company's dress code. Remember, it's always better to be slightly overdressed than underdressed. Practice good hygiene and grooming habits to present yourself in a polished manner. A neat appearance will not only boost your confidence but also show that you take your role seriously. Your appearance matters, even in a virtual workplace. For video calls, you should be in a quiet place and test your audio and video connection. You should ensure your background is professional and does not distract from your work.
Time management and punctuality are key to demonstrating professionalism. Arrive at work and meetings on time, as this shows respect for other people's schedules. If you anticipate being late or unable to attend a meeting, notify the relevant parties in advance. Do what you say you will do, and meet deadlines. Refer to the previous lesson on staying organized.
Collaboration and teamwork are essential skills. You will likely work alongside a diverse group of individuals with varying expertise and backgrounds. Embrace the opportunity to collaborate and contribute to team projects. Remember to actively participate in meetings, share your ideas, and listen to the perspectives of others. Respect different viewpoints and be open to constructive feedback.
Lastly, maintain a positive and professional attitude. Be proactive and demonstrate a willingness to learn and take on new challenges. Show enthusiasm for your work and be receptive to feedback and guidance. Additionally, maintain a sense of professionalism in all your interactions, even in more casual settings. Avoid gossiping or engaging in negative conversations that can harm team dynamics. Treat everyone with kindness and respect, regardless of their position or role within the organization.
Professionalism is not just about following rules; it's about embodying values that contribute to a harmonious and productive work environment.
Be Ethical
Ethics serve as the moral compass in any professional setting. They shape how we conduct ourselves and make decisions. You'll encounter numerous situations where ethical judgment will be vital. Remember, acting ethically means doing what is right, even when it may be difficult or inconvenient. This involves treating colleagues, clients, and stakeholders with respect, honesty, and fairness. It is important to embody ethical principles, such as integrity, confidentiality, and transparency, which form the foundation of professional conduct.
Understanding the legal landscape in your industry is crucial to your success. Familiarize yourself with the laws and regulations relevant to your field, such as intellectual property rights, data privacy, and anti-discrimination laws. If you are uncertain about these, ask your supervisor. Ensure that you avoid conflicts of interest and the potential consequences they can have on your reputation and the organization as a whole.
It is important to recognize that ignorance of the law is not a defense if legal issues arise. Be mindful of your responsibilities when handling sensitive information. Acting in violation of ethical standards or laws not only damages your professional reputation but can also have severe legal repercussions for both you and the organization. This may include fines, legal penalties, loss of employment, and damage to personal and professional relationships.
By adhering to legal standards, you contribute to a safe and compliant work environment. Making ethical choices and complying with the law is not only the right thing to do but also protects your own future and the welfare of the organization you represent.
Build Relationships
Being an effective colleague is not only about getting work done. As you embark on industry experience, you should prioritize both doing good work and building strong relationships.
šŗ Watch this video for ten tips on building healthy relationships at work(4:58)
In the video, John English reveals the 4 keys to creating healthy work relationships with an emphasis on communication and establishing psychological safety. The keys are:
- Presence; each person has to be present in the interaction.
- Clarity and understanding; we have to be clear about what we are saying/doing and the end goal.
- Respect and appreciation for one another.
Building a strong professional network opens doors to new opportunities, helps you gain valuable insights, and enhances your personal growth. It's all about creating a community of individuals who can support and guide you throughout your career. So, don't be afraid to step out of your comfort zone, introduce yourself to new people, and engage in conversations that go beyond the surface level.
When it comes to networking, quality trumps quantity. Take the time to understand other people's perspectives, listen actively, and show genuine interest in their work. Networking is a two-way street, so remember to offer your help and support whenever possible. Building trust and rapport takes time, but the connections you make can be invaluable throughout your professional journey.
During your industry experience, aim to network with your peers, supervisors, and colleagues. You can do this by:
- Participating in company-sponsored activities
- Reaching out to people you want to get to know and asking for a coffee chat or an informational interview
Networking is not just about exchanging business cards; it is a continuous process that requires effort and authenticity. By approaching it with a genuine desire to connect, learn, and support others, you'll build a strong network that can greatly contribute to your personal and professional growth.
While you should be getting to know your colleagues, remember that you will be evaluated first and foremost on the quality of your work. Cementing your reputation as someone who does high-quality work is critical. Your colleagues will be more open to building relationships and helping you connect with others in their network if they see you as someone who produces strong work.
Peer Reviewed Resource
ā Read the following research paper Developing a Learning-Centred Framework for Feedback Literacy
Once you have read the article, complete the activity below.
Feedback Literacy Reflection Read through the feedback literacy categories provided in the padlet below, and use the "āļø Rate" button at the bottom of each post to rate how often you practice each category of feedback literacies.
Citation:: Elizabeth Molloy, David Boud & Michael Henderson (2020), Developing a learning-centred framework for feedback literacy, Assessment & Evaluation in Higher Education, 45:4, 527-540, DOI: 10.1080/02602938.2019.1667955
Feedback is a Gift
āHow do you feel about giving, receiving, and asking for feedback? Share your thoughts in the padlet below.
Imagine you're writing code for a program. You spend hours working on it, making sure everything runs smoothly. Now, when you show your code to someone else ā maybe a professor, a colleague, or even a friend ā they give you feedback. They point out areas where your code could be improved, suggest better ways to solve problems, or even find bugs you hadn't noticed. At first, it might feel like criticism, and it's natural to feel a bit defensive. However, if you think about it, that feedback is incredibly valuable. Here's why:
-
Feedback helps you learn and grow. By understanding what you did well and where you can improve, you become a better programmer. Each piece of feedback is like a lesson that helps you become more proficient in coding.
-
Others might see things in your code that you didn't notice. They might have different experiences or knowledge that allows them to offer insights you hadn't considered. This broadens your understanding and improves the quality of your work.
-
Learning to accept feedback gracefully is an essential skill in any field, including computer science. It teaches you to separate your work from your self-worth and to see criticism as an opportunity for improvement rather than a personal attack.
-
Feedback helps ensure that your code is of high quality. By having others review it, you can catch errors and improve efficiency before deploying it in a real-world scenario. This can save time and resources in the long run.
-
In the professional world, coding is rarely a solo activity. You often work in teams where giving and receiving feedback is crucial for collaboration. Learning how to give and receive feedback effectively fosters better teamwork and communication skills.
Receiving Feedback
Advise John
ā Read the scenario below, and give John advice on how he should respond to Mohammed's feedback.
It is Sunday afternoon, and Mohammed, an instructor at Kibo, is grading the latest set of assignments submitted by his students. Among them is John, a talented student known for his confidence in his coding abilities.
Mohammed begins to go through John's assignment, he notices several areas where improvement could be made. He meticulously jots down his feedback, highlighting potential errors and suggesting alternative approaches. Once he is finished grading all the assignments, he publishes the grades and feedback on Gradescope.
An hour later, Mohammed receives a DM from John in Discord, querying his assignment grade and requesting a meeting to clarify the feedback notes. Mohammed asks John to attend office hours the next day so that they can discuss.
At office hours: "John, I've looked over your assignment, and while there are some good aspects to it, there are also a few areas where you could improve," Mohammed begins, his tone gentle yet firm.
John leans back in his chair, crossing his arms defensively. "Really? I thought I nailed it. What seems to be the problem?"
"Well, for starters," Mohammed points to a section of John's code on the screen, "this algorithm could be optimized to run more efficiently. And here," he gestures to another part, "you've used a loop where a recursive function might be more elegant."
John's expression tightens as he listens to Mohammed's critique. "I don't know, Mohammed. I think my approach works just fine. Besides, I've already tested it extensively, and it's producing the correct outputs."
Mohammed nods patiently. "I understand that your code is functional, but as your instructor, it's my job to help you not just achieve functionality but also to improve your coding skills. Learning to write more efficient and elegant code will benefit you in the long run."
John lets out a sigh, feeling his pride bristle against the feedback. "I appreciate your input, Mohammed, but I think I'll stick with my current implementation for now. I've got a lot on my plate, and I don't want to spend too much time tweaking this assignment."
Mohammed raises an eyebrow, recognizing the familiar resistance. "John, I encourage you to take this feedback into consideration. Growth often comes from stepping out of our comfort zones and embracing constructive criticism."
With a reluctant nod, John acknowledges Mohammed's advice, though it's clear he's not entirely convinced. As he leaves the call, he mulls over the feedback, grappling with the decision to either accept it or not.
šŗ Watch this video to learn how to receive feedback.
Tip 1: Be open to feedback.
Tip 2: Listen to understand, not to refute.
Tip 3: Ask clarifying questions.
Tip 4: Respond with grace, not defensively. Do not deflect or dismiss the feedback.
Tip 5: Ask for time to process the feedback.
Tip 6: Summarize what you've heard.
Tip 7: Show appreciation.
Tip 8: Corroborate the feedback.
While receiving feedback verbally is often preferred, since we now learn and work in virtual contexts, the majority of the feedback that you receive might be in written form. Strangely, this often makes it hard to receive. Even when the same message is being communicated.
Written feedback can sometimes be harder to receive than verbal feedback due to several factors. Firstly, it lacks the tone and context often conveyed through verbal communication, leading to potential misinterpretation and perceived harshness. Additionally, the immediacy and opportunity for real-time dialogue provided by verbal feedback are absent in written forms, leaving recipients with a sense of finality. The permanence of written feedback, often documented or saved electronically, can increase anxiety about its content and implications. Additionally, without the nonverbal cues present in verbal interactions, written feedback may seem impersonal and difficult to interpret accurately. Finally, the lack of opportunity for immediate clarification or follow-up questions in written feedback can leave recipients feeling uncertain about how to address or improve upon the feedback received.
So for these reasons, it is worth also learning more about how to receive written feedback specifically.
šŗ Watch this video to learn how to receive critical written feedback.
The key to receiving written feedback is really separating the content of the feedback from your emotional reaction to the feedback. Firstly, approach the feedback with an open mind and a willingness to learn and improve. Take the time to read through the feedback, ensuring you understand the points being made. It can be helpful to read it multiple times to fully grasp the content and context. As the video demonstrated, reading the feedback multiple times with increasing levels of thoroughness can help "inoculate" you from the emotional response. When reading the feedback, try to remain objective and avoid taking the feedback personally, recognizing that it is meant to help you grow and develop. If you're uncertain about any aspects of the feedback, don't hesitate to seek clarification from the sender. Consider the feedback in relation to your goals and objectives, and identify specific actions you can take to address any areas for improvement.
Asking for Feedback
It is easy to think of feedback as a passive process. In other words, something that happens to you, whether you want it or not. This passive view of feedback involves receiving feedback without actively seeking it out or taking deliberate steps to engage with it. For example, receiving performance evaluations from your manager without actively soliciting input or reflecting on the feedback and taking action. This is a bad way to think about feedback. If you approach feedback passively, you ultimately won't get the most benefit from the feedback. because 1) you aren't using the feedback to improve your performance, and 2) you are waiting for someone else to do you the favor (and yes, it is a favor) of giving you feedback.
Alternatively, you can view feedback as an active process, where individuals take proactive steps to seek out feedback, reflect on it, and actively incorporate it into their work or behavior. This active approach to feedback will enable you to get the most out of feedback. The first step to having an active approach to feedback is to follow the tips and steps given above about how to receive feedback well. The second step, is to learn to proactively ask for feedback as well.
šŗ Watch this video to learn how to ask for feedback.
Here is a summary of the tips from the video:
Tip 1a - Make sure you have a clear understanding of what kind of feedback you are looking for so you can be clear on what you are looking to improve.
Tip 1b - Use a framework when asking for feedback, e.g., The Continue, Stop, Start framework.
Tip 2 - Give the person permission to provide open and honest feedback, then honor that request.
Tip 3 - Listen without judgement.
Tip 4 - Write down everything they have to say.
Tip 5 - Thank the person for their feedback.
Tip 6 - Report back on how you used their feedback.
(Optional) Giving Feedback
In this lesson, we won't delve into how to give feedback, but below are two optional videos that deal with the topic.
šŗ Watch this video to learn how to give feedback.
šŗ Watch this video to learn how to give peer feedback.
Brief History of Open Source
The idea of freely sharing knowledge and resources has been around for centuries, but the open source movement as we know it today can be traced back to the early days of computing.
Early Beginnings
In the 1950s and 1960s, computer software was often bundled with hardware, and source code was freely shared among researchers and developers. During this time, it was common for programmers to collaborate, share ideas, and modify each other's code to improve and innovate.
However, in the 1970s and 1980s, as the software industry began to grow and commercialize, companies started to view software as a valuable asset and began to restrict access to source code. This shift marked the beginning of the divide between proprietary software and the emerging open source movement.
The Birth of Free Software
In response to the growing restrictions on software access and distribution, computer scientist Richard Stallman founded the Free Software Foundation (FSF) in 1985. The FSF's goal was to promote the development and use of free software, which they defined as software that grants users the freedom to run, study, share, and modify the code. This concept is similar to open source but places a greater emphasis on the ethical and political aspects of software freedom.
Stallman and the FSF went on to develop the GNU Project (which stands for "GNU's Not Unix"), an ambitious effort to create a completely free and open operating system. While the GNU Project provided many essential components, it was missing a critical piece: a free and open kernel, the core component of an operating system.
The Arrival of Linux
In 1991, a Finnish computer science student named Linus Torvalds developed a free and open source kernel called Linux. When combined with the GNU system, Linux formed a complete, free, and open source operating system that is still widely used today. The success of Linux helped to popularize the concept of open source and sparked a wave of new projects, tools, and technologies.
The Open Source Initiative
In 1998, Christine Peterson, an Executive Director at Foresight coined the term "open source software" as a deliberate effort to make this field...more understandable to newcomers and to business[es]. She, alongside Eric S. Raymond, Bruce Perens, and other developers and advocates then created The Open Source Initiative (OSI) to spread more awareness about this concept. From there, the OSI developed the definition of open source, a set of criteria that software must meet to be considered open source. These criteria include free distribution, source code availability, derived works, and license integrity.
The OSI's efforts to promote open source led to a surge of interest and adoption by both individuals and organizations. Today, open source software is widely used across various industries, and many well-known technology companies, such as Google, IBM, Amazon, Meta, and Microsoft, actively support and contribute to open source projects.
The Growth of Open Source Communities
As the open source movement gained momentum, numerous communities and platforms emerged to facilitate collaboration and knowledge sharing. Some notable examples include:
- SourceForge: Launched in 1999, SourceForge was one of the first web-based platforms to provide tools and resources for developers to collaborate on open source projects. At its peak, SourceForge hosted thousands of projects and attracted millions of users.
- GitHub: Founded in 2008, GitHub quickly became the go-to platform for hosting and collaborating on Git repositories. Today, GitHub is home to millions of open source projects and boasts a vibrant community of contributors from around the world.
- GitLab: Launched in 2011 as an open source alternative to GitHub, GitLab offers a suite of tools and features for managing Git repositories, tracking issues, and facilitating collaboration.
These platforms have played a crucial role in fostering the growth of open source communities and making it easier for developers to contribute to and collaborate on projects.
The Rise of Corporate Involvement
In recent years, there has been a significant increase in corporate involvement in open source projects. Many companies now recognize the value of open source and actively contribute to and support various projects. Some companies have even gone so far as to open source their own internal tools and technologies, such as Google's TensorFlow and Facebook's React.
This increased corporate involvement has not only led to more resources and support for open source projects but has also helped to legitimize the open source movement and encourage wider adoption.
The Evolution of Open Source
The open source movement has come a long way since its early beginnings. Today, open source software is everywhere, powering everything from websites and mobile apps to artificial intelligence and machine learning algorithms.
As open source continues to evolve, new projects, tools, and technologies are constantly emerging, pushing the boundaries of what's possible and driving innovation across a wide range of industries.
The growing popularity of open source has also led to a thriving ecosystem of conferences, meetups, and online communities where developers can come together to learn, collaborate, and share their knowledge. By participating in these events and engaging with the open source community, you'll have the opportunity to expand your skills, build your network, and stay up-to-date with the latest developments in the field.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into material created by Kibo School.
Open Source Licensing
For software to be considered open source, it must be released under a license that grants users the right to access, modify, and distribute the source code. There are numerous open source licenses available, each with its own set of terms and conditions. Some popular open source licenses include the MIT License, the GNU General Public License (GPL), and the Apache License.
These licenses are crucial because they ensure that the software remains open and accessible to everyone. By granting users the right to view, modify, and distribute the code, open source licenses promote a culture of collaboration, innovation, and shared knowledge.
Open source licenses range from permissive to copyleft. Permissive licenses, like MIT, Apache, and BSD, are minimal in restrictions, allowing for broad freedom in using and incorporating software into both open source and proprietary projects. Copyleft licenses, such as GPL, AGPL, and LGPL, require that modifications and derived works also be distributed under the same license, ensuring the software remains free and open.
Watch this short interview with Ibrahim Haddad (VP, Strategic Programs, The Linux Foundation). He shares his knowledge the ubiquity of open source softare, the use of automated tools to identify and track licensed components, and the the impact that generative AI will have on open source.
A valuable skill in software development is understanding license compatibility, particularly when combining software under different licenses or integrating open source components into proprietary projects. Compatibility issues can limit how software is combined or modified, so it's important to ensure compliance to maintain legal and ethical standards. Incorporating open source software into proprietary projects comes with obligations. Depending on the license, developers may need to release source code changes or respect certain distribution conditions. Understanding these obligations is crucial to using open source software ethically and legally in a commercial context. In industry, corporations will often provide guidance to employees about what is and is not allowable use of open source software. It is crucial that you familiarize yourself with and abide by these rules, as improper use of open source software could cause several reputational damage to the company and, in the worst case, cost the company millions of dollars in legal fees or fines.
Additional Resources
If you are looking to delve into open source licensing, understanding the legalities, implications, and real-world applications, there are several excellent resources available. Many of these resources include case studies, analyses, and discussions about real incidents involving open source software (OSS) licensing, providing valuable insights into the practical aspects of OSS use and compliance.
1. Open Source Initiative (OSI)
- Website: Open Source Initiative
- Details: The OSI is a global nonprofit that advocates for open source and is the steward of the Open Source Definition. Their website provides a wealth of information on different OSS licenses, the principles of open source, and the legal implications of OSS development and use.
2. Free Software Foundation (FSF)
- Website: Free Software Foundation
- Details: The FSF promotes the use of free software and supports the rights of all software users. They offer resources on GNU licenses (a set of copyleft licenses), legal issues, and case studies highlighting enforcement actions and compliance stories.
3. Software Freedom Law Center (SFLC)
- Website: Software Freedom Law Center
- Details: The SFLC provides legal representation and other law-related services to protect and advance Free and Open Source Software. Their website includes guides, legal resources, and case studies on issues related to OSS licensing.
4. GitHubās Open Source Guides
- Website: Open Source Guides
- Details: GitHub offers a collection of resources to help individuals, communities, and companies learn about open source. While not focused solely on licensing, these guides cover a broad range of topics, including legal aspects and how to contribute to open source projects.
5. TLDRLegal
- Website: TLDRLegal
- Details: This website simplifies and explains software licenses in plain English. Itās a great starting point for understanding the basics of various open source licenses, though it doesn't dive deep into case studies.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into existing material created by Kibo School.
Peer Reviewed Resource
ā Read the following research paper Rules of Engagement: Why and How Companies Participate in OSS
Once you have read the article, complete the activity below.
Literature Reflection After reading through the paper, spend some time reseraching the Open Source project that you are currently contributing to. Are any companies involved in its development? if so, which ones and can you determine why based on what you learned in the paper? Post your discoveries to your team's Slack channel and discuss.
Citation:: M. Guizani, A. A. Castro-Guzman, A. Sharma, I. Steimacher: Rules of Engagement: Why and How Companies Participate in OSS, submitted to ICSE 2023.
The Secret Sauce
In this chapter, we'll share some lesser-known strategies and tips for making a lasting impact in the open source community. We'll discuss how to focus on open issues, gain traction in your contributions, and develop your open source resume using OpenSauced.
Open Issues ā More than PRs that Fix Typos
While fixing typos and improving documentation are valuable contributions to open source projects, it's essential to look beyond these low-hanging fruits and focus on addressing open issues. Tackling open issues not only helps the project move forward but also allows you to develop a deeper understanding of the codebase and demonstrate your problem-solving abilities.
Here are some tips for finding and addressing open issues:
-
Browse the issue tracker: Most open source projects use an issue tracker to manage bugs, feature requests, and other tasks. Browse the issue tracker to find issues that align with your interests and skills.
-
Look for beginner-friendly issues: Many projects use labels like "good first issue" or "help wanted" to indicate issues that are suitable for newcomers. Start with these issues to build your confidence and gain experience before tackling more complex tasks.
-
Understand the issue: Before diving into an issue, make sure you understand the problem and the desired outcome. If you're unsure about anything, ask questions or seek clarification from the project maintainers or other contributors.
-
Communicate your intentions: Before you start working on an issue, let the project maintainers and other contributors know that you're interested in addressing it. This can help avoid duplicated efforts and ensure that everyone is on the same page.
-
Test your changes: Once you've addressed an issue, test your changes thoroughly to ensure they work as expected and don't introduce new problems.
By focusing on open issues rather than just fixing typos, you'll make a more significant impact on the projects you contribute to and demonstrate your commitment to the open source community.
Getting Traction in Contributions
As you become more experienced in open source contributions, you may want to increase your impact on the projects you work on and gain recognition for your efforts. Here are some strategies for gaining traction in your contributions:
-
Become a regular contributor: Consistently contribute to the same projects over time. This will help you develop a deeper understanding of the codebase, build relationships with other contributors, and establish yourself as a valuable member of the community.
-
Take on challenging tasks: As you gain experience, tackle more complex issues and features. This will not only help you grow as a developer but also demonstrate your ability to handle challenging tasks and contribute meaningfully to the project.
-
Collaborate with others: Open source is all about collaboration. Work with other contributors to address issues, develop features, and share knowledge. By collaborating effectively, you'll not only improve the project but also build a strong network of connections in the open source community.
-
Share your expertise: Share your knowledge and insights by writing blog posts, creating tutorials, or giving presentations about the projects you work on. This will not only help others learn from your experiences but also establish you as a thought leader in the open source community.
-
Mentor new contributors: As you become more experienced in open source contributions, consider mentoring new contributors who are just starting their open source journey. This can help you give back to the community, develop your leadership skills, and build a positive reputation.
Building Your Open Source Resume
Building a strong open source resume can help you showcase your skills, experience, and contributions to potential employers, collaborators, and the wider developer community. OpenSauced is an excellent tool for tracking your open source contributions and developing your open source resume. Let's look at how you can use OpenSauced to support your open source journey.
-
Sign up for an OpenSauced account: if you haven't already created an account, visit opensauced.pizza and sign up for an account using your GitHub credentials.
-
Visit Your Public Profile Page: After signing up, a public profile page will be created for you. This page will display your GitHub profile information and a list of your open source contributions. You can navigate to it by clicking on your username in the top right corner of the page.
- Build Your Open Source Resume: From here, you'll be able to add highlights to Pull Requests and Issues that you've contributed to. You can also add a description and links to your open source resume. These will be aggregated into a single page that you can share with others, as well as a summary of your contributions that will be displayed on your public profile page.
Let's showcase our guestbook contribution from the previous chapter! In your profile, you'll see a "Highlights" section with a text input. When you click this, you'll be able to add a title, some thoughts, and a link to your PR. This will be displayed on your public profile page. Let's add a highlight for our guestbook contribution.
Effectively Highlight Your Contributions
Important information to include when you're highlighting your contributions:
- New material you've created,
- Project details (tools, libraries, size, and complexity),
- The type of your contributions: bug fix, feature, performance, documentation, etc.,
- The details of your contribution including improvements and impacts made on the project and on the community,
- Collaboration and teamwork details.
Formatting Your Highlight
To be most effective in highlighting your contributions, we recommend using the following format:
- Description: When highlighting your contribution, we recommend mentioning the impact that it had on the overall project. This would be helpful in highlighting your qualifications for job positions, especially if you have employment gaps. Consider using the following model to help you craft this highlight into a story:
- Success verb + noun + metric + outcome.
- Example: While I was reviewing some pull requests for this year's GirlScript Summer of Code, I noticed that most of them would not merge in spite of me and the owner giving approvals. So, I created a GitHub Action where pull requests automatically merge once they have passed the deployment steps(successive verb + noun), which increased productivity rates by 80%(metric + outcome).
- Add a repo: Provide the complete name of the repository to which you are making contributions.
- URL: Paste the URL to your pull request, issue or your blog post.
Share it!: Once you've built up a portfolio of open source contributions, you can share your OpenSauced resume with others by clicking the share button in the header of your profile page. This can be especially helpful when applying for jobs, networking with other developers, or promoting your work in the open source community.
By leveraging OpenSauced to track your open source contributions and develop your resume, you'll be better equipped to showcase your skills, experience, and impact in the open source community.
In conclusion, getting started with open source contributions and making a lasting impact on the projects you work on requires a combination of technical skills, collaboration, and persistence. By focusing on open issues, gaining traction in your contributions, and leveraging tools like OpenSauced, you'll be well on your way to a successful and fulfilling open source journey.
Material in this lesson is from (āIntro to Open Source with OpenSaucedā)[https://intro.opensauced.pizza/#/]. The material is licensed under the (CC 4.0 International License)[https://creativecommons.org/licenses/by/4.0/]). This material was re-ordered, modified, and integrated into existing material created by Kibo School.
Conclusion
As you conclude your term of Industry Experience, reflect on your journey over the last 10 weeks. This period was not just about contributing to an open-source project; it was about being exposed to real-world challenges and bolstered by the guidance of your technical mentor. Working in small teams, you've navigated the complexities of collaborative software development, from initial confusion and learning curves to achieving meaningful contributions that have left your mark on the project.
This experience has equipped you with a wealth of knowledge, not only in technical skills but in essential soft skills such as teamwork, communication, and problem-solving. The regular mentorship sessions provided you with a unique perspective on the industry and a deeper understanding of your personal strengths and areas for improvement. It's these insights, combined with your hands-on experience, that will prepare you for future roles in the tech industry.
As you move forward, take with you the lessons learned, the relationships built, and the confidence gained from overcoming challenges.
Work and Reflection
You will undertake supervised placement and practice under the guidance of an industry professional. You will submit daily standup updates on your work experience and learnings.
We will export a report of your daily standup updates and provide them to you in a PDF form, which you will upload below.
Daily Checkins & Time Tracking
Tracking the time you spend on your industry experience or open-source contribution work each week is not only crucial for self-management but is also a required part of your participation in the program. We will be using Botimum in Slack for you to check in and check out whenever you're working. This method allows us not only to ensure you're developing disciplined work habits and managing your time effectively but also to collect this data as part of your assessment. Regularly logging your hours helps prevent procrastination and makes your workflow transparent to your team members, letting them know when you're available or focusing on tasks. Remember, this practice is about more than just fulfilling a requirement; it's about enhancing your productivity, honing your time management skills, and contributing to a supportive and collaborative team dynamic.
Daily Standups
Standups are a staple in the tech industry, serving as a key component of agile methodologies to ensure team alignment, facilitate quick problem-solving, and foster open communication on a daily basis.
As part of your open-source experience, beginning in the second week, you'll be engaging in daily standups to ensure continuous communication and progress within your project team. Standups will be conducted asynchronously via a dedicated bot in Slack. This lesson outlines expectations for your daily standup participation, provides examples of meaningful updates, and introduces the rubric for evaluating your standup contributions at the end of the term.
Rubric for Evaluating Standup Updates
1. Completeness
- Excellent: Provides detailed responses to all questions, clearly outlining activities and feelings.
- Good: Answers all questions with sufficient detail but may lack some specificity in describing tasks or emotions.
- Fair: Responses are brief and lack detail in one or more areas, making it difficult to assess progress or well-being.
- Poor: Omits one or more questions, offers very little detail, providing no meaningful insight into daily activities or challenges.
2. Clarity and Conciseness
- Excellent: Updates are clear, concise, and to the point, with no unnecessary information, making it easy for team members to understand tasks and progress.
- Good: Generally clear and concise but may include minor unnecessary details or could be more straightforward in explaining tasks.
- Fair: Some responses are vague or overly wordy, clouding the understanding of activities or needs.
- Poor: Updates are unclear, overly brief, or excessively verbose, hindering comprehension of activities, feelings, or blockers.
3. Engagement and Responsiveness
- Excellent: Actively engages with feedback or questions from mentors and teammates, demonstrating a willingness to collaborate and adjust based on input.
- Good: Responds to feedback and questions but may not always initiate or seek out engagement actively.
- Fair: Occasionally engages with or responds to direct questions but generally does not show proactive communication.
- Poor: Rarely or never responds to feedback, questions, or direct communications, showing a lack of engagement with the team process.
Submitting Your Work
- You will be automatically prompted in the Slack Industry Experience team to provide your update each week day.
- Complete the update as requested using the guidelines listed above.
- At the conclusion of the term, you will receive a report on your Daily Standup participation and quality.
- Export this report as a PDF and upload to Gradescope using the appropriate link for a grade.
- Export this report as a PDF and upload to Anchor using the link below to receive credit from Woolf.
Mentor Evaluation
During the final week of your Industry Experience course, your Technical Mentor will be asked to complete the following evaluation form based on your performance during the 10-week experience. Please read through this form carefully, so that you understand how you are being evaluated. The Technical Mentor evaluation will make up 40% of your final grade for this course.
Technical Mentor's Industry Experience Evaluation
Background
Thank you for serving as a volunteer technical mentor and for supporting a student through their Industry Experience course. This experience, taken for academic credit, requires students to work collaboratively while making meaningful contributions to an open-source software projects. Students are expected to complete 30 hours of work per week (300 hours total). As part of their evaluation, we rely on your insights and feedback to assess their performance and readiness for future roles in the industry.
Part 1: Background Information
- Student's Name: ___________________________________________________
- Open Source Project: ______________________________________________
- Technical Mentor: _________________________________________________
- Date of Evaluation: ________________________________________________
Part 2: Student Evaluation
Please provide your feedback on the studentās performance, focusing on the aspects below. Rate their performance according to the scale provided and offer comments that could further elaborate on their rating. Please refer to the table below for level descriptions corresponding to each performance category.
Rating Scale
- New Grad Hire Level - Exceptional performance, meeting the level of a new graduate.
- Experienced Intern Level - Strong performance, matching expectations around for an experienced ore repeat intern.
- First-Time Intern Level - Basic performance, in line with what is expected from a first-time intern.
- Below Intern Level - Performance does not meet the basic expectations of an intern.
Performance Categories
# | Performance Category | Mentor's Comments | Rating |
---|---|---|---|
1 | Technical Skills Describes the intern's ability to apply technical knowledge and skills relevant to the field. | ||
2 | Code Contribution (Quantity & Quality) Evaluates the intern's contributions to code in terms of both volume and adherence to best practices. | ||
3 | Initiative Assesses the intern's proactiveness in taking on tasks, learning new skills, and contributing beyond assigned work. | ||
4 | Communication Focuses on the intern's ability to communicate effectively in a remote work environment. | ||
5 | Professionalism (Attendance, Promptness, Dependability) Evaluates the intern's adherence to professional standards in a remote setting, including reliability and punctuality. |
Part 3: Overall Recommendation
- Recommend to hire for future internship/full-time position
- Do not recommend to hire for future internship/full-time position
Additional Comments / Feedback:
Level Descriptions
Criteria | New Grad Hire Level | Experienced Intern Level | First Time Intern Level | Below Intern Level |
---|---|---|---|---|
Technical Skills | Demonstrates advanced problem-solving skills, can independently tackle complex issues, and contributes innovative solutions. | Shows solid understanding and application of technical principles, can handle moderately challenging tasks with minimal supervision. | Has foundational technical skills, requires guidance for most tasks but is able to apply learned concepts with support. | Struggles with basic concepts and requires frequent assistance, showing limited application of technical knowledge. |
Code Contribution (Quantity & Quality) | Submits high-quality code that is well-documented, efficient, and exceeds project requirements, with significant contributions. | Consistently delivers good quality code that meets project guidelines, demonstrates understanding of project architecture, and contributes meaningfully. | Contributes to the project with basic code submissions that generally meet requirements but may require revisions for optimization or compliance with best practices. | Contributions are minimal or often require substantial revision, demonstrating a lack of understanding of coding standards or project objectives. |
Initiative | Actively seeks out new responsibilities, leads peers, and shows exceptional drive in learning and applying new technologies or methodologies. | Willingly takes on tasks, shows interest in expanding skills and knowledge, and occasionally goes beyond the basic requirements. | Completes assigned tasks and shows some willingness to learn, but may need encouragement to take on new challenges. | Does only what is required (if that), shows little interest in taking on new tasks or expanding knowledge and skills. |
Communication Clarity | Communicates with clarity and precision in all forms (oral, written), effectively tailors communication for different audiences, and excels in remote collaboration tools. | Communicates effectively most of the time, is able to express ideas clearly, and uses remote collaboration tools competently. | Generally communicates ideas in a comprehensible manner but may occasionally struggle with clarity or effective use of remote collaboration tools. | Often faces challenges in expressing ideas clearly, struggles with adapting communication for different audiences, or frequently misuses remote collaboration tools. |
Professionalism (Attendance, Promptness, Dependability) | Always reliable, meets all deadlines, and maintains professional demeanor in all interactions; serves as a model of professionalism. | Usually reliable, meets most deadlines without issue, and demonstrates professionalism in interactions. | Sometimes misses deadlines or meetings but shows an understanding of professional expectations and makes efforts to improve. | Frequently misses deadlines or meetings, shows a lack of commitment to the internship, and needs significant improvement in professionalism. |
Submitting Your Work
- Please coordinate with your Technical Mentor to ensure that they have the correct information to complete your Technical Mentor Evaluation. The link to the form for them to complete will be shared with them by us in the final two weeks of the term.
- You will be emailed a copy of the mentor's evaluation upon its completion by the mentor.
- Once you have received a copy of the evaluation, please export it as a PDF and upload to Gradescope for a grade.
- Upload the pdf of your Technical Mentor Evaluation to Anchor using the link below to receive Woolf credit.
Final Report
The final report is worth 40% of your final grade for the course. Late submissions will not be accepted so complete it early or on time.
You will draft a report describing your industry experience. The report should be in the form of a blog post and should include:
-
Technical Details
- Description of the open source project that you contributed to.
- A description of the issue(s) that you worked on.
- Technical details about the work that you completed to resolve the issue(s).
-
Personal Accomplishments
- Discuss your personal contributions and achievements.
- Highlight what you are most proud of, such as overcoming a challenge, a particular part of the issue you worked on, or a skill you developed.
-
Challenges
- Identify the hardest aspects of the project.
- Reflect on your personal struggles, whether technical, collaborative, or conceptual.
- Be honest and specific about the challenges faced and strategies you employed to overcome them.
-
Learning about Software
- Reflect on the technical skills or software knowledge you gained.
- Discuss any new programming concepts, tools, or methodologies you learned.
-
Learning about Teamwork and Project Management
- Share insights gained about teamwork and project management.
- Reflect on aspects like collaboration, communication, and personal time management.
This report and reflection is your opportunity to look back on the team project experience, evaluate your learning and contributions, and provide insights into the team dynamics. It's a chance for introspection and to assess the overall journey of the project.
Writing Tips
- Be reflective and honest in your responses.
- Use specific examples to illustrate your points.
- Write clearly and concisely, focusing on your personal experience and learnings.
Reminder
- This report is an individual assignment and should be your own thoughts and assessments.
- It's not just about evaluating the project's outcome but also about understanding your growth, learning, and the dynamics of working within a team.
Evaluation Rubric
1. Completeness and Depth of Content
- Exceptional: Provides a comprehensive report covering all questions with in-depth insights. Demonstrates thorough recollection and understanding of the entire industry experience journey, personal achievements, and team dynamics.
- Proficient: Covers most aspects of the reflection questions with good detail and understanding, but may lack depth in one area.
- Adequate: Addresses all questions but with superficial depth or missing nuances in some responses.
- Needs Improvement: Omits significant aspects of the reflection questions or provides only basic responses with little depth.
- Unsatisfactory: Fails to address multiple questions adequately, showing a lack of engagement or understanding of the project.
2. Insightfulness and Personal Growth
- Exceptional: Offers profound insights into personal growth, challenges faced, and learning experiences. Demonstrates significant self-awareness and a deep understanding of team and project dynamics.
- Proficient: Shows clear understanding and reflection on personal experiences and team interactions with relevant and well-articulated insights.
- Adequate: Reflections contain some insights, but they may be somewhat superficial or not fully explored.
- Needs Improvement: Offers limited insights, with minimal reflection on personal and team experiences.
- Unsatisfactory: Lacks meaningful insights, failing to reflect thoughtfully on personal experiences, team dynamics, and project learnings.
3. Writing Quality and Clarity
- Exceptional: Exceptionally well-written, adhering to the 7 Cs of Communication, engaging, and free of errors.
- Proficient: Well-structured and clear, adhering to most of the 7 Cs with minor errors that do not detract from overall communication.
- Adequate: Meets basic standards of clarity and coherence, but may have some issues with conciseness, concreteness, or minor grammatical errors.
- Needs Improvement: Lacks clarity or coherence in several areas, or has multiple grammatical or structural errors.
- Unsatisfactory: Poor writing quality, lacking in clarity, coherence, and correctness, with significant errors.
Submitting Your Work
Your work must be submitted to Anchor for degree credit and to Gradescope for grading.
- Export your blog post as a PDF document.
- Submit your pdf document to Gradescope using the appropriate link.
- Upload the pdf document to Anchor using the form below.