Intro to Open Source - Lesson 6 - Taking a Long Term Perspective on Your Career and Open Source

Welcome to the final lesson in this learning path. If you’ve followed all the lessons until now, you will now be able to join a community and make meaningful contributions there. Now that you know how to make contributions, let's take a step back from the details and consider the big picture. Specifically, let’s look at the long term benefits contributing to open source can have on you and your career.

Build your skills

Contributing to open source projects will gradually build your technical and non-technical skills. On the technical side, you will get better at all of the technologies and programming languages used in the project you contribute to, you will get better at working in larger codebases, and at reading others code. On the non-technical side, you will learn how to work asynchronously with others, and about everything that goes into making a product successful.

If you are making contributions in a technology for a prolonged period and getting feedback on those contributions, you will get significantly better with that technology. For example, if you are okay at programming in Go and then you contribute to Knative for a year, you will be much better at Go programming. You will also have a much better idea of what serverless event-driven systems are and how they work under the hood. Because open source gives you an opportunity to work in the technologies that interest and excite you, and get feedback from experts in those fields, it is a phenomenal way to grow your skills.

Furthermore, since code bases in open source projects can be much larger than many people's personal projects, working on open source gives you a chance to be exposed to what development in large codebases looks like. This is a really useful skill if you want to work at a large enterprise company which will likely have massive codebases they maintain. This is also a skill you can’t really develop on your own outside of a job or open source.

Another skill which is really important to develop is how to read and understand others' code (or your own from six months ago!). Generally speaking, if you work on software professionally, you will be working on code with other people, and on projects that were started by others. In these scenarios, it is critical that you understand what the existing code is doing, and what a set of changes to the code is trying to do. This is a very important skill in software! By writing more code, working in a large codebase, and reviewing others' code, you will naturally develop your ability to read and understand code.

On the non-technical side, one of the key skills you will gain is asynchronous collaboration. When you work in open source, you are collaborating with a “team” of others, both on the technical and non-technical aspects of the project. However, since contributions are generally done online, people tend to come from all over the world. This means that as you collaborate with others in the community, you will learn what it means to work in a distributed, asynchronous manner with a team all over the world. As work moves to hybrid, more and more teams are becoming geographically dispersed, and more and more of our interactions are becoming asynchronous and online. As such, developing these non-technical skills will help you throughout your career.

There are lots of key non-technical contributions that must be made for any product to be successful. These range from documentation to community management to UI design and to social media management. There is a lot of non-technical work being done! If you are a code contributor, you may not develop skills in any of these areas, but you will be interacting with the members of the community who do these non-code contributions such as UI/UX designers, product managers, and technical writers, so you will gain an appreciation for what else needs to be done for a product to be successful. If you are a non-code contributor then you will gain the same benefits to your skills that we described above for the code contributors, but in the area of non-code contributions you have been making. For example, if you work on contributing documentation to a project, your technical writing skills will improve immensely over time.

Benefits of Long-Term Participation

As we alluded to above, many of the benefits you get from participation in open source projects and communities only come if you participate for a longer period of time. If you make a one-time contribution, you will be able to fix something that has been annoying you about a project, and likely get a little exposure to the technical or non-technical components of the project you contribute to. If you think back to those skill growths we mentioned earlier, that large upskilling in your technical and/or non-technical skills won’t happen from just one contribution, although you would still get a similar growth of skills if you just contributed to open source for a long time, even if those contributions were all to different projects. However, there are some benefits to long term participation that you will only get from sticking to a particular project or community.

Firstly, if you work for a long term in a single project, you will gradually get a reputation within the community. People will know who you are and what quality of work you produce. They will see you gradually improve your contributions and grow your skills. This reputation will really help your professional network, as there will now be a large group of people who you have never worked with at the same company, who know how good your work quality is. If you need a reference or a referral for a job, this is a group of people who may be able to help you! You may also have opportunities come to you just based on your reputation. If you get a reputation for being really good at documenting highly technical tools in an easy to understand manner, then the next time someone has a technical tool that needs documentation, they will reach out to you and see if you are interested. Furthermore, since all of these contributions that you have been making are public, this reputation is not just limited to the people you directly interact with in the community. Anyone, such as recruiters and future employers can go and look at what you have done.

