Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Collaborating on Open Source Software

Collaborating on Open Source Software

Collaborating on Open Source Software;
How I Started contributing to Open Source and Why You Should Too

There are several reasons you might want to contribute to open source software. For me, it was that I wanted to learn in a more useful way than doing programming challenges. So I looked into how I could contribute to open source projects that I use myself.
After contributing for almost two years, I notice that I have learned a lot from my contributions (which has been useful at work), as well as have made friends and have become part of a community.

In this talk I will share my experience with contributing to Cucumber, including an early mistake (merging something that wasn’t ready yet) and fixing it with the support of core maintainers, and still feeling welcome!
You’ll learn how how to find your project and contributions to start with, how to connect with the community to make sure your contributions are useful and the many different types of contributions you can make.

Contributing to open source is a way of giving back to the community. In addition, it is a way for you to learn, collaborate and become part of a community. Getting (constructive) feedback on a pull request and collaborating to make things even better is a great feeling!

Marit van Dijk

July 10, 2020
Tweet

More Decks by Marit van Dijk

Other Decks in Technology

Transcript

  1. Collaborating on
    Open Source Software
    JetBrains Technology Day for Java– July 10th, 2020
    @MaritvanDijk77
    github.com/mlvandijk
    medium.com/@mlvandijk

    View full-size slide

  2. Contributing to Open Source Software
    •Why (not) to contribute
    •What to contribute
    •How to contribute
    @MaritvanDijk77

    View full-size slide

  3. Why I got started with Open Source Software
    •Learn new things
    •Do something useful
    @MaritvanDijk77

    View full-size slide

  4. Reasons to contribute
    •Learning
    •Give back / Feel useful
    •“Scratch an itch” (fix something you need)
    •Build CV / Portfolio
    •Network
    •Other?
    @MaritvanDijk77

    View full-size slide

  5. Reasons not to contribute
    •It can be scary!
    https://www.youtube.com/watch?v=BO223Q4QZkA
    @MaritvanDijk77

    View full-size slide

  6. Reasons not to contribute
    •It can be scary!
    •Limitations: Time, Legal, …
    •Bad previous experience
    @MaritvanDijk77

    View full-size slide

  7. You can help!
    •Different ways to contribute
    @MaritvanDijk77

    View full-size slide

  8. My first project: Cucumber
    •Started: I liked using it
    @MaritvanDijk77

    View full-size slide

  9. My first project: Cucumber
    •Started: I liked using it
    •Stayed: The community
    @MaritvanDijk77

    View full-size slide

  10. What to contribute?
    •Code
    @MaritvanDijk77

    View full-size slide

  11. What to contribute: Code
    •Fix bugs
    @MaritvanDijk77

    View full-size slide

  12. What to contribute?
    •Fix bugs
    •Add new features // TODO
    @MaritvanDijk77

    View full-size slide

  13. What to contribute: Code
    •Fix bugs
    •Add new features
    •Refactor
    @MaritvanDijk77

    View full-size slide

  14. What to contribute: Code
    •Fix bugs
    •Add new features
    •Refactor
    •Add unit tests
    @MaritvanDijk77

    View full-size slide

  15. What to contribute: Code
    •Fix bugs
    •Add new features
    •Refactor
    •Add unit tests
    •Upgrade dependencies
    @MaritvanDijk77

    View full-size slide

  16. What to contribute: Code
    •Fix bugs
    •Add new features
    •Refactor
    •Add unit tests
    •Upgrade dependencies
    •Review PR’s
    @MaritvanDijk77

    View full-size slide

  17. What to contribute?
    •Code
    •Not code
    @MaritvanDijk77

    View full-size slide

  18. What to contribute: Not code
    @MaritvanDijk77
    https://pragprog.com/book/
    vbopens/forge-your-future-
    with-open-source

    View full-size slide

  19. What to contribute: Not code
    •Help the community
    @MaritvanDijk77

    View full-size slide

  20. Help the community
    •Answer questions
    •Slack
    •Gitter
    •Mailing list
    •IRC
    •etc
    @MaritvanDijk77

    View full-size slide

  21. Help the community
    •Answer questions
    @MaritvanDijk77

    View full-size slide

  22. Help the community
    •Answer questions
    •Pro tip: Consider adding that info to the
    documentation!
    @MaritvanDijk77

    View full-size slide

  23. What to contribute: Not code
    •Help the community
    •Documentation
    @MaritvanDijk77

    View full-size slide

  24. Documentation
    •Add info
    @MaritvanDijk77

    View full-size slide

  25. Documentation
    •Add info
    •Edit / clarify
    https://github.com/cucumber/docs.cucumber.io/issues/389 @MaritvanDijk77

    View full-size slide

  26. Documentation
    •Add info
    •Edit / clarify
    •Fix typos
    @MaritvanDijk77

    View full-size slide

  27. Documentation
    •Add info
    •Edit / clarify
    •Fix typos
    •Fix dead links
    @MaritvanDijk77

    View full-size slide

  28. Documentation
    •Add info
    •Edit / clarify
    •Fix typos
    •Fix dead links
    •Review PR’s
    @MaritvanDijk77

    View full-size slide

  29. Documentation
    •Add info
    •Edit / clarify
    •Fix typos
    •Fix dead links
    •Review PR’s
    •Provide feedback
    @MaritvanDijk77

    View full-size slide

  30. What to contribute: Not code
    •Help the community
    •Documentation
    •Issues
    @MaritvanDijk77

    View full-size slide

  31. Issues
    •Report issues
    • Ask if not sure
    • Check for duplicates
    • Provide relevant information: use template (or add one!)
    • Create an MCVE (https://stackoverflow.com/help/mcve)
    @MaritvanDijk77

    View full-size slide

  32. Issues
    •Report issues
    •Analyze issues
    • Reproduce
    • Add info (or tests!)
    @MaritvanDijk77

    View full-size slide

  33. What to contribute: Not code
    •Help the community
    •Documentation
    •Issues
    •Testing
    @MaritvanDijk77

    View full-size slide

  34. Testing
    •Bugfix
    •New feature
    •New release
    •Documentation / tutorials
    @MaritvanDijk77

    View full-size slide

  35. What to contribute: Not code
    •Help the community
    •Documentation
    •Issues
    •Testing
    •Other: Design, Product owner, etc.
    @MaritvanDijk77

    View full-size slide

  36. What to contribute: Not code
    •Help the community
    •Documentation
    •Issues
    •Testing
    •Other: Design, Product owner, etc.
    •Ask!
    @MaritvanDijk77

    View full-size slide

  37. What to contribute: Not time
    •Most projects run on volunteers
    @MaritvanDijk77

    View full-size slide

  38. What to contribute: Not time
    •Most projects run on volunteers
    •You (or your employer) can donate money
    •https://opencollective.com/
    •https://sfconservancy.org/
    •https://www.patreon.com/
    •https://tidelift.com/
    @MaritvanDijk77

    View full-size slide

  39. Money isn’t everything…
    without people to do the work
    @MaritvanDijk77

    View full-size slide

  40. Money isn’t everything…
    https://www.infoq.com/presentations/open-source-troubles-help/
    @MaritvanDijk77

    View full-size slide

  41. How to get started
    •Find a project
    @MaritvanDijk77

    View full-size slide

  42. Finding a project
    •A project you use:
    •You care
    •You’re already familiar
    @MaritvanDijk77

    View full-size slide

  43. Finding a project
    •Websites:
    •https://github.com/collections/choosing-projects
    •https://hacktoberfest.digitalocean.com/ (October)
    •https://www.codetriage.com/
    •https://up-for-grabs.net/#/
    •https://www.firsttimersonly.com/
    •https://opensource.guide/
    •http://yourfirstpr.github.io/
    @MaritvanDijk77

    View full-size slide

  44. How to get started
    •Find a project
    •Check how to contribute to that project
    @MaritvanDijk77

    View full-size slide

  45. Check how to contribute
    • README
    • CONTRIBUTING (a.k.a. HACKING)
    • LICENSE (a.k.a. COPYING)
    • Code of Conduct
    • Style guides
    • Contributor License Agreement (CLA) – some projects
    • Ask!
    @MaritvanDijk77

    View full-size slide

  46. How to get started
    •Find a project
    •Check how to contribute to that project
    •Pick a task
    @MaritvanDijk77

    View full-size slide

  47. Pick a task
    •Solve your own problem J
    @MaritvanDijk77

    View full-size slide

  48. Pick a task
    •Solve your own problem J
    •Check for “Good first issue” or similar
    @MaritvanDijk77

    View full-size slide

  49. Pick a task
    •Solve your own problem J
    •Check for “Good first issue” or similar
    •Ask!
    @MaritvanDijk77

    View full-size slide

  50. How to get started
    •Find a project
    •Check how to contribute to that project
    •Pick a task
    •Set up your environment (if needed)
    @MaritvanDijk77

    View full-size slide

  51. Set up your environment
    •Tools
    •Git / version control
    •Programming environment (IDE, JDK, …)
    https://www.jetbrains.com/community/opensource/#support @MaritvanDijk77

    View full-size slide

  52. Set up your environment
    •Tools
    •Git / version control
    •Programming environment (IDE, JDK, …)
    •Package manager (Maven, Gradle…)
    @MaritvanDijk77

    View full-size slide

  53. Set up your environment
    •Tools
    •Fork & clone the project
    @MaritvanDijk77

    View full-size slide

  54. Set up your environment
    •Tools
    •Fork & clone the project
    •See if you can build the project
    @MaritvanDijk77

    View full-size slide

  55. Set up your environment
    •Setup your environment
    •Fork & clone the project
    •See if you can build the project
    •If not: Ask
    (Pro tip: Add that info to docs!)
    @MaritvanDijk77

    View full-size slide

  56. How to get started
    •Find a project
    •Check how to contribute to that project
    •Pick a task
    •Set up your environment (if needed)
    •Collaborate!
    @MaritvanDijk77

    View full-size slide

  57. Collaborate: Your first PR
    •Discuss your intentions
    @MaritvanDijk77

    View full-size slide

  58. Collaborate: Your first PR
    •Discuss your intentions
    •Work on your contribution
    @MaritvanDijk77

    View full-size slide

  59. Collaborate: Your first PR
    •Discuss your intentions
    •Work on your contribution
    •Submit your contribution
    @MaritvanDijk77

    View full-size slide

  60. Collaborate: Your first PR
    •Discuss your intentions
    •Work on your contribution
    •Submit your contribution
    •Receive feedback & iterate
    @MaritvanDijk77

    View full-size slide

  61. Collaborate: Your first PR
    •Discuss your intentions
    •Work on your contribution
    •Submit your contribution
    •Receive feedback & iterate
    •Contribution accepted!
    @MaritvanDijk77

    View full-size slide

  62. Collaborate: Your first PR
    •Contribution declined…
    “No is temporary, yes is forever”
    https://blog.jessfraz.com/post/the-art-of-closing/
    @MaritvanDijk77

    View full-size slide

  63. Collaborate: Your first PR
    •Discuss your intentions
    •Work on your contribution
    •Submit your contribution
    •Receive feedback & iterate
    •Contribution accepted!
    •Ask & communicate!
    @MaritvanDijk77

    View full-size slide

  64. Collaborating on
    Open Source Software
    @MaritvanDijk77
    github.com/mlvandijk
    medium.com/@mlvandijk

    View full-size slide