All I Really Need to Know I Learned Contributing to Open Source

This is a follow up to my “Preparing For Your Ideal Development Career” info graphic/poster that dives deeper into gaining coding experience by contributing to open source.

One of the great dilemmas for somebody starting their software development career is “how do I get a job that requires experience if I can’t get a job because I don’t have experience”. The answer is to volunteer or get an internship. That is often easier said than done because you must find somebody with a development need and convince them you have enough skills to do the work without taking a lot of their time. In software development, we are lucky that we have a special kind of volunteering that you can do without having to convince anyone of your talent. This volunteering is contributing to open source.

Open source is software made available under licenses that provide freedoms to do things such as inspect, modify, redistribute and contribute to without charging or fear of being prosecuted for stealing or hacking. It has produced communities enabling individuals and organizations to share knowledge and effort so they don’t have to continually reinvent the wheel. Almost every developer and organization now relies on open source to accomplish their tasks whether it is their platform (Java, .NET Core, Node.js), their development tools (Eclipse, IntelliJ, Visual Studio Code, npm) or their frameworks and libraries (jUnit, Angular, React, Bootstrap). A common place for these communities to congregate is at https://github.com/.

These freedoms and communities can provide a welcoming place for you to learn, experiment and gain experience. Google believes that students can contribute, provide value and learn from the experience so much that they pay students through their Google Summer of Code (https://developers.google.com/open-source/gsoc/) initiative that claims to have involved 13,000+ students and contributions of over 33 million lines of code.

WARNING: Most open source communities are welcoming and supportive but there are some that aren’t. If you are concerned about having a negative experience review recent issues and code review feedback before contributing.

There are many valuable skills you can gain from contributing to open source that will follow you into your career without having to make a huge investment in time. Some of the contributions can take minutes for example documentation related fixes. Others may take hours or days. You get to choose the investment you want to make. Here is a list of skills I have gained by contributing to open source and you can too:

  • How to work and navigate a code base
  • How to manage issues/defects/bugs
  • How to use version control
  • How to work on a development team
  • How to take feedback
  • How to unit test
  • How to build software
  • How to use the project itself and the related technologies

How to work in and navigate a code base

One of the challenges I see when I interview people entering their development career is they have only ever worked in small green field and/or single person projects. They may have had a capstone project at the end of their academic career that they work on a small team but in almost every case, they end up segmenting the work so they don’t experience working in each other’s code. This is not reality and doesn’t prepare students. Professional developers typically spend more time reading other people’s code than writing their own code. Learning how to navigate and debug a large existing code base you have never seen before and then making changes to it to complete an assignment is an immensely valuable skill. The earlier you learn it the better you will be.

How to manage work items

In school a coding assignment is given and it is the responsibility of the student to get it done any way they see fit. On a single person or small team project that is fine but it doesn’t scale to real projects. There is a lot of coordination that needs to happen and progress that needs to be tracked. So, in large projects the work is broken down into different work items like user stories, features, issues, bugs or defects. These are typically recorded in some form of electronic issue system. The work is then assigned or picked up by a developer when their previous work item is completed. Open source projects are no different other than being volunteer work, you usually have more control over which work items you choose. This makes it nice because many open source projects will designate work items for newbies (http://up-for-grabs.net) that the project coordinators know will help new developers get into the groove and learn about the process, standards and governance of the project. By working on an open source project, you will learn how to accept an issue, reproduce the issue, commit the issue to version control with traceability back to the issue, make a pull request and close the issue. If you are lucky, you might even receive feedback on how to improve your code.

How to use version control

Every professional line of code no matter how important must be under version control in something like git. I used to find most people I interviewed didn’t have any experience with version control and some still don’t. However, with low cost of options like git and the popularity of GitHub this is changing. But I still find that most of that experience is on a single person project with very few commits or pushes. I also find that people starting out don’t usually follow best practices including grouping to many unrelated changes in a single commit. On these smaller projects, they also can just work on the master branch and don’t have to worry about multiple work streams that require more advanced concepts like branching, merging and conflicts. Because most open source projects are worked on by multiple people and represent multiple versions of a product, it will force you to understand how projects organize a repository, what gets version controlled, how hot fixes, release branches and feature branches work.

How to work on a development team

Software development is a team sport and requires multiple people from multiple disciplines. Open source exemplifies this by adding the distributed team aspect to the mix. Most likely you will work with people all over the world who you will never meet or interact with in person. This can help you improve your email and chatting etiquette. It will help you learn different governance and voting models. It will help you to write better commit comments and documentation so those that follow behind you will know why you did what you did.

How to take feedback

Code reviews are not a common practice in academia. A professor might give a little feedback but they are usually evaluating the output rather than quality of the code. An open source project however usually has some type of quality standard and control process. Usually after a pull request has been made an experienced developer on the project will review your code and evaluate the impact of your change. If your code doesn’t meet the quality standard for some reason you will receive feedback on what needs to change before resubmitting it. The first couple of times it might feel like an attack on your abilities but this feedback will make you a better programmer and help you to grow a thicker skin.

How to unit test

An important part of quality is including unit tests to prove your code functions properly. Most open source projects embrace unit testing since it gives contributors the confidence to make changes knowing they didn’t break anything else. Many open source projects won’t even take a contribution without an accompanying unit test. By following the unit test examples in the project, you can learn how to write and run unit tests, use mocking libraries and maybe even Test Driven Development (TDD).

How to build software

When I interview people, and ask how they build their software, I commonly get “I just press the button with the big green arrow to run it”. While this works on small projects, this is not how applications are built and deployed in the real world. Usually there is some type of build script or framework that orchestrates all the dependencies, quality checks and produces the final artifact. These builds are often run by a continuous integration server with each commit. In some environments, they may even automate the deployment of the artifact to a test or production environment. Working on an open source project will help you to get into this cadence and teach you how to use build tools as well as how to do continuous integration and continuous deployments.

How to use the project itself and the related technologies

You will also learn about the open source project itself which if you pick the right project might provide you with valuable insider information. I know people who have contributed to in demand projects like Bootstrap which gave them an advantage during the interview process because not only could they say they had experience with the project but they could point to specific enhancements they made to the project. Furthermore, I know companies that hire developers to work directly on open source projects will often hire those making great contributions first since the companies can review their contributions.

I am always amazed during an interview when people tell me they aren’t good enough to contribute source code to open source for free yet they want me to pay them to write source code on the job. This is a symptom of the imposter syndrome. I believe that contributing to open source and gaining the skills mentioned above will help fight that. It will give you something concrete to talk about during the interview as well as give you a portfolio of work to demonstrate your knowledge and capability.

Now that you are inspired to take that first step. Find a project you are interested in or you see in job requirements. Look through the projects issue lists and find some issues designated for newbies. Make the necessary changes and contribute them. I suspect making that simple documentation or code change will make a lasting change in you.

After you make the life changing contribution, give Manifest Solutions a call or visit us at http://agilitybootcamp.com. We want to help launch your career with our paid boot camp.

– Christopher Judd, CTO at Manifest Solutions