How Do Microservice API Patterns Impact Understandability? A Controlled Experiment
<|reference_start|>How Do Microservice API Patterns Impact Understandability? A Controlled Experiment: Microservices expose their functionality via remote Application Programming Interfaces (APIs), e.g., based on HTTP or asynchronous messaging technology. To solve recurring problems in this design space, Microservice API Patterns (MAPs) have emerged to capture the collective experience of the API design community. At present, there is a lack of empirical evidence for the effectiveness of these patterns, e.g., how they impact understandability and API usability. We therefore conducted a controlled experiment with 6 microservice patterns to evaluate their impact on understandability with 65 diverse participants. Additionally, we wanted to study how demographics like years of professional experience or experience with MAPs influence the effects of the patterns. Per pattern, we constructed two API examples, each in a pattern version "P" and a functionally equivalent non-pattern version "N" (24 in total). Based on a crossover design, participants had to answer comprehension questions, while we measured the time. For five of the six patterns, we identified a significant positive impact on understandability, i.e., participants answered faster and / or more correctly for "P". However, effect sizes were mostly small, with one pattern showing a medium effect. The correlations between performance and demographics seem to suggest that certain patterns may introduce additional complexity; people experienced with MAPs will profit more from their effects. This has important implications for training and education around MAPs and other patterns.<|reference_end|>
@article{bogner2024how,
    title={How Do Microservice API Patterns Impact Understandability? A Controlled
  Experiment},
    author={Justus Bogner, Pawel W'ojcik, Olaf Zimmermann},
    journal={arXiv preprint arXiv:2402.13696},
    year={2024},
    doi={10.1109/ICSA59870.2024.00023},
    archivePrefix={arXiv},
    eprint={2402.13696},
    primaryClass={cs.SE}
}