Developer Clients Group
🚀 Vision
We bring GitLab’s core features and AI capabilities directly into developer workflows, unlocking productivity by making GitLab accessible in the tools developers use every day.
This group is part of the AI Clients stage.
👨💻 Team Members
Engineering Manager: Amr Elhusseiny
Product Manager: James Casey
UX: Yi-Ann Chen
| Name | Role |
|---|---|
Amr Elhusseiny
|
Engineering Manager |
Andrei Zubov
|
Senior Frontend Engineer, Create:Editor Extensions |
Elwyn Benson
|
Senior Frontend Engineer, Create:Editor Extensions |
Juhee Lee
|
Fullstack Engineer |
Karl Jamoralin
|
Backend Engineer |
Laura Ionel
|
Senior Backend Engineer |
Malte Heuser
|
Fullstack Engineer, Create:Editor Extensions |
Mohammed Osumah
|
Fullstack Engineer |
Tomas Vik
|
Staff Fullstack Engineer, Create:Editor Extensions |
🤝 Stable Counterparts
Below are our stable counterparts:
| Name | Role |
|---|---|
James Casey
|
Director of Product |
Yi-Ann Chen
|
Senior Product Designer, AI |
💬 Where to Find Us
Slack
- Public stage channel: #s_ai-clients-questions — questions and outreach
- Internal stage channel: #s_ai-clients — team syncs only
- Functional teams’ slack channels:
- Duo CLI: #f_duo_cli
- VS Code extension: #f_vscode_extension
- JetBrains plugin: #f_jetbrains_plugin
- Other slack channels we maintain:
- Visual Studio extension: #f_visual_studio_extension
- Eclipse plugin: #f_eclipse_plugin
- Neovim Plugin: #f_neovim_plugin
- Web IDE: #f_vscode_web_ide
Shared Calendar
We use AI Clients’s shared calendar
🏠 Functional Teams
| Team | Scope | Channel |
|---|---|---|
| Duo CLI | AI-powered command-line interface | #f_duo_cli |
| VS Code | GitLab Workflow VS Code extension & Web IDE | #f_vscode_extension |
| JetBrains | GitLab plugin for JetBrains IDEs | #f_jetbrains_plugin |
💻 Scope
Products owned by this group
- GitLab Extension for JetBrains
- Repo
- Docs
- Backlog
- Slack Channel: #f_jetbrains_plugin
- GitLab Workflow Extension for VS Code
- Repo
- Docs
- Backlog
- Slack Channel: #f_vscode_extension
- Duo CLI
- Repo
- Backlog
- Slack Channel: #f_duo_cli
📚 How We Work
Issues’ State
We use the issue Status field to indicate state, following the Product Development Flow.
Expand for more details
To keep things simple, we focus on the main states below and optionally use others when appropriate.
-
New → Not yet prioritized or refined.
-
Planning breakdown → Needs team attention soon (within ~1–2 months); gather scope, risks/deps, acceptance criteria.
-
Ready for development → Immediate priority; clear scope; should be picked up next and ideally completed within ~2 weeks.
-
In dev → Assigned DRI(s), milestone set, work in progress.
-
In review → Implementation complete; MR opened and under review/verification.
-
Blocked → Cannot proceed due to a dependency or external constraint; comment the blocker and next check-in date.
-
Closed → Done (or closed as duplicate/won’t fix) with outcome noted.
Note: We chose Planning breakdown & Ready for development as these statuses exist on both Issues and Tasks, letting us build one unified set of boards and embedded tables with a single status filter easily.
Milestone Planning
We plan per milestone. We release much more often and with more flexibility, but the milestone cadence keeps us aligned with release posts for new features and with other teams when alignment is needed.
This process is intentionally minimal — we start small and iterate based on the feedback loop.
At a glance — two artifacts, two rituals:
| Artifact | Used | Answers |
|---|---|---|
| Team backlogs | Before planning | What should we work on next? |
| Planning boards | During the milestone | What is the status? What is in progress? |
| Ritual | Cadence | What happens |
|---|---|---|
| Planning call — one per functional team | Monthly | Commit the scope, assign Deliverable / Stretch labels and weights, plan capacity |
| Async updates | Weekly (by Tuesday EOD) | Everyone posts progress on their issues; automation aggregates them into one group-wide issue |
The flow in detail (chronological)
- Throughout the milestone — prepare for the next one. Flag issues you want prioritized next milestone with the
workflow::schedulinglabel. For an uncertain effort with no issue yet, create a placeholder (an empty description is fine) with a timeboxed weight. Keep statuses and labels current — the planning boards double as our live view of milestone progress. - Before the planning call. EM + PM do an async backlog pre-pass, focusing on flagged issues. Everyone: have a rough idea of your availability (for example, planned vacation days). Plans can change — that’s fine, we adapt.
- Monthly planning call — one per functional team. Agree on the scope committed to the milestone, assign the
DeliverableandStretchlabels and weights, and plan team capacity using the planning board’s capacity feature. - During the milestone. The planning board shows the milestone state and in-progress work. Post your weekly async updates.
Planning Boards
| Team | Board | Issues shown |
|---|---|---|
| Duo CLI | dc-duo-cli | category:duo cli label, or in the gitlab-lsp repo with “cli” in the title |
| VS Code | dc-vs-code | category:vs code label, or in the gitlab-vscode-extension repo |
| JetBrains | dc-jetbrains | category:jetbrains label, or in the gitlab-jetbrains-plugin repo |
Team Backlogs
Each functional team has a live backlog wiki page — the tables refresh automatically on page load, and cover Added this milestone, Next to prioritize, Top community requests, and the full backlog:
💡 An issue only shows up on a team’s backlog page if it carries the team’s category label:
category:duo cli,category:vs code, orcategory:jetbrains. Each page has a “missing category label” section that surfaces unlabelled issues in the team’s repository, and automating the labelling is tracked in meta#398.
How to Participate (for non-team members)
If you want to bring an issue to the attention of the team, please create an issue. If no issue exists yet, then reach out on #s_ai-clients-questions.
Feedback Loop
This process is v1. We run a quick feedback poll in the team channels every ~2 milestones, plus a standing 5-minute retro slot in each monthly planning call.
Team Sync Meetings
We join the weekly sync meeting held across the entire AI Clients stage.
- The call alternates every week between APAC/AMER & EMEA/AMER friendly times, so everyone can join conveniently at least every other call — and everyone can contribute async every week.
- The Weekly Sync Meeting Agenda is open; everyone is invited to bring relevant topics to align on.
- Recordings are uploaded to the Editor Extensions Category playlist on GitLab Unfiltered.
Weekly Async Updates
Post an update on each issue you’re actively working on, using the Dev Check-in (editor-extensions) comment template.
Note: async updates should be posted by Tuesday EOD every week (or earlier if you’re off).
Updates are aggregated automatically into a single weekly Developer Clients issue with a section per functional team (example issue).
Issues’ Labels
Check AI Clients labeling guidance
Some extra labels we use:
| Label | Description |
|---|---|
Deliverable |
Committed items for the milestone / must-ship work. |
Stretch |
Next items on the priority list, added as optimistic goals for the milestone |
Issues’ Weight
Weights are assigned during milestone planning as a rough estimate of complexity:
| Weight | Rough effort |
|---|---|
1 |
A day or two |
2 |
About a week |
3 |
About a week and a half |
- Anything estimated above
3should first be a spike, which results in one or more issues with estimated weights. - Estimates assume familiarity with the codebase/system — add
1–2to the base weight if you’re new to it.
Cross-Group Ownership and Boundaries
Editor extensions systems host features and modules owned by different groups.
The Ownership and Boundaries page provides clarity and a clear expectation between all parties who author/maintain features in our systems.
🔗 Useful Links
- Planning
- Dashboard & Monitoring
- Miscellaneous
- Weekly Sync Meeting Agenda
- Editor Extensions playlist on the GitLab Unfiltered YouTube channel
JetBrains
VS Code
74729988)
Amr Elhusseiny
Andrei Zubov
Elwyn Benson
Juhee Lee
Karl Jamoralin
Laura Ionel
Malte Heuser
Mohammed Osumah
Tomas Vik