A world class development team of software engineers and managers who make our customers happy when using our product(s). Our products should contain broad rich features, high availaiblity, high quality, fast performance, trustworthy security, and reliable operation.
The development department strives to deliver MRs fast. MR delivery is a reflection of:
The department also focuses on career development and process to make this a preferred destination for high performing software engineers.
We use data to make decisions. If data doesn't exist we use anecdotal information. If anecdotal information isn't available we use first principles.
The FY22 year starts with much promise and ambition. During FY21, the Development department focused on efficiency and maturation as a team. This has led to strong efficiencies in execution. For the coming year, we will focus on how to best leverage those efficiencies across a variety of activities.
None of our ambition for FY22 would be possible without the people doing the work. As such we need to make sure the right opportunities are available for the right people at the right time. We will continue the career development focus and commit to having twice yearly conversations on career development including a written review following guidance from the career matrixes.
We will continue our strong partnership with Product to make GitLab the best, most complete DevSecOps platform on the planet. While we continue adding features to the product we must also work to identify technical debt and bring it to the prioritization discussion. We expect that Engineering managers are already addressing technical debt that is group specific with their Product Manager. For the coming year, we would like to achieve 4 cross-group technical debt retirements supported by Product prioritization. The benefits of technical debt retirement should address of maintaining/increasing feature velocity, increasing developer happiness, increasing community contributions, reducing cost, etc.
Our quality team supports us through automation, tooling, metrics, and focus on the community. We will work with them to help our open source and quality initiatives. During FY22, we would like to contribute to the driving of MRARR and converting at least one severity level from SLO to SLA.
As we move into FY22, we need to continue to support Sales initiatives and enable them through our fulfillment section. As an example, several pain points were recognized as being problematic in Sales and these need to be addressed through the following epic. After completing this work there will be other opportunities to help accelerate sales in fulfillment and other sections. We will support these initiatives in a timely fashion.
User experience is a focus area for FY22. We support this effort both in the product development as well as in our architecture. This includes continued conversion of Pajamas components in order to continue to improve performance experienced by users. This involves the completion of the original 8 identified components and further completion of an additional 20 of the currently 38 components listed.
Support for the scaling of our SaaS solution is an important component of our business. We will continue the ongoing efforts to support requirements related to scaling requested from infrastructure. Further, we will define an appropriate sharding solution and implement it in the coming fiscal year.
The best way to validate our product is to dogfood it ourselves. As part of our process initiatives for the year, we will work in each sub-department to dogfood additional parts of the product such as Roadmaps, Requirements Management, Code Quality, Auto DevOps, SAST, DAST, Dependency Scanning, Vulnerability Management, Package Management, Product Analytics, Global Search, etc. Overall the department will have an FY22 initiative to have at least 2 categories dogfooded across the entire department. The categories selected should be new for at least some portion of the department, but do not need to be a new category.
As we continue to scale the GitLab Product and consider additional business opportunities, our architecture will become more important. Architecture is crucial to our success and needs to be part of our thinking on a constant basis. We adopted an architecture workflow in FY21. During FY22 we would like to see this workflow highly leveraged. We will set a goal to have as many workflows completed in FY22 as there are Staff+ representatives in the organization.
The development team is responsible for developing products in the following categories:
The following people are permanent members of the Development Department:
|Christopher "Leif" Lefelhocz||VP of Development|
|Chun Du||Director of Engineering, Enablement|
|Sam Goldstein||Director of Engineering, Ops|
|Stan Hu||Engineering Fellow|
|Tim Zallmann||Senior Director of Engineering, Dev|
|Todd Stadelhofer||Director of Engineering, Sec|
|Wayne Haber||Director of Engineering, Growth, Fulfillment, and Applied ML|
The following members of other functional teams are our stable counterparts:
|Giuliana Lucchesi||People Business Partner, Development and Product|
This is the breakdown of our department by section and by stage.
This is the stack-up of our engineers, by level.
Development utilizes a quarterly process to collect, validate, approve, review all promotion proposals prior to them being added via the company-wide process. The goal of this quarterly promotion projection and review is to:
The process timeline is approximate.
|Weeks 1 & 2||Managers submit promotion justification documents to their respective Director or Senior Manager. They also create a separate Career Development document outlining areas of improvement. Additionally for Staff+ positions, they document a business justification for the promotion (why the team needs someone in that role, not why that person achieving the goals of that role) and the time the person has been operating in their current role (both at GitLab and in previous positions as appropriate)|
|Weeks 3 & 4||Senior Managers and Directors review all document submissions and request changes or decline the proposal outright; For Development, promotion documents should already be reviewed and are being sent to an alternative Senior Manager/Director for peer review|
|Month 2||Upon Senior Manager/Director approval, Managers submit a promotion request in BambooHR which includes both an effective date and new pay rate (People Ops can assist)|
|Second month||PeopleOps and Senior Leadership approve promotion requests in BambooHR|
|Month 3||Upon final approval in BambooHR, Manager notifies team member of the promotion and announces in #team-member-updates|
Welcome to GitLab! We are excited for you to join us. Here are some curated resources to get you started:
Issues that impact code in another team's product stage should be approached collaboratively with the relevant Product and Engineering managers prior to work commencing, and reviewed by the engineers responsible for that stage.
We do this to ensure that the team responsible for that area of the code base is aware of the impact of any changes being made and can influence architecture, maintainability, and approach in a way that meets their stage's roadmap.
At times when cross-functional, or cross-departmental architectural collaboration is needed, the GitLab Architecute Evolution Workflow should be followed.
At GitLab we value freedom and responsibility over rigidity. However, there are some technical decisions that will require approval before moving forward. Those scenarios are outlined in our required approvals section.
Development's headcount planning follows the Engineering headcount planning and long term profitability targets. Development headcount is a percentage of overall engineering headcount. For FY20, the headcount size is 271 or ~58% of overall engineering headcount.
The following is a non exhaustive list of daily duties for engineering directors, while some items are only applicable at certain time, though.
In general, OKRs flow top-down and align to the company and upper level organization goals.
For managers and directors, please refer to a good walk-through example of OKR format for developing team OKRs. Consider stubbing out OKRs early in the last month of the current quarter, and get the OKRs in shape (e.g. fleshing out details and making them SMART) no later than the end of the current quarter.
It is recommended to assess progress weekly.
Below are tips for developing individual's OKRs:
Engineering Allocation require us to track goals with more diligence and thought. We need confidence that we’re making correct decisions and executing well to these initiatives. As such, you will see us reviewing these more closely than other initiatives. We will meet on a cadence to review these initiatives and request additional reporting to support the process. Possible requests for additional data:
We will hold Engineering Allocation Checkpoints on a cadence. The recommended cadence is weekly.
We track Engineering Allocation roadmaps. To use this effectively, roadmaps must have correct dates for their epic and weights assigned to issues. If a team does not normally use weights, then assign each issue a weight of 1 (all issues are equal).
Each team needs to demonstrate how there allocation is being used. This is done to verify we are not over/under investing for a given initaitive. This can be done via assignment (people assigned to work) and/or issues assigned. We will track issues and MRs and see as a percentage how that compares to the overall teams work.
The GitLab application is built on top of many shared services and components, such as PostgreSQL database, Redis, Sidekiq, Prometheus and so on. These services are tightly woven into each feature's rails code base. Very often, there is need to identify the DRI when demand arises, be it feature request, incident escalation, technical debt, or bug fixes. Below is a guide to help people quickly locate the best parties who may assist on the subject matter.
There are a few available models to choose from so that the flexibility is maximized to streamline what works best for a specific shared service and component.
The shared services and components below are extracted from the GitLab product documentation.
|Service or Component||Sub-Component||Ownership Model||DRI (Centralized Only)||Ownership Group (Centralized Only)||Additional Notes|
|Alertmanager||Centralized with Specific Team||@mendeni||Distribution||Distribution team is responsible for packaging and upgrading versions. Functional issues can be directed to the vendor.|
|Certmanager||Centralized with Specific Team||@mendeni||Distribution||Distribution team is responsible for packaging and upgrading versions. Functional issues can be directed to the vendor.|
|Container Registry||Centralized with Specific Team||@dcroft||Package|
|Email - Inbound|
|Email - Outbound|
|GitLab K8S Agent||Centralized with Specific Team||@nicholasklick||Configure|
|GitLab Pages||Centralized with Specific Team||@nicolewilliams||Release|
|GitLab Rails||Decentralized||DRI for each controller is determined by the feature category specified in the class. app/controllers and ee/app/controllers|
|GitLab Shell||Centralized with Specific Team||@sean_carroll||Create:Source Code||Reference|
|HAproxy||Centralized with Specific Team||@sloyd||Infrastructure|
|Jaeger||Centralized with Specific Team||@sloyd||Infrastructure:Observability||Observability team made the initial implementation/deployment.|
|LFS||Centralized with Specific Team||@sean_carroll||Create:Source Code|
|Logrotate||Centralized with Specific Team||@mendeni||Distribution||Distribution team is responsible for packaging and upgrading versions. Functional issues can be directed to the vendor.|
|Mattermost||Centralized with Specific Team||@mendeni||Distribution|
|MinIO||Decentralized||Some issues can be broken down into group-specific issues. Some issues may need more work identifying user or developer impact in order to find a DRI.|
|NGINX||Centralized with Specific Team||@mendeni||Distribution|
|Object Storage||Decentralized||Some issues can be broken down into group-specific issues. Some issues may need more work identifying user or developer impact in order to find a DRI.|
|Patroni||General except Geo secondary clusters||Centralized with Specific Team||@mendeni||Distribution|
|Geo secondary standby clusters||Centralized with Specific Team||@nhxnguyen||Geo|
|PgBouncer||Centralized with Specific Team||@mendeni||Distribution|
|PostgreSQL||PostgreSQL Framework and Tooling||Centralized with Specific Team||@craig-gomes||Database||Specific to the development portion of PostgreSQL, such as the fundamental architecture, testing utilities, and other productivity tooling|
|GitLab Product Features||Decentralized||Examples like feature specific schema changes and/or performance tuning, etc.|
|Prometheus||Decentralized||Each group maintains their own metrics.|
|Puma||Centralized with Specific Team||@craig-gomes||Memory|
|Redis||Decentralized||DRI is similar to Sidekiq which is determined by the feature category specified in the class. app/workers and ee/app/workers|
|Sentry||Decentralized||DRI is similar to GitLab Rails which is determined by the feature category specified in the class. app/controllers and ee/app/controllers|
|Sidekiq||Decentralized||DRI for each worker is determined by the feature category specified in the class. app/workers and ee/app/workers|
|Workhorse||Centralized with Specific Team||@sean_carroll||Create:Source Code|
For a list of resources and information on our GitLab Learn channel for Development, consult this page.
In late June 2019, we moved from a monthly release cadence to a more continuous delivery model. This has led to us changing from issues being concentrated during the deployment to a more constant flow. With the adoption of continuous delivery, there is an organizational mismatch in cadence between changes that are regularly introduced in the environment and the monthly development cadence.
To reduce this, infrastructure and quality will engage development via SaaS Infrastructure Weekly and Performance refinement which represent critical issues to be addressed in development from infrastructure and quality.
Refinement will happen on a weekly basis and involve a member of infrastructure, quality, product management, and development.
Execution of a Global prioritization can take many forms. This is worked with both Product and Engineering Leadership engaged. Either party can activate a proposal in this area. The options available and when to use them are the following:
Because our teams are working in separate groups within a single application, there is a high potential for our changes to impact other groups or the application as a whole. We have to be cautious not to inadvertently impact overall system quality but also availability, reliability, performance, and security.
An example would be a change to user authentication or login, which might impact seemingly unrelated services, such as project management or viewing an issue.
Far-reaching work is work that has wide-ranging, diffuse implications, and includes changes to areas which will:
If your group, product area, feature, or merge request fits within one of the descriptions above, you must seek to understand your impact and how to reduce it. When releasing far-reaching work, use a rollout plan. You might additionally need to consider creating a one-off process for those types of changes, such as:
Some areas have already been identified that meet the definition above, and may consider altered approaches in their work:
|Area||Reason||Special workflows (if any)|
|Database migrations, tooling, complex queries, metrics||impact to entire application
The database is a critical component where any severe degradation or outage leads to an S1 incident.
|Sidekiq changes (adding or removing workers, renaming queues, changing arguments, changing profile of work required)||impact to multiple services
Sidekiq shards run groups of workers based on their profile of work, eg memory-bound. If a worker fails poorly, it has the potential to halt all work on that shard.
|Redis changes||impact to multiple services
Redis instances are responsible for sets of data that are not grouped by feature category. If one set of data is misconfigured, that Redis instance may fail.
|Protected Branches, CODEOWNERS, MR Approvals, Gitaly interface||high percentage of traffic share|
|Package product areas||high percentage of traffic share|
|Gitaly product areas||high percentage of traffic share|
|Pipeline Execution product areas||high percentage of traffic share|
|Access/Workspace product areas||touch multiple areas of the application||Documentation|
|Compliance product areas||potentially have legal, security, or compliance consequences|
|Specific fulfillment product areas||potentially impact revenue|
|Runtime language updates||impacts to multiple services|
Note: books in this section can be expensed.