Hacktoberfest 2024: A Comedy of PRs (Or: How I Learned to Stop Worrying and Love the Merge Conflicts)

Anthony Gakio - Oct 26 - - Dev Community

Dear Future Employers: Please note that any resemblance to actual git disasters in this post is purely coincidental, and I definitely know what I'm doing now.

Day 1: The Great Beginning
Started Hacktoberfest with the confidence of a developer who just discovered Stack Overflow. "How hard could it be?" I whispered to my rubber duck debugger, who somehow already looked disappointed in me.

The First PR: A Tragedy in Multiple Commits

Found an "easy first issue" labeled bug. Just had to fix a simple typo in the documentation. Somehow ended up:

Refactoring the entire codebase
Breaking the CI/CD pipeline
Making the repository sentient
Getting banned from three Discord servers
Learning what "git rebase" means the hard way

The maintainer's response: "👍" (After 47 commits and an apologetic fruit basket)

The Documentation Quest

Decided to play it safe and stick to documentation. Found a repo that needed help with their README. Spent three hours crafting the perfect markdown table, only to discover I was editing a README from 2019 in a forked repo that hadn't been touched since the invention of fire.

The Great Dependencies War

Me: "I'll just update a few dependencies."
Narrator: "They would, in fact, not just update a few dependencies."
Current status of the project:

4,394 security vulnerabilities fixed
7,289 security vulnerabilities created
Package.json file now longer than "War and Peace"
Node_modules folder so large it has its own gravity

The TypeScript Incident
Decided to help convert a JavaScript project to TypeScript.
typescriptCopy

// Before:
function add(a, b) { return a + b }

// After:
function add<T extends number | string | boolean | undefined | null | bigint | symbol | object | unknown | any | void | never>(
  a: T,
  b: T & { readonly [P in keyof T]: T[P] }
): Promise<Awaited<T>> {
  return new Promise((resolve) => resolve(a as any + b as any))
}
Enter fullscreen mode Exit fullscreen mode

The maintainer ghosted me so hard they deleted their GitHub account.
The CSS Adventure
"I'll just fix this small UI bug," I said, adding one line of CSS.
Three days later:

cssCopy.button {
  position: relative !important;
  position: absolute !important;
  position: fixed !important;
  position: static !important;
  /* I don't know which one works but one of them does */
}
Enter fullscreen mode Exit fullscreen mode

The AI Assistant Incident
Tried using AI to help with my PRs. It generated perfect code that passed all tests. Plot twist: it was for a completely different project. Somehow my contribution to a weather app ended up in a repository for managing nuclear reactors. Still got merged though. 🤷‍♂️
The Final Push
By October 30th:

PRs Submitted: 47
PRs Accepted: 3
Stack Overflow Questions Asked: 392
Stack Overflow Questions Marked as Duplicate: 391
Times Git Force Pushed: [REDACTED]
Coffee Consumed: Yes
Rubber Ducks Consulted: 7
Rubber Ducks That Quit: 6

Lessons Learned

"git push --force" is not the answer. (It's git push --force-with-lease, obviously)
When a maintainer says "LGTM," it doesn't mean "Let's Go To McDonald's"
The "S" in HTTPS stands for "Suffering"
Your local branch is always behind origin/main, even immediately after pulling
The best time to make a backup is right before you say "I don't need a backup"

Looking Forward to 2025
Next year's goals:

Learn what Docker actually does
Figure out why everyone keeps talking about "Kubernetes" but nobody can spell it
Finally understand what "yarn" does differently from "npm" (besides taking up disk space)
Maybe read the git documentation (just kidding)
Learn to spell "committment" correctly in commit messages

Final Thoughts
Would I do it all again? Absolutely. Will I prepare better next year? Also absolutely. Will that preparation help? Absolutely not.
To all the maintainers who had to deal with my PRs: I'm sorry. To all the junior developers who looked at my merged code: I'm even more sorry.
Remember, in the end, we're all just trying our best to contribute while secretly hoping nobody looks too closely at our variable naming conventions.

This post was written using Vim because I still haven't figured out how to exit it. Send help.
_
_Disclaimer: No repositories were permanently harmed in the making of this Hacktoberfest journey. The same cannot be said for my git history.

.