Intermediate Issues
Ready for a challenge? These issues require some coding experience
๐ก Intermediate Issues
You've made a few contributions and you're ready for something more challenging. Intermediate issues require coding skills and understanding of the project's architecture.
What Makes an Issue "Intermediate"?
Intermediate issues typically include:
- ๐ง Real Coding Required - Actual feature implementation or bug fixes
- ๐ Some Context Needed - Understanding of the codebase structure
- ๐งช Testing Required - Writing or updating tests
- ๐ฏ Moderate Scope - Can be completed in a few days
- ๐ก Problem-Solving - Requires thinking through solutions
Perfect for you if: You have some programming experience and have made a few contributions before.
Types of Intermediate Issues
๐ Feature Implementation
What it involves:
- Adding new functionality
- Implementing requested features
- Enhancing existing features
- Integrating third-party services
Example Tasks:
- "Add dark mode toggle"
- "Implement search functionality"
- "Add export to PDF feature"
- "Integrate GitHub API"
Skills Needed:
- Proficiency in the project's language
- Understanding of the framework/library
- Ability to write clean, maintainable code
- Testing skills
๐ Bug Fixes
What it involves:
- Debugging complex issues
- Fixing logic errors
- Resolving edge cases
- Performance improvements
Example Tasks:
- "Fix memory leak in data processing"
- "Resolve race condition in async function"
- "Fix incorrect calculation in algorithm"
- "Improve query performance"
Skills Needed:
- Debugging skills
- Understanding of the codebase
- Problem-solving abilities
- Testing and verification
๐จ UI/UX Improvements
What it involves:
- Implementing complex layouts
- Adding animations and transitions
- Improving user experience
- Responsive design implementation
Example Tasks:
- "Implement drag-and-drop interface"
- "Add loading animations"
- "Improve mobile responsiveness"
- "Create interactive dashboard"
Skills Needed:
- HTML, CSS, JavaScript
- Framework knowledge (React, Vue, etc.)
- Design principles
- Cross-browser testing
๐ Data & API Work
What it involves:
- Creating API endpoints
- Database schema changes
- Data migration
- API integration
Example Tasks:
- "Create REST API for user management"
- "Add pagination to API endpoints"
- "Implement caching layer"
- "Integrate external API"
Skills Needed:
- Backend development
- Database knowledge
- API design principles
- Security awareness
๐งช Testing & Quality
What it involves:
- Writing unit tests
- Integration testing
- End-to-end testing
- Code coverage improvement
Example Tasks:
- "Add unit tests for authentication module"
- "Implement E2E tests for checkout flow"
- "Increase code coverage to 80%"
- "Add integration tests for API"
Skills Needed:
- Testing frameworks
- Test-driven development
- Understanding of testing best practices
- Code quality awareness
How to Approach Intermediate Issues
Step 1: Understand the Codebase
Before starting:
- Clone the repository
- Read the architecture documentation
- Explore the code structure
- Run the project locally
- Understand the tech stack
Step 2: Analyze the Issue
Break down the problem:
- What needs to be changed?
- Where in the codebase?
- What are the dependencies?
- What could break?
- How to test it?
Step 3: Plan Your Approach
Create a mental roadmap:
- Identify files to modify
- Plan the implementation
- Consider edge cases
- Think about testing
- Estimate time needed
Step 4: Implement Incrementally
Work in small steps:
- Make one change at a time
- Test frequently
- Commit logical chunks
- Keep changes focused
- Document as you go
Step 5: Test Thoroughly
Ensure quality:
- Write unit tests
- Test edge cases
- Check for regressions
- Test on different environments
- Get feedback early
๐ก Best Practices
Code Quality
// โ Bad: Unclear, no error handling
function getData(id) {
return fetch('/api/data/' + id).then(r => r.json());
}
// โ
Good: Clear, with error handling
async function fetchDataById(id: string): Promise<Data> {
try {
const response = await fetch(`/api/data/${id}`);
if (!response.ok) {
throw new Error(`Failed to fetch data: ${response.statusText}`);
}
return await response.json();
} catch (error) {
console.error('Error fetching data:', error);
throw error;
}
}Testing
// โ
Good: Comprehensive test
describe('fetchDataById', () => {
it('should fetch data successfully', async () => {
const mockData = { id: '1', name: 'Test' };
global.fetch = jest.fn(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve(mockData),
})
);
const result = await fetchDataById('1');
expect(result).toEqual(mockData);
});
it('should handle errors gracefully', async () => {
global.fetch = jest.fn(() =>
Promise.resolve({
ok: false,
statusText: 'Not Found',
})
);
await expect(fetchDataById('1')).rejects.toThrow();
});
});Documentation
/**
* Fetches user data from the API
*
* @param {string} userId - The unique identifier of the user
* @returns {Promise<User>} The user object
* @throws {Error} If the API request fails
*
* @example
* const user = await fetchUserData('123');
* console.log(user.name);
*/
async function fetchUserData(userId) {
// Implementation
}๐ฏ Common Challenges
Challenge 1: Understanding Legacy Code
Problem: Codebase is complex and poorly documented
Solution:
- Start with the entry point
- Use debugger to trace execution
- Draw diagrams of data flow
- Ask maintainers for guidance
- Read related issues and PRs
Challenge 2: Scope Creep
Problem: Issue grows beyond original scope
Solution:
- Stick to the original requirements
- Discuss scope changes with maintainers
- Create separate issues for additional work
- Keep PRs focused and reviewable
Challenge 3: Merge Conflicts
Problem: Your branch conflicts with main
Solution:
# Keep your branch updated
git fetch origin
git rebase origin/main
# Resolve conflicts
# Edit conflicting files
git add .
git rebase --continueChallenge 4: Performance Issues
Problem: Implementation is slow or inefficient
Solution:
- Profile your code
- Identify bottlenecks
- Optimize algorithms
- Use caching where appropriate
- Consider lazy loading
๐ Level Up Your Skills
Learn These Concepts
- Design Patterns - Common solutions to recurring problems
- SOLID Principles - Object-oriented design principles
- Clean Code - Writing readable, maintainable code
- Testing Strategies - Unit, integration, E2E testing
- Git Workflows - Branching strategies, rebasing, etc.
- Code Review - Giving and receiving feedback
- Performance Optimization - Making code faster and more efficient
Recommended Resources
-
Books:
- "Clean Code" by Robert C. Martin
- "Refactoring" by Martin Fowler
- "Design Patterns" by Gang of Four
-
Online:
๐ Ready for the Challenge?
Browse our live issues page to find intermediate-level issues that match your skills!
Quick Links
๐ช You're Growing!
Intermediate issues are where you really start to grow as a developer. You'll:
- Deepen Your Skills - Learn advanced concepts
- Build Confidence - Tackle complex problems
- Gain Recognition - Become a valued contributor
- Expand Network - Connect with experienced developers
- Prepare for Advanced - Ready for the next level
Remember: It's okay to ask for help. Even experienced developers don't know everything. The key is to keep learning and improving! ๐