The Quest Begins (The "Why")
I remember staring at my GitHub profile one rainy Sunday, feeling like I was stuck in a tutorial level that never ended. My contributions were a scatter‑shot of tiny typo fixes and a couple of half‑finished experiments that never got merged. I’d see other devs flashing shiny green squares, their profiles looking like they’d just cleared a boss level in Mario Kart—fast, confident, and full of power‑ups. I wanted that feeling. I wanted my profile to scream “I ship useful code, not just commas.”
The dragon I needed to slay wasn’t a lack of skill; it was a lack of direction. I kept asking myself: How do I turn a casual interest in open source into a signal that recruiters actually notice? After a few false starts, I discovered one technique that changed everything: picking a well‑marked “good first issue,” delivering a tiny but polished feature with tests, and wrapping it in a crystal‑clear PR that follows the project’s contribution guide to the letter.
The Revelation (The Insight)
The magic isn’t in the size of the change—it’s in the signal you send. Maintainers are flooded with PRs that are either too vague, too messy, or completely off‑spec. When you show up with a PR that:
- Solves the exact issue described,
- Includes a minimal test that proves it works,
- Matches the project’s coding style (lint passes, no warnings),
- Comes with a description that reads like a short story (what, why, how),
…you instantly stand out. It’s like dropping a perfectly timed blue shell in Mario Kart: small, but it reshapes the race.
I tested this on the popular HTTP client library axios. The issue I chose was labeled “good first issue”: Add a TypeScript definition for the new maxRedirects option. It was a one‑liner in the docs, but the TypeScript definitions were missing, causing TS users to get any returns.
Here’s the before of what I almost submitted—a half‑hearted fix that would have landed me in the “trash” pile:
- // before: nothing
+ // after: just a comment
+ // added maxRedirects typings
That’s the kind of PR that gets a “thanks, but no thanks” maintainer reply: vague, no test, no context.
The after—the version that got merged and gave me my first real green square—looked like this:
// index.d.ts
export interface AxiosRequestConfig {
/**
* Maximum number of redirects to follow in node.js.
* Set to 0 to disable redirects.
* @default 5
*/
maxRedirects?: number;
}
And the accompanying test (added to test/typescript.test.ts):
it('should accept maxRedirects in config', () => {
const instance = axios.create({ maxRedirects: 2 });
expect(instance.defaults.maxRedirects).toBe(2);
});
The PR title was explicit: feat(types): add maxRedirects option to AxiosRequestConfig.
The description? I kept it short but covered the three Ws:
What – Adds the missing
maxRedirectsproperty to the TypeScript definition ofAxiosRequestConfig.
Why – TS users currently getanyfor this option, losing type safety and IDE autocomplete.
How – Added the field with JSDoc matching the JS docs, plus a unit test to ensure the value is passed through correctly.
I also made sure to run npm run lint and npm test locally before pushing, so the CI passed on the first try.
Wielding the Power (Code & Examples)
Let’s break down the exact steps I took, so you can replicate the quest:
-
Find the right target – Search GitHub for
label:"good first issue"in projects you use or admire. I filtered by language (TypeScript) and stars (>10k) to ensure visibility. -
Read the contribution guide –
CONTRIBUTING.mdis your map. I noted the required commit format (feat(scope): description), the test location, and the lint rules. -
Fork & branch –
git checkout -b feat/max-redirects-ts. - Implement the fix – Write the smallest possible change that satisfies the issue. No extra refactoring, no “while I’m here” clean‑ups.
- Add a test – If the project has a test suite, add a test that would fail without your change. This shows you’re not just guessing.
-
Run the linter & tests –
npm run lint && npm test. Fix any warnings before committing. -
Craft the PR – Use the exact wording from the contribution guide for the title. In the description, answer What/Why/How. Link to the issue with
Closes #xxxx. - Request a review – Tag a maintainer if the guide suggests it, otherwise just wait for the bot to assign.
Common Traps (What NOT to Do)
- Trap #1: The “typo ninja” – Submitting a PR that only changes a comma or fixes a spelling mistake in the README. It’s nice, but it doesn’t demonstrate engineering ability.
- Trap #2: The “scope creeper” – Seeing a small issue and deciding to rewrite an entire module while you’re at it. Maintainers get wary of large, unreviewed changes.
- Trap #3: The “silent submitter” – Forgetting to run tests or lint, then wondering why CI fails and the PR sits stale.
- Trap #4: The “vague describer” – Writing a PR description like “fixes things” or leaving it blank. Maintainers have to guess your intent, which slows review.
Avoid those, and you’ll already be ahead of 80% of the contributors out there.
Why This New Power Matters
After that axios PR landed, my profile changed in three noticeable ways:
- Visibility – The project maintainer thanked me publicly, and the PR showed up in the project’s “Recent activity” feed. A few other contributors started watching my future PRs.
- Signal to recruiters – I started getting inbound messages that referenced that specific PR (“I saw your axios TS contribution—nice work!”). It became a talking point in interviews.
- Confidence boost – Knowing I could follow a contributing guide, write a test, and get a merge made the next open‑source dive feel less like a gamble and more like a repeatable quest.
That single technique turned my GitHub from a ghost town into a place where I could point and say, “Yeah, I shipped that.” It’s not about grinding hundreds of commits; it’s about making each one count.
Your Turn
Grab a project you love, hunt for a “good first issue” with a clear description, and treat it like a speedrun: study the map (contributing guide), execute the smallest viable change, add a test, and finish with a crisp PR description.
What’s the first issue you’re going to tackle? Drop the link in the comments—I’ll cheer you on! 🚀
Top comments (0)