Mitigating Microservices Change Risk with Platformatic's Breaking Change Detector

Mitigating Microservices Change Risk with Platformatic's Breaking Change Detector

In the ever-evolving landscape of software development, the choice of architectural style can significantly impact a project's success. For years, monolithic architectures have been the go-to approach, characterized by bundling all components, modules, and functionalities into a single, colossal codebase. While monoliths have their merits, such as simplicity in deployment and development, they also pose challenges as projects grow in size and complexity.

Decomposing the Monolith

Imagine a software project with numerous developers, each working on different parts of the monolithic codebase. The number of possible communication paths between these team members grows exponentially with the team's size, leading to increased communication overhead, decision-making bottlenecks, and a loss of individual responsibilities. In response to these challenges, microservices architecture has emerged as a transformative approach to software development and deployment.

Autonomous Development and Deployment

Microservices offer a solution to the operational complexity that arises when multiple teams collaborate on a single application. The key idea is to break down the monolithic application into smaller, independent services, with each one responsible for specific functionalities. This decomposition isolates complexity within each microservice, making it more manageable and understandable.

One of the fundamental principles of microservices is autonomy. Each team takes ownership of a specific microservice, handling its development, testing, and deployment independently. This autonomy reduces the need for extensive cross-team coordination, empowering teams to make decisions within their service's scope. It fosters faster development cycles and a sense of ownership among teams.

Parallel Development

Microservices enable concurrent development by multiple teams on different services. This parallelization is crucial for scaling an engineering organization. It eliminates bottlenecks caused by teams waiting to access a shared monolithic codebase. Each team can work on its microservice without being blocked by others, leading to accelerated feature delivery.

Minimized Interactions

In a monolithic environment, communication and coordination complexity increase as the number of developers and teams grows. Microservices address this issue by limiting interactions to well-defined Application Programming Interface (API) contracts between services. Teams can work in isolation as long as they adhere to these contracts, reducing operational overhead.

Fault Isolation

A single bug or failure in a monolithic system can have cascading effects across the entire application. Microservices, by design, contain faults within the scope of a single service. If one microservice encounters an issue, it is less likely to affect others. This fault isolation reduces the impact of problems, making them easier to manage and troubleshoot.

Scalability and Technological Diversity

Microservices allow organizations to scale services independently based on demand. This elasticity ensures efficient resource allocation, reducing operational complexities associated with resource management in monolithic systems. Furthermore, different microservices can use technologies and languages that best suit their requirements, accommodating diverse skill sets and preferences within engineering teams.

So, why do we need the Breaking Change Detector?

In the world of microservices, agility and scalability are quintessential. But with great flexibility comes great complexity, especially when it comes to managing the risks associated with constant change. That’s why we are excited to introduce a groundbreaking solution to this challenge - the Platformatic Breaking Change Detector.

Microservices offer incredible flexibility, but managing the ripple effects of changes can be complex. Breaking down monolithic applications into autonomous services has enabled teams to work in parallel with minimal interactions, reducing coordination overhead and allowing each team to focus on its area of expertise. However, coordinating and deploying numerous microservices effectively can be a daunting task, especially for distributed teams operating across geographical boundaries.

Every modification, update, or addition to a microservice can have far-reaching implications, affecting the entire system's stability, performance, and reliability. As organizations strive to meet the demands of an ever-evolving market, it's imperative to proactively address these challenges and establish a systematic approach to assess and manage the risks associated with changes in a microservices environment.

How does the Breaking Change Detector work?

The Platformatic Breaking Change Detector serves as your guardian in this dynamic landscape, offering a crystal-clear view of the impact a change will have on the public API level and which teams it will affect. With Breaking Change Detector, developers can push new code with confidence, knowing exactly how their changes will impact their company's entire microservice ecosystem.

The Breaking Change Detector delves deep into your microservices architecture, leveraging live OpenTelemetry data to map out dependencies and interactions, allowing users to even detect services that they were not aware of. By integrating with your CI and leveraging multiple data points through open tracing and client integration, when a change is made, it analyzes potential risks, identifying what could break and the likelihood of that happening. This insight empowers your teams to make informed decisions and reduce the uncertainty that often comes with pushing new code.

The algorithm and underlining data structures that are used to compute the risk of a given pull request to break your production environment are detailed in our recent research paper “Evaluating the Risk of Changes in a Microservices Architecture”, available here.

Getting Started

Integrating the Breaking Change Detector in your application is incredibly easy if you are deploying on Platformatic Cloud (or Platformatic Enterprise)- simply add a new step in your GitHub action configuration to match the following:

name: Platformatic PR Previews
on:
  pull_request:
    paths-ignore:
      - 'docs/**'
      - '**.md'

jobs:
  build_and_deploy:
    permissions:
      contents: read
      pull-requests: write
    runs-on: ubuntu-latest
    env:
      DATABASE_URL: '...'
      PLT_SERVER_LOGGER_LEVEL: info 
      PORT: 3001 
      PLT_SERVER_HOSTNAME: 127.0.0.1 

    steps:
      - name: Checkout application project repository
        uses: actions/checkout@v3
      - name: npm install --omit=dev
        run: npm install --omit=dev
      - name: Deploy project
        id: deploy-project
        uses: platformatic/onestep@latest
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          platformatic_workspace_id: ${{ secrets.PLATFORMATIC_DYNAMIC_WORKSPACE_ID }}
          platformatic_workspace_key: ${{ secrets.PLATFORMATIC_DYNAMIC_WORKSPACE_API_KEY }}
          platformatic_config_path: ./platformatic.runtime.json
    outputs:
      deployment_id: ${{ steps.deploy-project.outputs.deployment_id }}

  calculate_risk:
    permissions:
      contents: read
      pull-requests: write
    needs: build_and_deploy
    runs-on: ubuntu-latest
    steps:
      - name: Calculate risk
        uses: platformatic/onestep/actions/calculate-risk@latest
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          platformatic_workspace_id: ${{ secrets.PLATFORMATIC_DYNAMIC_WORKSPACE_ID }}
          platformatic_workspace_key: ${{ secrets.PLATFORMATIC_DYNAMIC_WORKSPACE_API_KEY }}
          platformatic_deployment_id: ${{ needs.build_and_deploy.outputs.deployment_id }}

Every time a pull request is open on your repository, it will automatically generate this report:

Wrapping Up

In the fast-paced world of software development, embracing microservices as a transformative paradigm shift is not without its complexities. Still, when managed effectively, microservices offer agility, scalability, and continuous delivery—an enticing proposition for organizations aiming to thrive in the ever-evolving tech landscape.

The journey to mastering microservices risk management is ongoing. By using the Breaking Change Detector, we can navigate the intricate microservices landscape, charting a course to success, innovation, and resilience in an ever-changing digital world while continuously improving our methods and adapting to new challenges on the horizon.

You can find out more about Breaking Change Detector here, and delve into the algorithm we unveiled, enabling development teams to determine the risk associated with every change to any of the microservices in a system.

Get started with Platformatic