# Roadmap to Reasoning in Microservice Systems: A Rapid Review
## 1 Introduction  
Microservices architecture is a specific style of service-oriented architecture. It is built of microservices that are relatively small and loosely coupled, running in their processes and communicating through lightweight communication protocols [1, 2]. This architecture promotes dynamic and independent development, scaling, and deployment [1, 3]. Therefore, several organizations, such as Netflix, Amazon, and Spotify, have adopted microservice architecture to build scalable, maintainable software systems [4, 5]. This architecture style influences the structure of organizations, such that individual components are typically developed by a specific team; dependencies between components lead to dependencies between teams [1]. Moreover, multiple surveys ([[https://martinfowler.com/articles/microservices.html](https://martinfowler.com/articles/microservices.html)]([https://martinfowler.com/articles/microservices.html](https://martinfowler.com/articles/microservices.html)) accessed on 1 January 2023) [6, 7] identified and highlighted the following microservices characteristics,  
1. Autonomous: Separately and independently developed and deployed within their own lifecycle. 2. Scalability: Horizontally scaling up and down per the need, while they are small and stateless components. 3. Heterogeneity: Various programming languages and technologies can involve the same system. Specialization: Each microservice handles specific domain logic and communicates with other microservices through communication protocols. * Fault Tolerance: They tolerate failures by applying different resiliency techniques, such as a failover mechanism whenever a service fails. These characteristics provide many advantages; however, they bring challenges to the system's development and evolution at the same time. These challenges become apparent when we aim to reason about the system as a whole to understand the dependencies, impact analysis, departures from the original architectural blueprint, etc. In general, a reasoning system [8] is a program that generates conclusions from the available knowledge about a particular system. Reasoning systems offer two modes human-centered and technical reasoning. The human-centered focus is on interaction with human experts who guide the processing or lead to conclusions. Technical reasoning is batch processing that considers all the available information at once to generate the answer. When making development decisions, we do not use any reasoning system and base our decisions on our limited or approximated knowledge of the system. In microservices, developers often understand their microservice needs within a bounded domain context but typically do not consider the holistic system perspective as it evolves quickly and transparently while being managed by distinct development teams. In microservices, the reasoning challenges are the non-existence of the holistic system perspective given the decentralized system nature. This is further exacerbated when dealing with the autonomous and heterogeneity characteristics of the architecture. This limits the capabilities to understand the system completely and reason about it. Furthermore, the traditional software visualization approaches serving human experts are limited when we attempt to fit them into the enterprise and scalability characteristics of microservices [1; 6; 9]. Finally, the ever-changing evolution aspect with many moving parts changing continuously makes it difficult when assuring various quality attributes [6]. Facing these challenges requires constructing different representations and views of the microservices architecture. These different system viewpoints can help in understanding and reasoning about the system and its properties [1]. This paper gives an overview of the microservice-based reasoning process and its different perspectives. We review some of the highlighted literature and illustrate and discuss the reasoning process stages in more detail.