Abstract
Microservice-based architecture is a SOA-inspired principle of building complex systems as a composition of small, loosely coupled components that communicate with each other using language-agnostic APIs. This architectural principle is now becoming increasingly popular in industry due to its advantages, such as greater software development agility and improved scalability of deployed applications. In this work, we aim at collecting and categorizing best practices, challenges, and some existing solutions for these challenges employed by practitioners successfully developing microservice-based applications for commercial use. Specifically, we focus our study on “mature” teams developing microservice-based applications for at least two years, explicitly excluding “newcomers” to the field. We conduct a broad, mixed-method study that includes in-depth interviews with 21 practitioners and a follow-up online survey with 37 respondents, covering 37 companies in total. Our study shows that, in several cases, practitioners opt to deviate from the “standard” advice, e.g., instead of splitting microservices by business capabilities, they focus on resource consumption and intended deployment infrastructure. Some also choose to refrain from using multiple programming languages for implementing their microservices, as that practice hinders reuse opportunities. In fact, our study participants identified robust and shared infrastructural support established early on in the development process as one of the main factors contributing to their success. They also identified several pressing challenges related to the efficient managing of common code across services and the support of product variants. The results of our study can benefit practitioners who are interested to learn from each other, borrow successful ideas, and avoid common mistakes. It can also inform researchers and inspire novel solutions to some of the identified challenges.
Similar content being viewed by others
Notes
The paper presents all participants’ quotes in this style: PID: «quote».
The quote is anonymized, to preserve the confidentiality of the participant.
References
Alshuqayran N, Ali N, Evans R (2016) A systematic mapping study in microservice architecture. In: Proceedings of IEEE international conference on service-oriented computing and applications (SOCA), pp 44–51
Balalaie A, Heydarnoori A, Jamshidi P (2016) Microservices architecture enables DevOps: migration to a cloud-native architecture. IEEE Softw 33 (3):42–52
Balalaie A, Heydarnoori A, Jamshidi P, Tamburri D A, Lynn T (2018) Microservices migration patterns. Softw: Pract Exp 48(11):2019–2042
Bandeira A, Medeiros CA, Paixao M, Maia PH (2019) We need to talk about microservices: an analysis from the discussions on stackoverflow. In: Proceedings of the 16th international conference on mining software repositories (MSR), pp 255–259
Beck K, Beedle M, van Bennekum A, Cockburn A, Cunningham W, Fowler M, Grenning J, Highsmith J, Hunt A, Jeffries R, Kern J, Marick B, Martin R C, Mellor S, Schwaber K, Sutherland J, Thomas D (2001) Manifesto for agile software development. https://agilemanifesto.org (Last accessed: July 2020)
Beschastnikh I, Wang P, Brun Y, Ernst MD (2016) Debugging Distributed Systems. Commun ACM 59(8):32–37
Bogner J, Fritzsch J, Wagner S, Zimmermann A (2019) Assuring the evolvability of microservices: insights into industry practices and challenges. In: Proceedings of the 2019 IEEE international conference on software maintenance and evolution (ICSME), pp 546–556
Bratthall L, Jørgensen M (2002) Can you trust a single data source exploratory software engineering case study?. Empir Softw Eng 7(1):9–26
Bucchiarone A, Dragoni N, Dustdar S, Larsen S T, Mazzara M (2018) From monolithic to microservices: an experience report from the banking domain. IEEE Softw 35(3):50–55
Carvalho L, Garcia A, Assunção WKG, de Mello R, de Lima MJ (2019) Analysis of the criteria adopted in industry to extract microservices. In: Proceedings of the joint 7th international workshop on conducting empirical studies in industry and 6th international workshop on software engineering research and industrial practice, pp 21–30
Chen L (2018) Microservices: architecting for continuous delivery and DevOps. In: 2018 IEEE international conference on software architecture (ICSA), pp 39–46
Clements P, Northrop L (2002) Software product lines: practices and patterns. Addison-Wesley Longman Publishing Co., Inc
Cockroft A (2014) Migrating to microservices. https://youtu.be/1wiMLkXz26M, (Last accessed: July 2020)
Di Francesco P, Malavolta I, Lago P (2017) Research on architecting microservices: trends, focus, and potential for industrial adoption. In: Proceedings of IEEE international conference on software architecture (ICSA), pp 21–30
Di Francesco P, Lago P, Malavolta I (2018) Migrating towards microservice architectures: an industrial survey. In: Proceedings of IEEE international conference on software architecture (ICSA), pp 29–38
Di Francesco P, Lago P, Malavolta I (2019) Architecting with microservices: a systematic mapping study. J Syst Softw 150:77–97
Dragoni N, Giallorenzo S, Lafuente A L, Mazzara M, Montesi F, Mustafin R, Safina L (2017) Microservices: yesterday, today, and tomorrow. Springer International Publishing, pp 195–216
Fenn J, Linden A (2005) Gartner’s hype cycle special report for 2005. https://www.gartner.com/doc/484424/gartners-hype-cycle-special-report (Last accessed: July 2020)
Fielding RT (2000) Architectural styles and the design of network-based software architectures. PhD thesis, University of California, Irvine
Flanigan TS, McFarlane E, Cook S (2008) Conducting survey research among physicians and other medical professionals: a review of current literature. In: Proceedings of the survey research methods section. American Statistical Association, pp 4136–4147
Fowler M (2015) Microservice trade-offs. https://martinfowler.com/articles/microservice-trade-offs.html, (Last accessed: July 2020)
Francis J, Johnston M, Robertson C, Glidewell L, Entwistle V, Eccles M, Grimshaw J (2010) What is an adequate sample size?: Operationalising data saturation for theory-based interview studies. Psychol Health 25(10):1229–1245
Fritzsch J, Bogner J, Wagner S, Zimmermann A (2019) Microservices migration in industry: intentions, strategies, and challenges. In: Proceedings of the 2019 IEEE international conference on software maintenance and evolution (ICSME), pp 481–490
Ghofrani J, Lübke D (2018) Challenges of microservices architecture: a survey on the state of the practice. In: Proceedings of the 10th central european workshop on services and their composition (ZEUS), pp 1–8
Goodman L (1961) Snowball sampling. Ann Math Stat 32(1):148–170
Google Cloud (2019) Client libraries explained. https://cloud.google.com/apis/docs/client-libraries-explained, (Last accessed: July 2020)
Gouigoux JP, Tamzalit D (2017) From monolith to microservices: lessons learned on an industrial migration to a web oriented architecture. In: Proceedings of IEEE international conference on software architecture workshops (ICSAW), pp 62–65
Heinrich R, van Hoorn A, Knoche H, Li F, Lwakatare LE, Pahl C, Schulte S, Wettinger J (2017) Performance engineering for microservices: research challenges and directions. In: Companion proceedings of the 8th ACM/SPEC on international conference on performance engineering (ICPE), pp 223–226
Hunt A, Thomas D (1999) The pragmatic programmer: from journeyman to master. Addison-Wesley Longman Publishing
Jackson D, Daly J, Davidson P, Elliott D, Cameron-Traub E, Wade V, Chin C, Salamonson Y (2000) Women recovering from first-time myocardial infarction (MI): a feminist qualitative study. J Adv Nursing 32(6):1403–1411
Jassim GA, Whitford DL (2014) Understanding the experiences and quality of life issues of Bahraini women with breast cancer. Social Sci Med 107:189–195
Knoche H, Hasselbring W (2019) Drivers and barriers for microservice adoption—a survey among professionals in Germany. Int J Concept Model 14(1):1–35
Krippendorff K (2011) Agreement and information in the reliability of coding. Commun Methods Meas 5(2):93–112
Kruchten P, Nord R L, Ozkaya I (2012) Technical debt: from metaphor to theory and practice. IEEE Softw 29(6):18–21
Leitner P, Wittern E, Spillner J, Hummer W (2019) A mixed-method empirical study of function-as-a-service software development in industrial practice. J Syst Softw 149:340–359
Lewis J, Fowler M (2014) Microservices: a definition of this new architectural term. https://www.martinfowler.com/articles/microservices.html (Last accessed: July 2020)
Liu X, Guo Z, Wang X, Chen F, Lian X, Tang J, Wu M, Kaashoek MF, Zhang Z (2008) D3S: debugging deployed distributed systems. In: Proceedings of USENIX symposium on networked systems design and implementation (NSDI), pp 423–437
Luz W, Agilar E, de Oliveira MC, de Melo CER, Pinto G, Bonifácio R (2018) An experience report on the adoption of microservices in three brazilian government institutions. In: Proceedings of Brazilian Symposium on Software Engineering (SBES), pp 32–41
McLarty M (2016) Microservice architecture is agile software architecture. https://www.infoworld.com/article/3075880/microservice-architecture-is-agile-software-architecture.html (Last accessed: July 2020)
Mitra S (2018) Dilemma on utility modules: making a jar or a separate microservice?. https://dzone.com/articles/dilemma-on-utility-module-making-a-jar-or-separate-2 (Last accessed: July 2020)
Morse JM (1995) The significance of saturation. Qual Health Res 5(2):147–149
MuleSoft (2018) Microservices and DevOps: better together. https://www.mulesoft.com/resources/api/microservices-devops-better-together (Last accessed: July 2020)
Nadareishvili I, Mitra R, McLarty M, Amundsen M (2016) Microservice architecture: aligning principles, practices, and culture. O’Reilly Media
Newcomer E, Lomow G (2005) Understanding SOA with web services. Addison-Wesley
O’Connor C, Joffe H (2020) Intercoder reliability in qualitative research: debates and practical guidelines. Int J Qual Methods
Pahl C, Jamshidi P (2016) Microservices: a systematic mapping study. In: Proceedings of the international conference on cloud computing and services science (CLOSER), pp 137–146
Pohl K, Böckle G, Linden FJvd (2005) Software product line engineering: foundations, principles and techniques. Springer, Berlin
Postel J (1980) DoD standard transmission control protocol. RFC 761:1–88
Richardson C (2014) Microservice architecture. https://microservices.io/, (Last accessed: July 2020)
Richardson C (2018a) Pattern: API gateway/backends for frontends. https://microservices.io/patterns/apigateway.html, (Last accessed: July 2020)
Richardson C (2018b) Pattern: distributed tracing. https://microservices.io/patterns/observability/distributed-tracing.html, (Last accessed: July 2020)
Richardson C (2018c) Who is using microservices? https://microservices.io/articles/whoisusingmicroservices.htmlhttps://microservices.io/articles/whoisusingmicroservices.html (Last accessed: July 2020)
Rossi C, Shibley E, Su S, Beck K, Savor T, Stumm M (2016) Continuous deployment of mobile software at Facebook (Showcase). In: Proceedings of the ACM SIGSOFT international symposium on foundations of software engineering (FSE), pp 12–23
Seifermann V (2017) Application performance monitoring in microservice-based systems Bachelor’s thesis, Institute of Software Technology Reliable Software Systems, University of Stuttgart
Sinkowitz-Cochran R L (2013) Survey design: to ask or not to ask? That is the question.. Clin Infect Dis 56(8):1159–1164
Soldani J, Tamburri DA, Heuvel WJVD (2018) The pains and gains of microservices: a systematic grey literature review. J Syst Softw 146:215–232
Strauss A, Corbin J (1998) Basics of qualitative research: techniques and procedures for developing grounded theory. Sage, Thousand Oaks
Taibi D, Lenarduzzi V (2018) On the definition of microservice bad smells. IEEE Softw 35(3):56–62
Taibi D, Lenarduzzi V, Pahl C (2017) Processes, motivations, and issues for migrating to microservices architectures: an empirical investigation. IEEE Cloud Comput 4(5):22–32
Taibi D, Lenarduzzi V, Pahl C (2020) Microservices anti-patterns: a taxonomy. Springer International Publishing, pp 111–128
Viggiato M, Terra R, Rocha H, Valente MT, Figueiredo E (2018) Microservices in practice: a survey study. In: Brazilian workshop on software visualization, evolution and maintenance (VEM), pp 1–8
Vural H, Koyuncu M, Guney S (2017) A systematic literature review on microservices. In: Proceedings of international conference on computational science and its applications (ICCSA), pp 203–217
Wang Y, Kadiyala H, Rubin J (2020) Promises and challenges of microservices: an exploratory study. https://osf.io/8mxeg/wiki/home/ (Last accessed: July 2020).
Weiss D, Lai CTR (1999) Software product-line engineering: a family-based software development process. Addison-Wesley Longman Publishing Co., Inc
Zhang H, Li S, Zhang C, Jia Z, Zhong C (2019) Microservice architecture in reality: an industrial inquiry. In: 2019 IEEE international conference on software architecture (ICSA), pp 51–60
Zhou X, Peng X, Xie T, Sun J, Ji C, Li W, Ding D (2018) Fault analysis and debugging of microservice systems: industrial survey, benchmark system, and empirical study. IEEE Trans Softw Eng 14(8):1–18
Zimmermann O (2017) Microservices tenets: agile approach to service development and deployment. Comput Sci–Res Dev 32(3):301–310
Acknowledgements
We thank all of our interview and survey participants for sharing their experience on microservice-based development with us. We also thank Huawei Technologies Sweden AB, who partially funded this work.
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by: Xin Peng
Publisher’s note
Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.
Rights and permissions
About this article
Cite this article
Wang, Y., Kadiyala, H. & Rubin, J. Promises and challenges of microservices: an exploratory study. Empir Software Eng 26, 63 (2021). https://doi.org/10.1007/s10664-020-09910-y
Accepted:
Published:
DOI: https://doi.org/10.1007/s10664-020-09910-y