The GitLab engineering team is split according to product category, so that team members in each category can focus, specialize, and collaborate on the same issues at the same time. They are semi-siloed by design, so what happens to issues, like tech debt, that are everyone and no one’s responsibility?
The short answer is, teams are still figuring it out. A recent issue sparked a lively discussion and video call, which you can watch below. Listen in below on the discussion between engineering and product leadership about how technical debt or other engineering initiatives that are "cross-vertical" (that is, touch on many different product areas) should be prioritized given that there isn't one clear point of contact or responsibility for those issues.
The issue that started it all had to do with a task that would have been assigned to the former Platform team, which used to be a catch-all that has since been split up into Create and Manage. Engineering Manager, Create Douwe Maan explains, “With all backend teams now focused on specific product areas… there is no team to take on these kinds of backend-wide, non-product-area specific issues anymore.”
He continues, “Issues like this affect all backend teams equally, so we fall prey to the bystander effect. When an engineering manager gets to make room in a given release for an engineering-led initiative, they have the choice between issues like this, that any team could pick up, and product area-specific issues, that aren't going to get done unless their team does it, so the latter will have a far higher chance of being picked. Everyone cares about these kinds of issues, which means no one cares… there are many issues (technical debt and otherwise) that aren't currently anyone's responsibility, so they won't get done.”
This felt like a recurring problem due to other recent examples of cross-vertical initiatives stalling, like this issue to switch to Rails 5 in production, and this issue to update GitLab's referrer policy.
We've heard from our community that this is a common problem, especially when working with others in different functions. In recent interviews with 15 DevOps engineers, many expressed their frustration at the amount of reactive work and rework that they face, and identified a lack of successful coordination and empathy between different teams as the culprit. One interviewee said he thought this is inherent to working with some functions. Because of how release schedules work for developers and security engineers, he thinks these groups are the least likely to feel they are able to assign cycles to some proactive tasks, like fixing technical debt before it's critical.
The nearly 20 software engineers we interviewed also brought up their frustration at the way that technical debt can transform a seemingly simple task into a massive effort requiring them to rewrite or refactor a large chunk of code. More than the time spent on these tasks, several developers mentioned their concern that others might see them as dragging their feet and becoming a blocker when they take the time to resolve the technical debt. After all, it was just "a simple task."
The responsibility to fix these issues becomes even more muddied when no particular team owns them. One study of 95 teams in 25 leading corporations found that the majority of cross-functional teams are dysfunctional, in large part because siloes self-perpetuate. The authors argue the solution is to create a “Portfolio Governance Team (PGT), where high-level leaders make complex decisions on the various projects in their portfolio together." The number one rule for making a PGT successful? "Every project should have an end-to-end accountable leader."
Along these lines, one long-term solution being discussed at GitLab is establishing a dedicated team that will transcend the product areas and be responsible for these murky in-between issues. But Director of Engineering, Dev Backend Tommy Morgan adds, “Even if we had a team that was in place to handle issues like this one, there will always be boundary conditions. As Product is responsible for prioritizing work, if we need to do any horse-trading or other determination to figure out where the work should land, I think that's something that Product should work out.”
Short of creating a new team, Product Managers and Engineering Managers will need to frankly discuss their own priorities and incentives in order to get these tasks scheduled.
What has your org tried? Is it working? Tweet us @gitlab.
Photo by Diego PH on Unsplash.