My First Open Source Journey
Introduction
Starting with open source can feel overwhelming. Where do you begin? What project should you contribute to? How do you make your first pull request? This is the story of my journey from complete beginner to active open source contributor, and I hope it inspires you to start your own journey!
Table of Contents
- Why I Started with Open Source
- Setting Up My First Project: Nextcloud
- Understanding and Choosing a License
- My First Pull Requests
- Contributing to Practice Repositories
- Key Lessons Learned
- Tips for Future Contributors
Why I Started with Open Source
Open source contribution has always intrigued me. The idea of collaborating with developers worldwide, learning from real-world codebases, and making a tangible impact on software used by millions is incredibly motivating.
My goals were:
- Learn industry-standard development practices
- Connect with the developer community
- Build a portfolio of real contributions
- Understand collaborative software development
- Gain practical experience beyond tutorials
Setting Up My First Project: Nextcloud
Why Nextcloud?
I chose Nextcloud as my first major project because:
- Well-documented – Excellent documentation for new contributors
- Active community – Responsive maintainers and helpful community
- Real-world impact – Used by millions for file storage and collaboration
- Modern tech stack – PHP, JavaScript, Vue.js
- Beginner-friendly issues – Tagged issues for first-time contributors
Setting Up the Development Environment
Challenges I Faced
Challenge 1: Large Codebase
- Problem: Nextcloud is a massive project with thousands of files
- Solution: Started by reading the CONTRIBUTING.md file and focused on one module at a time
Challenge 2: Development Environment
# Clone the repository
git clone https://github.com/nextcloud/server.git
cd server
# Install dependencies
composer install
npm install
# Set up local development server
php -S localhost:8080
- Problem: Setting up all dependencies was complex
- Solution: Used Docker containers to simplify the setup process
Challenge 3: Understanding the Architecture
- Problem: Didn’t know where to start making changes
- Solution: Read existing PRs and issues to understand common patterns
Understanding and Choosing a License
One crucial aspect of my project was understanding open source licenses. This was eye-opening!
Why Licenses Matter
A license:
- Protects your work
- Defines how others can use your code
- Clarifies contribution terms
- Prevents legal issues
Licenses I Considered
License | Pros | Cons | Best For |
---|---|---|---|
MIT | Simple, permissive, widely used | Minimal protection | Most projects |
GPL v3 | Strong copyleft, ensures freedom | Restrictive for commercial use | Community-focused projects |
Apache 2.0 | Patent protection, permissive | More complex | Corporate-backed projects |
BSD | Very permissive | Minimal contributor protection | Academic projects |
My Choice: MIT License
I chose the MIT License for my project because:
- Simplicity – Easy to understand for contributors
- Flexibility – Allows both open source and commercial use
- Wide adoption – Most developers are familiar with it
- Minimal restrictions – Encourages maximum collaboration
Pro Tip: Add a LICENSE file to your repository root. GitHub will automatically detect it!
My First Pull Requests
PR #1: Documentation Fix (MERGED ✓)
Repository: Nextcloud Documentation
Issue: Outdated installation instructions
Changes: Updated PHP version requirements and fixed broken links
What I learned:
- Always reference the issue number
- Test all links before submitting
- Clear commit messages are crucial
PR #2: Bug Fix in User Management (MERGED ✓)
Repository: Nextcloud Server
Issue: User search not working with special characters
Changes: Added proper escaping for search queries
// Before
$query = "SELECT * FROM users WHERE username LIKE '%$search%'";
// After
$query = $this->db->prepare(
"SELECT * FROM users WHERE username LIKE :search"
);
$query->execute(['search' => '%' . $this->db->escape($search) . '%']);
What I learned:
- Security matters – always sanitize inputs
- Write tests for your changes
- Follow the project’s coding standards
PR #3: UI Enhancement (UNDER REVIEW 👀)
Repository: Nextcloud Server
Issue: Improve accessibility of file sharing dialog
Changes: Added ARIA labels and keyboard navigation
What I learned:
- Patience is key – reviews take time
- Be open to feedback and suggestions
- Iterate based on maintainer comments
Contributing to Practice Repositories
To build confidence, I also contributed to beginner-friendly practice repositories:
1. first-contributions
- Task: Add my name to contributors list
- Status: MERGED ✓
- Time to merge: 2 days
- Takeaway: Perfect for learning the fork-clone-PR workflow!
2. HyunCafe/contribute-practice
- Task: Add name and inspirational quote
- Status: MERGED ✓
- Time to merge: 3 days
- Takeaway: Great for understanding markdown formatting and git basics.
3. EddieHubCommunity/hacktoberfest-practice
- Task: Add GitHub profile to community list
- Status: MERGED ✓
- Time to merge: 1 day
- Takeaway: Active community with fast review cycles – highly recommended!
Key Lessons Learned
1. Read CONTRIBUTING.md First
Every project has guidelines. Reading them saves time and shows respect to maintainers.
2. Start Small
My first PRs were:
- Documentation fixes
- Typo corrections
- Adding comments
- Small bug fixes
Don’t try to refactor the entire codebase on day one!
3. Communication is Key
Before working on an issue:
- Comment on the issue expressing interest
- Ask for clarification if needed
- Propose your approach
- Wait for maintainer approval
- Then start coding
4. Write Clean Commits
Bad commit:
git commit -m "fixed stuff"
Good commit:
git commit -m "fix: Resolve user search issue with special characters
- Added proper input sanitization
- Updated tests for edge cases
- Fixed SQL injection vulnerability
Fixes: #12345"
5. Be Patient with Reviews
Timeline | What to Expect |
---|---|
0-2 days | Automated checks run |
2-7 days | Initial maintainer review |
1-2 weeks | Back-and-forth on changes |
2-4 weeks | Final approval and merge |
Remember: Maintainers are volunteers with day jobs!
6. Handle Rejection Gracefully
Not all PRs get merged, and that’s okay!
When your PR is rejected:
- Thank the reviewer for their time
- Ask for feedback on what to improve
- Learn from the experience
- Move on to the next contribution
7. Test Everything
Before submitting:
# Run tests
npm test
# Check code style
npm run lint
# Build the project
npm run build
# Test manually in browser
Tips for Future Contributors
Getting Started Checklist
- [ ] Create a GitHub account
- [ ] Set up Git on your computer
- [ ] Learn basic Git commands (clone, branch, commit, push, PR)
- [ ] Find beginner-friendly projects
- [ ] Read project documentation
- [ ] Join project communities (Discord, Slack, Forums)
- [ ] Start with “good first issue” labels
- [ ] Make your first contribution
- [ ] Celebrate!
Finding Projects to Contribute To
Websites:
- Good First Issue
- First Timers Only
- Up For Grabs
- CodeTriage
GitHub Search:
label:"good first issue" is:open is:issue language:JavaScript
Essential Git Commands
# Fork and clone
git clone https://github.com/YOUR_USERNAME/project.git
cd project
# Create a branch
git checkout -b fix-issue-123
# Stage and commit changes
git add .
git commit -m "fix: description of fix"
# Push to your fork
git push origin fix-issue-123
# Update your fork with upstream changes
git remote add upstream https://github.com/ORIGINAL_OWNER/project.git
git fetch upstream
git merge upstream/main
Writing Good PRs
Template:
## Description
Brief description of what this PR does
## Related Issue
Fixes #123
## Changes Made
- Change 1
- Change 2
- Change 3
## Testing
- [ ] Tested locally
- [ ] Added unit tests
- [ ] Updated documentation
## Screenshots (if applicable)

## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-review of code completed
- [ ] Commented complex code sections
- [ ] Updated documentation
- [ ] No breaking changes
My Statistics After 3 Months
Metric | Count |
---|---|
Repositories contributed to | 8 |
Pull requests submitted | 15 |
Pull requests merged | 12 |
Issues opened | 5 |
Comments on discussions | 47 |
Stars received | 23 |
What’s Next?
My journey is just beginning! Here’s what I’m planning:
- Contribute to larger projects – Dive deeper into complex issues
- Become a maintainer – Help review others’ PRs
- Create my own OSS project – Give back to the community
- Mentor new contributors – Share what I’ve learned
- Participate in GSoC – Apply for Google Summer of Code
Final Thoughts
Open source contribution has been one of the most rewarding experiences of my developer journey. It’s not just about code – it’s about:
- Community – Meeting amazing developers worldwide
- Learning – Exposure to real-world codebases
- Impact – Contributing to software used by millions
- Career – Building a portfolio that speaks for itself
- Growth – Becoming a better developer every day
If you’re thinking about starting – just do it! Your first contribution doesn’t have to be perfect. The community is welcoming, and everyone started where you are now.
Useful Resources
- GitHub Open Source Guide
- How to Contribute to Open Source
- First Contributions
- The Beginner’s Guide to Contributing to Open Source
- Nextcloud Developer Documentation
Let’s Connect!
I’d love to hear about your open source journey!
- GitHub: @Born-as-Harsha
- Twitter: @harshaabhi
- LinkedIn: @harshaabhi
Have questions? Drop a comment below, and I’ll be happy to help!
Summary
Key Takeaways:
- Start with documentation and small fixes
- Choose projects that interest you
- Read and follow contribution guidelines
- Be patient with the review process
- Learn from feedback and keep improving
- Give back to the community
Your turn: What’s stopping you from making your first contribution? Let me know in the comments!
Thank you for reading! If you found this helpful, please share and follow me for more content about open source, web development, and my coding journey!
OpenSource #GitHub #Beginners #WebDevelopment #CodingJourney #FirstContribution #Nextcloud #DevCommunity