
Contributing to Open Source โ From First-PR Anxiety to Merged Code
How I got past the fear of my first pull request, found projects worth contributing to, and learned to read unfamiliar codebases without drowning.
Loading...
18 articles in this category

How I got past the fear of my first pull request, found projects worth contributing to, and learned to read unfamiliar codebases without drowning.

Forget the Gang of Four textbook. These are the patterns I see in production JavaScript and TypeScript codebases every week โ observer, factory, strategy, and the ones nobody names but everyone uses.

Why I stopped reaching for Postgres by default and started shipping production apps with SQLite. WAL mode, embedded analytics, and when it genuinely beats the big databases.

Not a Vim-vs-VSCode argument. Just the motions, macros, and habits that made me genuinely faster at editing text after years of resisting modal editing.

Learning regex properly changed how I handle text processing. Named groups, lookaheads, and real-world patterns I actually use in production.

Practical naming, function size, and abstraction decisions I've changed my mind about after years of writing production code.

The system design concepts I actually use at work: load balancers, caching layers, message queues, and why picking the right trade-off matters more than knowing the right answer.

When the document model actually helps, when relational wins, and the real project stories behind the decision.

The concurrency model that finally clicked for me, the pitfalls that didn't show up until production, and when to reach for sync.Mutex instead of channels.

Our team's actual decision-making process for whether to break up a Rails monolith. Spoiler: we didn't go full microservices.

I sat down with our caching server to talk about cache stampedes, missing TTLs, and the things backend developers keep getting wrong.

How to track down and fix multi-second query delays when your API starts timing out.

Practical constraints for code integration that actually work. Less about naming conventions, more about not breaking production.

A practical guide for deciding between Rust and Go for backend services. No fanboy energy.

A pragmatic debate on data fetching, over-fetching, N+1 queries, and caching complexities.

Discriminated unions, template literal types, conditional type extraction, and the satisfies operator. Production patterns, not interview trivia.

Four Python scripts I actually use. Bulk renamer, downloads folder organizer, duplicate finder, and a website change detector.

A detailed breakdown of a force-push incident that deleted two days of work, and the strict git branching policies established in the aftermath.