<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>A. Makris, K. Tserpes, T. Varvarigou, Transition from monolithic to microservice-based
applications. Challenges from the developer perspective, Open Research Europe</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.1109/ACCESS.2025.3570658</article-id>
      <title-group>
        <article-title>Performance Comparison between a Monolithic and a Microservice Application</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Reinhard Bernsteiner</string-name>
          <email>reinhard.bernsteiner@mci.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marco Blasisker</string-name>
          <email>marco.blasisker@mci.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Michael Kohlegger</string-name>
          <email>michael.kohlegger@mci.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Ploder</string-name>
          <email>christian.ploder@mci.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Stephan Schlögl</string-name>
          <email>stephan.schloegl@mci.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Management Center Innsbruck</institution>
          ,
          <addr-line>Universitaetsstrasse 15, 6020 Innsbruck</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2019</year>
      </pub-date>
      <volume>2</volume>
      <issue>24</issue>
      <fpage>208</fpage>
      <lpage>215</lpage>
      <abstract>
        <p>The evolution from monolithic to cloud-native microservices architectures represents a fundamental shift in software engineering practices, driven by the increasing demands for scalability, reliability, and rapid deployment in modern digital environments. The fundamental distinction between monolithic and microservices architectures lies in their codebase configuration and component organization. Microservices employ multiple, independent codebases distributed across separate services within a distributed system, while monolithic architectures operate as singular, cohesive units with unified codebases that create interdependencies among all components. This structural difference has cascading effects on various system design, deployment, and maintenance aspects. Due to these advantages, migrating existing monolithic systems to a microservice architecture might be beneficial because of a potential high. This decision must be evaluated thoroughly since the migration effort can be very high. To gain practical insights into migrating a typical monolithic application, selected components of a webshop were migrated as a representative example. This approach aims to highlight the essential steps involved in the migration process and identify potential challenges. Subsequently, the newly developed system is evaluated against the original monolithic version, focusing on performance. The findings from this prototype migration are intended to serve as a foundation for guiding future migration decisions _____________________________________________________ SQAMIA 2025: Workshop on Software Quality, Analysis, Monitoring, Improvement, and Applications, September 20--12, 2025, Maribor, Slovenia ∗ Corresponding author. † These authors contributed equally.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Monolithic Application</kwd>
        <kwd>System Performance</kwd>
        <kwd>Microservice Architecture</kwd>
        <kwd>System Migration</kwd>
        <kwd>Cloud-native</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Application</p>
    </sec>
    <sec id="sec-2">
      <title>1. Introduction</title>
      <p>
        The evolution from monolithic microservices architectures represents a fundamental shift in
