At Sabre, we have initiated a tech transformation by launching SABRE2, a monorepo approach designed to boost the software developer experience and productivity. As our initiative took flight, numerous development teams came on board. What did we learn on this journey? Fasten your seatbelts and find out below. ✈️ 👇

The Genesis of Change

As a travel technology company founded in 1960, we operate with a blend of modern and vintage technologies. Functioning in a dynamic industry that demands the constant processing of monumental amounts of data, we understand the necessity for our systems to remain up-to-date and for our new software to evolve and adapt rapidly. That’s why we created SABRE2 – to ensure that, regardless of the technology, our teams can efficiently perform substantial upgrades, maintain productivity, and adhere to consistent, state-of-the-art processes and standards.

Defining SABRE2: A New Altitude for Developer Productivity

What is SABRE2?

  • Monorepository: SABRE2 is a single source code repository that contains the source code for over 1,000 projects, including web apps, web services, libraries, and configuration packages. This setup facilitates collaboration and simplifies large-scale refactorings. It also significantly simplifies dependency management by employing the approach of always using the single, latest version of any given internal dependency.
  • Set of tools: It includes a suite of tools specifically designed to support the monorepo approach.
  • Opinionated Standards: SABRE2 promotes a set of opinionated standards to ensure that all teams follow state-of-the-art standards and practices.
  • Common Configurations and Libraries: It provides common configurations and libraries, helping to reduce duplication of work across different projects.
  • Unified Development Environment: SABRE2 offers a unified development environment that simplifies the onboarding of new team members and eliminates issues caused by differences between local machines and CI (continuous integration) agents.
  • CI as a Service: SABRE2 offers CI as a Service, a centralised continuous integration solution featuring self-service capabilities and automatic job creation.
  • Code Generators: SABRE2 includes code generators that enable the instant creation of new production-ready services.

Expansive Horizons: SABRE2‘s Growing Scale

  • Over 1,000 projects — including online applications, HTTP services, common libraries, and configuration packages —are using SABRE2, and the number is constantly growing — with an average annual increase of 70% in the number of projects.
  • SABRE2 runs an average of 10,000 CI pipelines per day.
  • Every month, on average, 2,000 pull requests are merged in the SABRE2 repository.

Lessons Learned Along the Way of Building the SABRE2 Monorepo

1. Treat the Internal Tools as a Product

Seize the opportunity to use product development principles that have evolved and proven effective over the years! Treat internal tools with the same approach as any product, considering developers as your clients. Implement well-established product development strategies: conduct user research, develop product roadmaps, collect valuable feedback, and iterate. Do not force teams to use your solution—make it compelling enough that teams will be eager to use it.

2. Answer Your Clients’ Needs… Swiftly!

Do not focus on implementing the new shiny thing or capability that every other company is adding to their internal tools. Keep in mind that you are developing a solution tailored to your clients, and it is crucial to address their specific needs. Just like that one time when we noticed a drop in the client satisfaction score metric (remember collecting feedback from point 1? That’s why it is important!). The issue was how much time each CI (continuous integration) pipeline run took. Therefore, we allocated an entire month to optimising theperformance of these pipelines. Our efforts resulted in a significant reduction of the CI run time, and user satisfaction was restored right back.

3. Centralized Large-Scale Upgrades and Refactorings Are a Real Deal

Leveraging the monorepo approach which entails automatically running comprehensive CI pipelines for every submitted PR (Pull Request), simplifies the process of assessing potential disruptions to the project. As a result, we have successfully executed large-scale refactorings over the years. For example, our Productivity Engineering team recently migrated several hundred services from Spring Boot 2.7 to Spring Boot 3.2. The team’s acquired expertise in patterns and exceptional cases for this migration, along with the entire planning process being conducted within a single team, led to estimated labour cost savings of a couple of hundred thousand dollars. This contrasts with a scenario where each team would have performed the migration independently.

4. Ensure Training and Support

Adopting a new way of working can initially result in reduced productivity as teams onboarded to the monorepo learn unfamiliar technologies and standards. Accelerating this transition is crucial—comprehensive documentation, educational initiatives, support channels, and accessible expert consultations are key strategies to quickly turn a productivity dip into a productivity incline.

5. Commit to Stability

Avoid the temptation to overextend at the beginning. Prioritise the most critical capabilities that meet your client’s needs, ensuring they are robust and reliable. This focus is essential for building trust and encouraging continued use of your solution. Simultaneously, emphasise the importance of stability and expect it from your clients. Collaborate with them to maintain consistently successful CI builds, which is crucial for unlocking the full benefits of the monorepo, such as efficient large-scale refactorings. After all, if builds of the main branch are frequently failing, how can you be sure that your refactoring efforts aren’t introducing new issues?

Reflective Thoughts as We Look Forward

As we continue to develop the SABRE2 monorepo approach at Sabre, these lessons remind us that true transformation requires not just technological change but a sustained commitment to meeting our developers’ needs. Our goal is to provide robust, effective tools that empower our teams in an evolving tech landscape.