Skip to main content
Illustration: a branching commit graph merging a contribution back into main

Open source software powers the modern web, and contributing back is one of the most rewarding things a developer can do. Whether you are fixing a typo in documentation or implementing a major feature, every contribution matters.

This guide covers the practical side: choosing a project, reading it before you write code, preparing a pull request that is easy to accept, and handling review.

Finding the Right Project

Start with tools you already use. You will have context about the problem space and genuine motivation to improve something that affects your daily work. Look for repositories with a CONTRIBUTING.md file, active issue trackers, and maintainers who respond to issues within a reasonable timeframe.

Good first issues are often labeled “good first issue,” “help wanted,” or “beginner friendly.” These issues are specifically curated for newcomers and typically have additional context to help you get started.

A few quick signals tell you whether a project is a good place to spend your time:

  • Recent merged pull requests from people outside the core team. That shows outside contributions actually land.
  • A clear license in a LICENSE file. Without one, you have no defined right to use or modify the code.
  • A code of conduct and a respectful tone in issue discussions.
  • A working test suite you can run locally. It is much easier to change code safely when you can verify it.

Read Before You Write

Before touching code, spend some time with the project’s own documentation. CONTRIBUTING.md usually answers the questions maintainers are tired of repeating: how to set up the development environment, which branch to target, how commits should be formatted, and whether you need to sign a Contributor License Agreement or add a Developer Certificate of Origin sign-off to your commits.

Then read the issue you want to work on, including every comment. It may already have a proposed approach, a rejected one, or someone else working on it. If the change is more than a small fix, leave a comment describing what you plan to do and wait for a maintainer to agree. Ten minutes of discussion can save you a weekend spent on a pull request that does not fit the project’s direction.

Setting Up Your Fork

Fork the repository and create a feature branch with a descriptive name. Keep a reference to the original repository so you can stay current:

git clone https://github.com/<your-username>/<project>.git
cd <project>
git remote add upstream https://github.com/<owner>/<project>.git
git switch -c fix/date-parsing-timezone

Run the project’s install, build, and test commands before changing anything. If the tests fail on a clean checkout, you want to know that now, not after you have made changes and are wondering whether you broke something.

When the main branch moves on while you work, bring your branch up to date:

git fetch upstream
git rebase upstream/main

Some projects prefer merging over rebasing; follow whatever CONTRIBUTING.md says.

Making Your First Contribution

Write your code, following the project’s coding standards and including tests where applicable. Keep your changes focused — a pull request that addresses one issue is much easier to review than one that tackles five.

Focus also means resisting nearby cleanups. If you notice inconsistent formatting or a function you would have written differently, leave it alone or open a separate pull request. Unrelated changes make the diff harder to read and the review slower.

For bug fixes, the most persuasive thing you can include is a test that fails before your change and passes after it. It proves the bug existed, shows that your fix addresses it, and stops it coming back.

Make your commits readable too. A good commit message has a short summary line in the imperative mood and, when it helps, a body that explains why the change was needed:

Fix timezone offset when parsing ISO dates

Dates without an explicit offset were parsed as UTC, which shifted
event times for users in other zones. Parse them as local time to
match the documented behaviour.

Run the project’s linter and formatter before pushing. Many projects check these automatically, and a failing check is an easy reason for a reviewer to put your pull request aside.

Writing a Good Pull Request

Write a clear pull request description that explains the problem, your solution, and any trade-offs you considered. Link to the relevant issue. If your change affects the user interface, include screenshots.

A structure that works for most changes:

  1. What problem does this solve? One or two sentences, with a link to the issue.
  2. What did you change? A short summary of the approach, especially anything non-obvious.
  3. How did you test it? The commands you ran and any manual steps a reviewer can repeat.
  4. What is left open? Known limitations or follow-up work you chose not to include.

If the project has a pull request template, fill in every section. Opening a draft pull request is a good way to get early feedback on direction before polishing the details.

Code Review Etiquette

Be patient with maintainers. They are often volunteering their time. Respond to review feedback graciously, ask clarifying questions when feedback is unclear, and make requested changes promptly. If a maintainer suggests a different approach, try to understand their reasoning before pushing back.

Some habits make review go more smoothly:

  • Reply to every comment, even with a short “done”, so the reviewer knows you saw it.
  • Push follow-up commits rather than force-pushing during review, unless the project asks otherwise. It lets reviewers see only what changed since their last look.
  • Do not take it personally. Reviewers are evaluating the change, not you, and they will maintain that code long after your pull request is merged.
  • Follow up politely if a week or two passes without a response. A single short comment is fine; repeated pings are not.

Sometimes the answer is no. A project may decline a change because it does not fit the roadmap or would add a maintenance burden. That is a legitimate outcome, and how you respond to it shapes how your next contribution is received.

Beyond Code

Contributions are not limited to code. Documentation improvements, bug reports with clear reproduction steps, design assets, and community support in issue discussions are all valuable ways to contribute.

A strong bug report is a contribution in its own right. Include the version you are using, your environment, the exact steps to reproduce, what you expected, and what happened instead. A minimal reproduction, such as a small repository or a short code snippet that shows the problem in isolation, often does more to get a bug fixed than any other single thing.

Keep Going

The open source community thrives when people give back. Start small, learn the ropes, and gradually take on bigger challenges. Each merged pull request teaches you more about the codebase and builds trust with its maintainers, and that trust is what eventually turns into larger pieces of work. Your contributions are welcome.

Share this article
teamwork testing