software engineering practices, driven by the increasing demands for scalability, reliability, and
rapid deployment in modern digital environments [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Monolithic architectures, characterized by
unified codebases and integrated components, have traditionally served as the foundation for
software development but face significant limitations in contemporary cloud computing
environments [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. In contrast, cloud-native applications built on microservices principles offer
enhanced scalability, fault tolerance, and development agility through their containerized,
independently deployable service components [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
      <p>
        While monolithic systems may remain viable for specific use cases, the transition to cloud-native
microservices architecture delivers substantial operational efficiency, system resilience, and
organizational adaptability, particularly for enterprises experiencing rapid growth or requiring
highavailability services [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
      <p>
        While the benefits of microservices architecture are substantial, organizations must carefully
evaluate their specific circumstances and requirements before initiating migration efforts [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. The
scope of migration varies depending on how a monolithic application is structured and built [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. The
project's central aim is to gain experience migrating a typical monolithic application to a
microservice system using state-of-the-art technologies and tools. The newly developed application
is compared with the original monolithic version in terms of performance. Performance is a key
characteristic of microservices and includes several dimensions. In this project, the services' response
time and CPU usage are measured. Parts of a monolithic webshop are migrated as an example.
      </p>
      <p>This leads to the research question for this project: What impact does the migration of a
monolithic application to a microservice-based application have on performance (response time and
CPU usage)?</p>
      <p>
        Developing and validating a prototype can be justified as a scientific method to answer the
research question. Prototypes allow to test whether proposed ideas, theories, or designs are practical
and feasible before committing to full development [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. This early-stage validation reduces the risk
of pursuing unworkable concepts and saves time and resources [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. The results of this prototype
migration are intended to help establish a foundation for future migration decisions.
      </p>
    </sec>
    <sec id="sec-3">
      <title>2. Theoretical Background</title>
      <sec id="sec-3-1">
        <title>2.1. Monolithic Architecture</title>
        <p>
          This section presents the central theoretical concepts relevant to the migration project.
Monolithic architecture represents the traditional approach to software development, where
applications are constructed as unified, self-contained units with a single codebase that couples all
business concerns together. This architectural model treats the entire application as a singular,
extensive computing network, requiring comprehensive updates to the whole stack when any
modifications are necessary. The monolithic approach has historically provided simplicity in
development and deployment, as it involves managing a single executable file that encompasses all
application functionality [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ].
        </p>
        <p>
          However, monolithic systems present significant scalability challenges as applications grow in
complexity and user base. The integrated structure of monoliths creates bottlenecks when
attempting to scale specific components independently, often requiring scaling the entire application
even when only particular features experience increased demand [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. This limitation becomes
particularly problematic for organizations experiencing rapid growth, as demonstrated by Netflix's
infrastructure challenges in 2009, ultimately leading to their pioneering migration from monolithic
to microservices architecture [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
        </p>
        <p>
          The coupling of components in monolithic systems also creates reliability concerns, where
failures in one component can potentially compromise the entire application's functionality. This
lack of fault isolation means that a single point of failure can result in complete system downtime,
making monolithic architectures less resilient compared to distributed alternatives. Additionally,
monolithic systems often constrain development team organization and technology choices, as all
teams must work within the same technological framework and coordinate changes across the entire
codebase [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>2.2. Microservice Architecture</title>
        <p>
          This kind of software architecture represents a paradigm shift toward microservices-oriented,
containerized, and dynamically orchestrated systems designed to optimize resource utilization in
cloud computing environments. These applications are fundamentally structured as collections of
small, independent services that can be developed, deployed, and scaled autonomously while
maintaining loose coupling between components. The microservices architecture adheres to several
key principles that distinguish it from traditional monolithic approaches [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ].
        </p>
        <p>
          To meet the flexible requirements of microservices, containers are used to encapsulate each
module, which replaces the traditional virtual machine (VM) operating mode. Container can be
started and stoped quickly to optimize resource consumption [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]. Kubernetes is a container
orchestration system that manages the deployment, scaling, and operation of containers across a
cluster. Kubernetes typically runs on clusters of VMs provided by cloud platforms or private
infrastructure [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ].
        </p>
        <p>
          The single responsibility principle ensures that each microservice focuses on a specific business
function or capability, promoting maintainability and enabling easy replacement of individual
services without affecting the broader system [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. Decentralized governance empowers
development teams to make independent decisions regarding technology choices, programming
languages, and frameworks that best suit their specific service requirements. This autonomy
facilitates faster development cycles and allows organizations to leverage the most appropriate tools
for each service's unique needs [17].
        </p>
        <p>Independent deployment capabilities represent another crucial advantage of microservices
architecture, enabling faster release cycles and reducing the risk of deployment failures. Each service
can be updated, scaled, or modified without requiring changes to other system components,
significantly improving development velocity and reducing coordination overhead [18]. Fault
isolation mechanisms ensure that failures in one microservice do not cascade throughout the system,
enhancing overall resilience and maintaining service availability even when individual components
experience issues [19].</p>
        <p>Containerization serves as the foundation for cloud-native microservices deployment, providing
lightweight, standardized units that package application code with all necessary dependencies.
Containers enable rapid scaling capabilities and portability across different environments, while
orchestration platforms like Kubernetes manage the complexity of deploying and scaling
containerized applications. The stateless nature of many microservices further enhances scalability
by eliminating persistent memory requirements and enabling dynamic resource allocation based on
demand [20].</p>
      </sec>
      <sec id="sec-3-3">
        <title>2.3. Performance Testing</title>
        <p>Performance testing is part of software testing and is an essential phase in the software development
process for evaluating a software product. New problems can arise with web applications due to
high user numbers and the associated higher load. The performance of a web application is typically
determined under normal load using a load test and under very high load using a stress test. Different
metrics can be specified with the tests.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>3. Description of the Monolithic and Microservice Application</title>
      <p>This section gives an overview of the architecture of the monolithic and microservices application.
Furhtermore, the use technologies and toos for both systems are presented.</p>
      <sec id="sec-4-1">
        <title>3.1. Monolithic System</title>
        <p>ShoppingCart is an e-commerce website developed with Java. Users can look closely at products and
add them to their virtual shopping cart. The user must be logged in and registered to use the shopping
cart function. To successfully place the order, there is a typical order flow where the user's data is
entered again, and a final order button. There is also an About Us page with information about the
store and a contact page to contact the operator. Admins can also add products and edit existing
products.</p>
        <p>The application of the monolithic application is based on a model-view-controller architecture.
The front end is realized by JSP pages, which are coupled with the Spring controllers. An H2 database
is used as the database. The data models are created with Hibernate in Java. The build tool Maven is
used for compilation and deployment. Maven creates a war (Web Application Resource) file, which
is executed using Apache Tomcat Server.</p>
      </sec>
      <sec id="sec-4-2">
        <title>3.2. Microservice System</title>
        <p>The individual components of the sample application are ported into independent microservices.
The new microservice architecture creates a distributed system for which new interfaces must be
made. To determine how large a microservice should be, the various data models are considered and
analyzed to determine which data is closely related and which is independent. Similar data is
grouped, and the individual services are derived from this. This results in the microservices product
service, user service, cart service, and order service for the ShoppingCart application. In case of
doubt, services should be roughly granulated, as these can always be broken down further if
necessary or advantageous. REST interfaces are created to communicate with the microservices.</p>
        <p>An API gateway is also required, containing the front end and the interface between users and
all microservices [21]. The API gateway uses the newly implemented REST interfaces to
communicate with the various microservices. A discovery service is also built to provide better name
resolution during communication and an overview of all running microservices. With the help of a
load balancer, it is possible to have a balanced load even with multiple instances of a microservice.
This enables the scalability of a microservice-based system.</p>
      </sec>
      <sec id="sec-4-3">
        <title>3.3. Overview of the Used Technologies and Tools</title>
        <p>ShoppingCart uses Spring MVC as the basis. Dynamic HTML pages are rendered with the help of
JSP, and Spring Security is also used for authentication, as well as Spring Webflow for the check-out
process. An H2 database is used, and Hibernate is the interface. Maven is also used to manage
dependencies and as a build tool. The migration to microservices means that Spring MVC can be
dispensed completely. Spring Boot is used instead. In addition, JSP is replaced with AngularJS and
the H2 database is replaced with a MariaDB. Finally, Spring Webflow must be removed, as Spring
Webflow is not compatible with AngularJS. The technologies are summarized once again in table 1:</p>
        <sec id="sec-4-3-1">
          <title>Microservices Comments</title>
          <p>Spring Boot Spring MVC is a Model-View-Controller framework for
web applications. Spring Boot is used for REST APIs and
requires less configuration. It is, therefore, well suited as a
foundation for microservices.</p>
          <p>AngularJS Java Server Pages are compatible with Spring Web MVC.</p>
          <p>A different frontend technology is required since REST
APIs are used for microservices. AngularJS was chosen
here because it is compatible, and there is much online
information for the migration.</p>
          <p>MariaDB MariaDB has a large community and will make cloud
deployment easier in the future.</p>
          <p>Hibernate Not Changed
Spring Webflux Spring Webflux includes WebClient, an interface that
enables web requests for reactive websites. Spring Security
will also be migrated to Spring Webflux Security.</p>
          <p>Spring Security Despite Spring Webflux Security, Spring Security is still
used to configure web filters.</p>
          <p>Spring Webflow is not compatible with AngularJS. The
order flow must, therefore, be rebuilt.</p>
        </sec>
        <sec id="sec-4-3-2">
          <title>Not Changed Spring Cloud is used for discovery services and internal load balancing.</title>
        </sec>
      </sec>
      <sec id="sec-4-4">
        <title>3.4. Runtime Environment for the Monolith System</title>
        <p>To reduce possible differences in performance caused by the runtime environment, a branch of the
original version is used. This branch has already been converted to Spring Boot and MariaDB. The
application is started in the Google Compute Engine. This is based on the same "e2-medium"
computer type and the same image as the Kubernetes instances. This is to avoid performance
differences due to different computing power.</p>
      </sec>
      <sec id="sec-4-5">
        <title>3.5. Runtime Environment for the Microservice System</title>
        <p>The microservices are started in the Google Kubernetes Engine, as described in the Deployment
section. An external IP address is assigned for the API gateway, and port 8080 is forwarded. The
cluster is set up so that 6 nodes are used. The "e2-medium" machine is selected as the computer type
for the nodes. This offers 4GB RAM and 2 virtual CPUs. For the performance comparison, automatic
scaling is deactivated for the time being, and instead, a fixed scaling factor of 2 instances is set for
each service. This represents approximately how the system would run in standard operation.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>4. Performance Measurements</title>
      <p>In this chapter, comparisons are made between the original monolithic application and the migrated
microservice application. The performance for various use cases is recorded and compared for both
application versions.</p>
      <p>The microservices are packaged into containers using Docker and deployed in a Kubernetes
cluster at any cloud provider. When Kubernetes operates on virtualized infrastructure, VM clusters
can be provisioned, managed, and scaled up or down with relative ease. Most cloud providers offer
virtual machines as their fundamental compute units, along with services specifically designed to
support Kubernetes deployments.</p>
      <p>All measurements are carried out using the Apache JMeter tool. The following dimensions are
used to measure performance [22,23]:</p>
      <p>Response time: comparison of the monolith with microservices; response time is the time
between sending a request and receiving the complete response
CPU usage for the following services:
· API-gateway: API gateway required, which contains the front end and serves as an
interface between users and all microservices
· The discovery service can recognize unreachable services, remove them, or redirect
requests to available instances.
· Cart-Service: This service represents the shopping cart. For each customer, a new cart
is created
· Order-Service: This service handles customer orders
· User-Service: The User-Service is responsible for registration and login</p>
      <sec id="sec-5-1">
        <title>4.1. Test Plan</title>
        <p>To measure performance, a fixed sequence of queries is defined, which should cover the functions
and workflow of the application (Table 2). This is to ensure that a real workload is simulated. JSP
pages are called in the monolithic architecture, whereas, in the microservice architecture, the newly
implemented REST interfaces can be accessed.
There are four test cases (Table 3) whereby the HTTP query process is always the same. However,
the number of threads that simulate the number of users and the number of repetitions changes for
each test. Each test triggers a different load, and it is possible to compare how the two applications
behave. Ramp-up is the time it takes for all users to be added to the test. Even in a productive
environment, the number of users does not typically increase to 100 percent from one second to the
next. The ramp-up time should, therefore, simulate a natural increase in the number of users.</p>
      </sec>
      <sec id="sec-5-2">
        <title>4.2. Performance Results – Response Times</title>
      </sec>
      <sec id="sec-5-3">
        <title>4.3. CPU Usage – Test Case 1</title>
        <p>During the test period, it can be seen that the CPU utilization of the microservices hardly increases
(Figure 1, left). In this case the microservices are spread across 5 VMs. For the microservice solution,
the metrics show that the CPU usage is always below 50 percent (Figure 1, right), compared to over
100 percent for the monolithic solution (Figure 2). This is possible because the e2-medium computer
type of the instance has CPU bursting, which allows the instance to temporarily access additional
CPU capacity.</p>
      </sec>
      <sec id="sec-5-4">
        <title>4.4. CPU Usage – Test Case 2</title>
        <p>With five simulated users, where all requests are repeated 100 times, no microservice uses more than
20 percent (Figure 3, left) of the CPU. This picture is also reflected in the utilization of the VM
instances (Figure 3, right). The VM of the monolithic software activates burst mode again, as the
CPU has already reached its limits, as depicted in Figure 4.</p>
      </sec>
      <sec id="sec-5-5">
        <title>4.5. CPU Usage – Test Case 3</title>
        <p>The microservices (services and VMs) have not yet reached their limits. The left part of Figure 5
represents the CPU utilization of the services, the VMs CPU utilization can be seen on the right side
of Figure 5. The VM of the monolith cannot cope with the load even in bursting mode, as shown in
Figure 6. These additional resources are limited to around two minutes. From this point onwards,
there are substantial deviations in the server response times.</p>
      </sec>
      <sec id="sec-5-6">
        <title>4.6. CPU Usage – Test Case 4</title>
        <p>In Google Cloud Monitoring, it can be seen that microservices also reach their limits with 50 users
(Figure 7, left). The advantage, however, is that five VM instances are available for this workload.
The bottleneck in this case are the two VM instances, each with an API gateway, which also enter
burst mode during the test (Figure 7, right). To increase performance, the two API gateways' fixed
scaling would have to be removed or increased. The VM with the monolithic architecture is running
at full capacity throughout this test. It can be seen how the load initially rises to up to 200 percent
(Figure 8)with the help of burst mode and then levels off at around 100 percent.</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>5. Conclusions</title>
      <p>Regarding performance, particularly response time and CPU usage, it has been shown that
microservices deliver significantly better results than the monolithic system. With Kubernetes, the
services and the number of nodes in a cluster can be scaled automatically. This is a particular
advantage when the system is used very dynamically. If the load is higher, the services can be split
across several VM instances; if the load is lower, the number of nodes can be reduced again, saving
costs.</p>
      <p>An architecture based on microservices has further advantages compared to a monolithic
architecture. Defective services can be detected with health check metrics and restarted
automatically. With several replicas of a service, functionality is still guaranteed even if one of these
replicas fails. Such a system's maintenance and further development are also more efficient than a
monolithic system, especially if the system's complexity is high or increasing.</p>
      <p>On the other hand, there is the migration effort. Therefore, It is essential to conduct a thorough
analysis to clarify how the new system will be structured, which new interfaces need to be created,
and which technologies and tools will be used.</p>
    </sec>
    <sec id="sec-7">
      <title>Declaration on Generative AI</title>
      <p>During the preparation of this work, the authors used Grammarly in order to: Grammar and spelling
check. After using these tools, the authors reviewed and edited the content as needed and take full
responsibility for the publication's content.</p>
    </sec>
    <sec id="sec-8">
      <title>6. References</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>P.</given-names>
            <surname>Jatkiewicz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Okrój</surname>
          </string-name>
          ,
          <article-title>Differences in performance, scalability, and cost of using microservice and monolithic architecture</article-title>
          . In: J.
          <string-name>
            <surname>Hong</surname>
          </string-name>
          (ed.).
          <source>Proceedings of the 38th ACM/SIGAPP Symposium on Applied Computing</source>
          ,
          <volume>1038</volume>
          -
          <fpage>1041</fpage>
          . New York,NY,United States: Association for Computing Machinery;
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>H.</given-names>
            <surname>Hassan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Abdel-Fattah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Mohamed</surname>
          </string-name>
          , Migrating from Monolithic to Microservice Architectures:
          <string-name>
            <given-names>A Systematic</given-names>
            <surname>Literature</surname>
          </string-name>
          <string-name>
            <surname>Review</surname>
          </string-name>
          ,
          <source>International Journal of Advanced Computer Science and Applications</source>
          <volume>15</volume>
          (
          <year>2024</year>
          ); doi: 10.14569/IJACSA.
          <year>2024</year>
          .
          <volume>0151013</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>G.</given-names>
            <surname>Blinowski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ojdowska</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Przybylek</surname>
          </string-name>
          ,
          <article-title>Monolithic vs</article-title>
          .
          <source>Microservice Architecture: A Performance and Scalability Evaluation, IEEE Access 10</source>
          ,
          <fpage>20357</fpage>
          -
          <lpage>20374</lpage>
          (
          <year>2022</year>
          ); doi: 10.1109/ACCESS.
          <year>2022</year>
          .
          <volume>3152803</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>S.</given-names>
            <surname>Chinamanagonda</surname>
          </string-name>
          ,
          <article-title>Revitalizing Legacy Systems: Proven Strategies for Successful Application Modernization</article-title>
          ,
          <source>Journal of Computing and Information Technology</source>
          <volume>4</volume>
          (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>C.</given-names>
            <surname>Zhong</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Huang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <article-title>Impacts, causes, and solutions of architectural smells in microservices: An industrial investigation</article-title>
          ,
          <source>Software: Practice and Experience</source>
          <volume>52</volume>
          ,
          <fpage>2574</fpage>
          -
          <lpage>2597</lpage>
          (
          <year>2022</year>
          ); doi: 10.1002/spe.3138.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>D.</given-names>
            <surname>Faustino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Gonçalves</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Portela</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. R.</given-names>
            <surname>Silva</surname>
          </string-name>
          ,
          <article-title>Stepwise migration of a monolith to a microservice architecture: Performance and migration effort evaluation</article-title>
          ,
          <source>Performance Evaluation</source>
          <volume>164</volume>
          ,
          <issue>102411</issue>
          (
          <year>2024</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>E.</given-names>
            <surname>Bjarnason</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Lang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mjöberg</surname>
          </string-name>
          ,
          <article-title>An empirically based model of software prototyping: a mapping study and a multi-case study</article-title>
          ,
          <source>Empirical Software Engineering</source>
          <volume>28</volume>
          (
          <year>2023</year>
          ); doi: 10.1007/s10664-023-10331-w.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>I.</given-names>
            <surname>Koskinen</surname>
          </string-name>
          , J. Frens, Research Prototypes,
          <source>Archives of Design Research</source>
          <volume>30</volume>
          ,
          <fpage>5</fpage>
          -
          <lpage>14</lpage>
          (
          <year>2017</year>
          ); doi: 10.15187/adr.
          <year>2017</year>
          .
          <volume>08</volume>
          .30.
          <issue>3</issue>
          .5.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>R. P.</given-names>
            <surname>Singh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Thakur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. M. A.</given-names>
            <surname>Razavi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Sankhla</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K. K.</given-names>
            <surname>Singh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I. H.</given-names>
            <surname>Limbasiya</surname>
          </string-name>
          ,
          <article-title>Monolithic and Microservice Architecture: A Sustainable Approach</article-title>
          .
          <source>In: 2025 3rd IEEE International Conference on Industrial Electronics: Developments &amp; Applications (ICIDeA)</source>
          ,
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          . IEEE;
          <year>2025</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>V.</given-names>
            <surname>Velepucha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Flores</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          <article-title>Survey on Microservices Architecture: Principles, Patterns and Migration Challenges</article-title>
          ,
          <source>IEEE Access 11</source>
          ,
          <fpage>88339</fpage>
          -
          <lpage>88358</lpage>
          (
          <year>2023</year>
          ); doi: 10.1109/ACCESS.
          <year>2023</year>
          .
          <volume>3305687</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>C.</given-names>
            <surname>Henríquez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Valencia</surname>
          </string-name>
          , G. Sánchez, Architectural Evolution from Monolithic to Microservices
          <source>in Scalable Systems: A Case Study of Netflix, Prospectiva</source>
          <volume>23</volume>
          ,
          <issue>12</issue>
          (
          <year>2025</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>V.</given-names>
            <surname>Velepucha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Flores</surname>
          </string-name>
          ,
          <article-title>Monoliths to microservices - Migration Problems and Challenges: A SMS</article-title>
          . In: 2021
          <source>Second International Conference on Information Systems and Software Technologies (ICI2ST)</source>
          ,
          <fpage>135</fpage>
          -
          <lpage>142</lpage>
          . IEEE;
          <year>2021</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Abgaz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>McCarren</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Elger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Solan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Lapuz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Bivol</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Jackson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Yilmaz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Buckley</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <article-title>Decomposition of Monolith Applications Into Microservices Architectures: A Systematic Review</article-title>
          ,
          <source>IEEE Transactions on Software Engineering</source>
          <volume>49</volume>
          ,
          <fpage>4213</fpage>
          -
          <lpage>4242</lpage>
          (
          <year>2023</year>
          ); doi: 10.1109/TSE.
          <year>2023</year>
          .
          <volume>3287297</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Ding</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Jiang</surname>
          </string-name>
          ,
          <string-name>
            <surname>Kubernetes-Oriented Microservice Placement With Dynamic Resource Allocation</surname>
          </string-name>
          ,
          <source>IEEE Transactions on Cloud Computing</source>
          <volume>11</volume>
          ,
          <fpage>1777</fpage>
          -
          <lpage>1793</lpage>
          (
          <year>2023</year>
          ); doi: 10.1109/TCC.
          <year>2022</year>
          .
          <volume>3161900</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>S.</given-names>
            <surname>Taherizadeh</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Grobelnik</surname>
          </string-name>
          ,
          <article-title>Key influencing factors of the Kubernetes auto-scaler for computing-intensive microservice-native cloud-based applications</article-title>
          ,
          <source>Advances in Engineering Software</source>
          <volume>140</volume>
          ,
          <issue>102734</issue>
          (
          <year>2020</year>
          ); doi: 10.1016/j.advengsoft.
          <year>2019</year>
          .
          <volume>102734</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>G.</given-names>
            <surname>Buchgeher</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Winterer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Weinreich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Luger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Wingelhofer</surname>
          </string-name>
          , M. Aistleitner,
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>