- You are here:
- Engineering Roles
Our database engineer is a hybrid role: part software engineer, part database expert.
You will spend the majority of your time making application changes to improve database performance, scalability and reliability and delivering foundational database solutions and best practices for our backend engineering teams.
This role is focused on application changes and explicitly not an infrastructure or operational role.
- Pro-actively identify database performance impediments and resolve them by proposing and delivering changes to the GitLab codebase. Own this process end-to-end, from triaging issues to verifying your solution in production (GitLab.com)
- Deliver application changes that allow us to scale the application and its database further and make sure we're prepared for data growth on both GitLab.com and self-hosted installs
- Act as a Database Maintainer for the GitLab codebase and review database-related application changes before they are released
- Providing database expertise to engineering teams through code reviews, pairing and training to help deliver optimal database designs and queries
- Review, optimize and refactor the existing database schema
- Create and incrementally improve documentation to reduce tribal knowledge, including
- Database best practices
- Workflows and database team processes
- Target architecture and long term scalability considerations
- Improve tooling to detect performance bottlenecks early in the development cycle
- Identify problematic database patterns by analyzing GitLab.com's workload and implementing/suggesting solutions
- Implement a partitioning strategy framework for large tables
- Implementing building blocks to efficiently load, analyze and migrate data
- Analyzing tables and optimizing them by adding indexes, breaking them up into separate tables, or by removing unnecessary columns
- Implement an efficient queueing strategy for pull mirrors
- Implement efficient patterns for counting
- Rewriting the database queries and related application logic used for retrieving subgroups
- Rewriting code used for importing projects from other platforms (e.g. GitHub)
- Prevent primary key integer overflows with no-downtime migrations
- Improve index usage (remove unused, identify missing)
- Improve our application-side database load balancing implementation
- Reviewing database related changes submitted by other developers
- Documenting database best practices or patterns to avoid
- Significant professional software engineering experience with Ruby on Rails and PostgreSQL in large production environments
- Expert-level understanding of relational databases, SQL and query optimization techniques and demonstrated ability to both diagnose and prevent performance problems
- Expert-level understanding of the internals of PostgreSQL
- Proficiency in the English language, both written and verbal, sufficient for success in a remote and largely asynchronous work environment
- Demonstrated capacity to clearly and concisely communicate about complex technical, architectural, and/or organizational problems and propose thorough iterative solutions
- Comfort working in a highly agile, intensely iterative software development process
- Demonstrated ability to onboard and integrate with an organization long-term
- Positive and solution-oriented mindset
- Effective communication skills: Regularly achieve consensus with peers, and clear status updates
- An inclination towards communication, inclusion, and visibility
- Experience owning a project from concept to production, including proposal, discussion, and execution.
- Self-motivated and self-managing, with strong organizational skills.
- Demonstrated ability to work closely with other parts of the organization
- Share our values, and work in accordance with those values
- Ability to thrive in a fully remote organization
- Ability to use GitLab
- Experience with PostgreSQL sharding techniques
- Experience with owning the operations of large PostgreSQL production database infrastructure
- Experience with Redis at scale
- Experience in a peak performance organization, preferably a tech startup
- Experience with the GitLab product as a user or contributor
- Product company experience
- Experience working with a remote team
- Enterprise software company experience
- Developer platform/tool industry experience
- Experience working with a global or otherwise multicultural team
- Computer science education or equivalent experience
- Passionate about/experienced with open source and developer tools
Candidates for this position can generally expect the hiring process to follow the order below. Please keep in mind that candidates can be declined from the position at any stage of the process. To learn more about someone who may be conducting the interview, find their job title on our team page.
- As part of the application, candidates are asked to complete a short technical questionnaire, with a possibility of additional technical questions being asked if needed after the application is submitted.
- Next, candidates will be invited to schedule a 30 minute screening call with one of our Technical Recruiters
- Next, candidates will be invited to schedule a 90 minute technical interview with one of our Database Engineers or Backend Engineers
- Next, candidates will be invited to schedule a 60 minute interview with one of our Backend Engineering Managers
- Next, candidates will be invited to schedule a 60 minute interview with our Director of Engineering
- Successful candidates will subsequently be made an offer. Additional details about our process can be found on our hiring page.
Please note that if we are actively hiring for a position, you will see it
listed on our jobs page, where all of our current openings are
advertised. To apply, please click on the name of the role you are
interested in, which will take you to our applicant tracking system (ATS),
Avoid the confidence gap; you do not have to match all the listed
requirements exactly to apply. Our hiring process is described in more
detail in our hiring handbook.
GitLab Inc. is a company based on the GitLab open-source project. GitLab is
a community project to which over 1,000 people worldwide have contributed.
We are an active participant in this community, trying to serve its needs
and lead by example. We have one vision: everyone can
contribute to all digital content, and our mission is to change all creative
work from read-only to read-write so that everyone can contribute.
We value results, transparency, sharing, freedom,
efficiency, self-learning, frugality, collaboration, directness, kindness, diversity and inclusion,
boring solutions, and quirkiness. If these values match your personality,
work ethic, and personal goals, we encourage you to visit our
primer to learn more. Open source is our culture, our way of
life, our story, and what makes us truly unique.
Top 10 reasons to work for GitLab:
- Work with helpful, kind, motivated, and talented people.
- Work remote so you have no commute and are free to travel and move.
- Have flexible work hours so you are there for other people and free to plan
the day how you like.
- Everyone works remote, but you don't feel remote. We don't have a head
office, so you're not in a satellite office.
- Work on open source software so you can interact with a large community and
can show your work.
- Work on a product you use every day: we drink our own wine.
- Work on a product used by lots of people that care about what you do.
- As a company we contribute more than we take, most of our work is released
as the open source GitLab CE.
- Focused on results, not on long hours, so that you can have a life and
don't burn out.
- Open internal processes: know what you're getting in to and be assured
we're thoughtful and effective.
See our culture page for more!
Work remotely from anywhere in the world. Curious to see what that looks
like? Check out our remote manifesto and guides.