- You are here:
At GitLab, developers are highly independent and self-organized individual contributors who work together as a tight team in a remote and agile way.
Most backend developers work on all aspects of GitLab, building features, fixing bugs, and generally improving the application. Some developers specialize and focus on a specific area, such as packaging, performance or GitLab CI. Developers can specialize immediately after joining, or after some time, when they have gained familiarity with many areas of GitLab and find one they would like to focus on.
- Develop features from proposal to polished end result.
- Review merge requests from your coworkers.
- Support and collaborate with our support engineers in getting to the bottom of user-reported issues and come up with robust solutions.
- Engage with the core team and the open source community to collaborate on improving GitLab.
- Manage and review code contributed by the rest of the community and work with them to get it ready for production.
- Create and maintain documentation around features and configuration to save our users time.
- Take initiative in improving the software in small or large ways to address pain points in your own experience as a developer.
- Keep code easy to maintain and keep it easy for others to contribute code to GitLab.
- Qualify developers for hiring.
CI/CD Backend Developers are primarily tasked with improving the Continuous Integration (CI) and Continuous Deployment (CD) functionality in GitLab. See the description on the CI/CD team for more details. CI/CD Backend Developers report to the CI/CD Lead.
A Security Specialist is a Developer who focuses on ensuring that GitLab and associated applications are as secure as possible. The Security Specialist works in close collaboration with the Security Lead.
An Issue Triage Specialist is a Developer who focuses on interfacing with the community by triaging issues, monitoring discussions, identifying patterns or common issues reported by community. The Issue Triage specialist also fix community-reported bugs, and develop tools to consolidate and reduce duplicate issues.
Issue Triage Specialists report to the Edge Lead.
Junior Developers share the same requirements outlined above, but typically join with less or alternate experience in one of the key areas of Developer expertise (Ruby on Rails, Git, reviewing code). For example, a person with extensive experience in a web framework other than RoR, but with experience on the other areas would typically join as a Junior.
Other characteristics of Junior Developers:
- Work needs to be thoroughly reviewed with substantial review needed before merging.
- Needs significant guidance on general approach of a new task
- Has mastered basic language features, but may not be familiar with advanced techniques/structures
- Works primarily on small issues or tightly scoped, routine problems
Senior Developers are experienced developers who meet the following requirements:
- Technical Skills
- Are able to write modular, well-tested, and maintainable code
- Know a domain really well and radiate that knowledge
- Contribute to one or more complementary projects
- Deep expertise within at least one programming environment
- Basic proficiency in at least one additional programming environment
- Begins to show architectural perspective
- Proposing new ideas, performing feasibility analyses and scoping the work
- Fully capable of taking substantial features from concept to shipping
- Helps set and maintain professional standards (e.g. code quality) for the entire organization
- Code quality
- Leaves code in substantially better shape than before
- Fixes bugs/regressions quickly
- Monitors overall code quality/build failures
- Creates test plans
- Work doesn't need extensive review for common issues
- Provides thorough and timely code feedback for peers
- Able to communicate clearly on technical topics
- Keeps issues up-to-date with progress
- Helps guide other merge requests to completion
- Helps with recruiting
- Performance & Scalability
- Excellent at writing production-ready code with little assistance
- Able to write complex code that can scale with a significant number of users
A Senior Developer will be promoted to a Staff Developer when they have demonstrated significant leadership to deliver high-impact projects. This may involve any type of consistent "above and beyond senior level" performance, for example:
- Technical Skills
- Identifies significant projects that result in substantial cost savings or revenue
- Able to create innovative solutions that push GitLab's technical abilities ahead of the curve
- Deep, substantial expertise in multiple programming environments
- Leads the design for medium to large projects with feedback from other engineers
- Working across functional groups to deliver the project
- Fully capable of owning and running entire subsystems of work (e.g. Gitaly, CI, CD, etc.)
- Code quality
- Proactively identifying and reducing technical debt
- Proactively defining and solving important architectural issues
- Writing in-depth documentation that shares knowledge and radiates GitLab technical strengths
- Performance & Scalability
- Leads development of projects that lead to a significant improvement of the overall performance and scalability of GitLab
We normally don't offer any internships, but if you get a couple of merge requests accepted, we'll interview you for one. This will be a remote internship without supervision; you'll only get feedback on your merge requests. If you want to work on open source and qualify please submit an application. In the cover letter field, please note that you want an internship and link to the accepted merge requests. The merge requests should be of significant value and difficulty, which is at the discretion of the manager. For example, fixing 10 typos isn't as valuable as shipping 2 new features.
The basics of GitLab development can be found in the developer onboarding document.
The handbook details the complete GitLab Workflow.