Can't use GitLab for Agile management in microservice based software projects without monorepos

We have a subscription to GitLab and are happy about CI/CD, source code management, container and package registry, etc. but unfortunately we are failing to use GitLab for Agile project management due to its design and I am looking for help in an attempt to give it one last chance.

It seems GitLab promotes the idea of monorepo. But I don’t like the idea of monorepo as I want granular permissions on sourcecode and I have front-end developers that won’t ever touch back-end code. So single repositories work better.

Firstly a bit of context to understand how we use GitLab.

We are a small business, we have several business projects and each project is managed differently, with different people. Each business project has different source code bases (i.e: git repositories) and each repository has its own specific pipeline.

The concept of Project in GitLab is associated to a single repository. That’s a problem because a business project, for us, has multiple repositories. In other words, we use GitLab project as a Git repository with its own CI/CD, image, etc.

The concept of issue in GitLab is associated to a single repository/project. That’s a problem because GitLab recommends using issues for user stories, but user stories are cross-repository, therefore we are forced to associate a user story to a specific GitLab project/repository, and that doesn’t work for us. At the same time, a user story could involve back-end changes, front-end changes, or a few microservices. So this would force me to create user stories for specific technical scopes, instead of focusing on the vertical value for a user regardless of how it is implemented or which repository is to be modified.

How do people manage things when they don’t use monorepos and have microservices architecture where different teams work on different code bases under the same business project?

We have tried moving the concept of user story to epic, but it doesn’t work because it cannot be estimated and it cannot be added to a sprint (iteration or milestone which, by the way, are also quite confusing)