As you work in a project for a longer time, you will gradually gain a deeper understanding of the project and the direction it is going in. Your voice will also be taken more seriously as you stick around for longer, allowing you to have a larger voice in the direction of the project. This larger role in the community will let you more easily accomplish what you want to within the project. Additionally, more senior members of the community will often give you guidance on how to improve. As they see you sticking around for a long time and taking on more responsibilities, they will be happy to help you grow and develop within the community.

Joining a Community: Beyond Contributions

Many open source projects are community-driven, meaning that many of the more important roles and decisions are made through elections within the community. Also, since most of the contributions are coming from the community, the direction the project takes is determined in large part by the community. As we established above, numerous benefits come from contributing to a community for a long time. However, there is more to joining a community than just contributing to it. 

Firstly, most medium to large communities will have some form of text chat forum that you can use. For CNCF communities, that is slack. Other communities may use alternatives like Discord or Mattermost. There are many discussions in these forums, both on-topic and off-topic. By participating in these discussions you will over time become a part of the community. 

Communities will also run meetups, or give talks at conferences, or even run their own conferences. It can be really fun to go to these in-person meetups and meet the people you have been talking to through the screen for such a long time. Additionally, it can often be easier to brainstorm ideas in person, so many great ideas can be had at these in person meetups.

But most importantly, by joining the community conversations and events, you can learn from many diverse perspectives and backgrounds and make life-long connections with others.

Tips and Guidance for a Sustainable Open Source Journey

At this point, we are leaving you to begin your journey! However, we do have a few last tips and tricks for you. Additionally, if you ever get stuck, don’t hesitate to reach out to us @Calum Murray and @Leo Li on the CNCF slack, or @Cali0707 and @Leo6Leo on GitHub. Onto the last tips and tricks!

Remember to balance your open source contributions with the rest of your work, studies, and personal life. Set realistic goals and expectations for yourself, and don’t burn out from taking on too much! Contributing to open source can be an amazing experience, but it isn’t worth burning yourself out over it.

Try to engage in different roles within the community over time. This will expose you to the full scope of the project, and you will get to meet many other cool people as you do! If you spend some time working on the project's documentation, you might have new ideas about how to code your next new feature because you will have a better understanding of other existing features. If you spend a lot of time working on the development of a tool, you may be able to give good feedback on a new UI design, as you have spent so much time using that page as you test your changes. The more you expose yourself to other parts of the project and community, the more you will grow.

We wish you the best of luck on your open source journey, and we look forward to seeing you online!

 

Calum's headshot
Calum Murray
Software Engineering Intern
Calum is a Software Engineering Intern at Red Hat and an Engineering Science Student at the University of Toronto, where he majors in Electrical and Computer Engineering. He is passionate about Open Source, and strongly believes in building in the open by default. He is interested in the intersection of algorithms, control theory, distributed systems, and machine learning. Calum currently works on Knative Eventing, the Eventing Kafka Broker, and a Getting Started in Open Source with Knative Blog Series. He is also the lead of the newly revived User Experience Working Group in Knative.
Leo's headshot
Leo Li
Software Engineering Intern
Leo Li is currently a third-year computer engineering student at the University of Toronto, where he is also pursuing a minor in Artificial Intelligence. Leo has a passion for coding and is dedicated to building tools that can assist people in need and make a positive impact on the community. During his internship at Red Hat, Leo has been deeply involved in working with Knative Eventing and the Eventing Kafka Broker. He is also contributing to a blog series titled "Getting Started in Open Source with Knative." Furthermore, Leo is leading the IEEE student branch at the University of Toronto, where he is committed to fostering student community involvement. Through his work and leadership, Leo continuously strives to make a difference and drive innovation.