Abstract
Artificial Intelligence for IT Operations (AIOps) leverages AI approaches to handle the massive amount of data generated during the operations of software systems. Prior works have proposed various AIOps solutions to support different tasks in system operations and maintenance, such as anomaly detection. In this study, we conduct an in-depth analysis of open-source AIOps projects to understand the characteristics of AIOps in practice. We first carefully identify a set of AIOps projects from GitHub and analyze their repository metrics (e.g., the used programming languages). Then, we qualitatively examine the projects to understand their input data, analysis techniques, and goals. Finally, we assess the quality of these projects using different quality metrics, such as the number of bugs. To provide context, we also sample two sets of baseline projects from GitHub: a random sample of machine learning projects and a random sample of general-purposed projects. By comparing different metrics between our identified AIOps projects and these baselines, we derive meaningful insights. Our results reveal a recent and growing interest in AIOps solutions. However, the quality metrics indicate that AIOps projects suffer from more issues than our baseline projects. We also pinpoint the most common issues in AIOps approaches and discuss potential solutions to address these challenges. Our findings offer valuable guidance to researchers and practitioners, enabling them to comprehend the current state of AIOps practices and shed light on different ways of improving AIOps’ weaker aspects. To the best of our knowledge, this work marks the first attempt to characterize open-source AIOps projects.
Similar content being viewed by others
Code Availability
Our datasets, code and analysis are publicly available on https://github.com/roozbehaghili/studying_aiops_github.
Notes
A set of practices to maintain and deploy machine learning models.
A set of practices that aim to shorten the system development life cycle while preserving high quality.
References
Artstein R, Poesio M (2008) Inter-coder agreement for computational linguistics. Comput Linguist 34(4):555–596
Basili VR, Selby RW, Hutchens DH (1986) Experimentation in software engineering. IEEE Trans Softw Eng 7:733–743
Beschastnikh I, Brun Y, Ernst MD, Krishnamurthy A (2014) Inferring models of concurrent systems from logs of their behavior with csight. In: Proceedings of the 36th International Conference on Software Engineering, p 468–479
Bogatinovski J, Nedelkoski S, Acker A, Schmidt F, Wittkopp T, Becker S, Cardoso J, Kao O (2021) Artificial intelligence for it operations (aiops) workshop white paper. arXiv:2101.06054
Braiek HB, Khomh F (2022) Testing feedforward neural networks training programs. ACM Trans Softw Eng Methodol. https://doi.org/10.1145/3529318
Brown A, Tuor A, Hutchinson B, Nichols N (2018) Recurrent neural network attention mechanisms for interpretable system log anomaly detection. In: Proceedings of the first workshop on machine learning for computing systems, p 1–8
Businge J, Openja M, Kavaler D, Bainomugisha E, Khomh F, Filkov V (2019) Studying android app popularity by cross-linking github and google play store. 2019 IEEE 26th International Conference on Software Analysis. Evolution and Reengineering (SANER), IEEE, pp 287–297
Chen B, Jiang ZM (2021) A survey of software log instrumentation. ACM Comput Surv (CSUR) 54(4):1–34
Chen Z, Cao Y, Liu Y, Wang H, Xie T, Liu X (2020a) A comprehensive study on challenges in deploying deep learning based software. In: Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, p 750–762
Chen Z, Kang Y, Li L, Zhang X, Zhang H, Xu H, Zhou Y, Yang L, Sun J, Xu Z, et al. (2020b) Towards intelligent incident management: why we need it and how we make it. In: Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, p 1487–1497
Chen Z, Liu J, Gu W, Su Y, Lyu MR (2021) Experience report: deep learning-based system log analysis for anomaly detection. arXiv:2107.05908
Cliff N (1993) Dominance statistics: Ordinal analyses to answer ordinal questions. Psychol Bull 114(3):494
Coelho J, Valente MT, Silva LL, Shihab E (2018) Identifying unmaintained projects in github. In: Proceedings of the 12th ACM/IEEE International Symposium on Empirical Software Engineering and Measurement, pp 1–10
Cohen J (1960) A coefficient of agreement for nominal scales. Educ Psychol Meas 20(1):37–46
Coppola R, Ardito L, Torchiano M (2019) Characterizing the transition to kotlin of android apps: a study on f-droid, play store, and github. In: Proceedings of the 3rd ACM SIGSOFT International Workshop on App Market Analytics, p 8–14
Dabic O, Aghajani E, Bavota G (2021) Sampling projects in github for msr studies. In: 2021 IEEE/ACM 18th International Conference on Mining Software Repositories (MSR), IEEE, pp 560–564
Dakhel AM, Desmarais MC, Khomh F (2023) Dev2vec: Representing domain expertise of developers in an embedding space. Inf Softw Technol 159:107218
Dang Y, Lin Q, Huang P (2019) Aiops: real-world challenges and research innovations. In: 2019 IEEE/ACM 41st International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), IEEE, p 4–5
Devlin J, Chang MW, Lee K, Toutanova K (2018) Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv:1810.04805
Di Stefano A, Di Stefano A, Morana G, Zito D (2021) Prometheus and aiops for the orchestration of cloud-native applications in ananke. In: 2021 IEEE 30th International Conference on Enabling Technologies: Infrastructure for Collaborative Enterprises (WETICE), IEEE, p 27–32
Ding J, Wang X, Ye X, Ouyang Y, Chai Y (2021) Ttercl: An onsite real-time alarm root-cause location algorithm. In: 2021 IEEE International Conference on Big Data (Big Data), IEEE, p 4852–4858
Ding R, Fu Q, Lou JG, Lin Q, Zhang D, Shen J, Xie T (2012) Healing online service systems via mining historical issue repositories. In: Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering, ASE -12, p 318–321
Ding R, Fu Q, Lou JG, Lin Q, Zhang D, Xie T (2014) Mining historical issue repositories to heal large-scale online service systems. In: 2014 44th Annual IEEE/IFIP International Conference on Dependable Systems and Networks, IEEE, p 311–322
Du M, Li F, Zheng G, Srikumar V (2017) Deeplog: Anomaly detection and diagnosis from system logs through deep learning. In: Proceedings of the 2017 ACM SIGSAC conference on computer and communications security, p 1285–1298
El-Sayed N, Zhu H, Schroeder B (2017) Learning from failure across multiple clusters: A trace-driven approach to understanding, predicting, and mitigating job terminations. In: 2017 IEEE 37th International Conference on Distributed Computing Systems (ICDCS), IEEE, p 1333–1344
Feng Z, Guo D, Tang D, Duan N, Feng X, Gong M, Shou L, Qin B, Liu T, Jiang D, et al. (2020) Codebert: A pre-trained model for programming and natural languages. arXiv:2002.08155
Foalem PL, Khomh F, Li H (2023) Studying logging practice in machine learning-based applications. arXiv:2301.04234
Fu Q, Lou JG, Wang Y, Li J (2009) Execution anomaly detection in distributed systems through unstructured log analysis. In: 2009 ninth IEEE international conference on data mining, IEEE, p 149–158
Gao J, Wang H, Shen H (2020) Task failure prediction in cloud data centers using deep learning. IEEE Trans Serv Comput
Ghrairi N, Kpodjedo S, Barrak A, Petrillo F, Khomh F (2018) The state of practice on virtual reality (vr) applications: An exploratory study on github and stack overflow. 2018 IEEE International Conference on Software Quality. Reliability and Security (QRS), IEEE, pp 356–366
GitHub (2023) GitHub. https://github.com/, Last Accessed: 06-June-2023
GitHub I (2022) To create integrations, retrieve data, and automate your workflows, build with the github rest api. https://docs.github.com/en/rest
Guzman E, Azócar D, Li Y (2014) Sentiment analysis of commit comments in github: an empirical study. In: Proceedings of the 11th working conference on mining software repositories, p 352–355
Han J, Pei J, Yin Y (2000) Mining frequent patterns without candidate generation. ACM sigmod record 29(2):1–12
Han J, Pei J, Yin Y, Mao R (2004) Mining frequent patterns without candidate generation: A frequent-pattern tree approach. Data Min Knowl Discov 8(1):53–87
Han J, Cheng H, Xin D, Yan X (2007) Frequent pattern mining: current status and future directions. Data Min Knowl Discov 15(1):55–86
He P, Chen Z, He S, Lyu MR (2018a) Characterizing the natural language descriptions in software logging statements. In: Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering, p 178–189
He S, Zhu J, He P, Lyu MR (2016) Experience report: System log analysis for anomaly detection. In: 2016 IEEE 27th international symposium on software reliability engineering (ISSRE), IEEE, p 207–218
He S, Lin Q, Lou JG, Zhang H, Lyu MR, Zhang D (2018b) Identifying impactful service system problems via log analysis. In: Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, p 60-70
Hindle A, Barr ET, Gabel M, Su Z, Devanbu P (2016) On the naturalness of software. Commun ACM 59(5):122–131
Horschig S, Mattis T, Hirschfeld R (2018) Do java programmers write better python? studying off-language code quality on github. In: Conference companion of the 2nd international conference on art, science, and engineering of programming, p 127–134
Islam MJ, Nguyen G, Pan R, Rajan H (2019) A comprehensive study on deep learning bug characteristics. In: Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, p 510–520
Jupyter I (2022) nbconvert: Convert Notebooks to other formats. https://nbconvert.readthedocs.io/en/latest/, Last Accessed: 06-Dec.-2022
Kalliamvakou E, Gousios G, Blincoe K, Singer L, German DM, Damian D (2014) The promises and perils of mining github. In: Proceedings of the 11th working conference on mining software repositories, p 92–101
Kalliamvakou E, Gousios G, Blincoe K, Singer L, German DM, Damian D (2016) An in-depth study of the promises and perils of mining github. Empir Softw Eng 21(5):2035–2071
Kallis R, Di Sorbo A, Canfora G, Panichella S (2021) Predicting issue types on github. Sci Comput Program 205:102598
Khandkar SH (2009) Open coding. University of Calgary 23:2009
Kodinariya TM, Makwana PR et al (2013) Review on determining number of cluster in k-means clustering. Int J 1(6):90–95
Lakhina A, Crovella M, Diot C (2004) Diagnosing network-wide traffic anomalies. ACM SIGCOMM Comput Commun Rev 34(4):219–230
Lakhina A, Crovella M, Diot C (2005) Mining anomalies using traffic feature distributions. ACM SIGCOMM Comput Commun Rev 35(4):217–228
Lenarduzzi V, Sillitti A, Taibi D (2017) Analyzing forty years of software maintenance models. In: 2017 IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C), IEEE, p 146–148
Lenarduzzi V, Sillitti A, Taibi D (2018) A survey on code analysis tools for software maintenance prediction. In: International Conference in Software Engineering for Defence Applications, Springer, p 165–175
Lenarduzzi V, Saarimaki N, Taibi D (2019) On the diffuseness of code technical debt in java projects of the apache ecosystem. In: 2019 IEEE/ACM International Conference on Technical Debt (TechDebt), IEEE, p 98–107
Li J, Dai L, Tan F, Shen H, Wang Z, Sheng B, Hu P (2022) Cdx-net: Crossdomain multi-feature fusion modeling via deep neural networks for multivariate time series forecasting in aiops. ICASSP 2022–2022 IEEE International Conference on Acoustics. Speech and Signal Processing (ICASSP), IEEE, pp 4073–4077
Li S, Wu Y, Liu Y, Wang D, Wen M, Tao Y, Sui Y, Liu Y (2020a) An exploratory study of bugs in extended reality applications on the web. In: 2020 IEEE 31st International Symposium on Software Reliability Engineering (ISSRE), IEEE, p 172–183
Li Y, Jiang ZM, Li H, Hassan AE, He C, Huang R, Zeng Z, Wang M, Chen P (2020) Predicting node failures in an ultra-large-scale cloud computing platform: an aiops solution. ACM Trans Softw Eng Methodol (TOSEM) 29(2):1–24
Li Y, Zhang X, He S, Chen Z, Kang Y, Liu J, Li L, Dang Y, Gao F, Xu Z et al (2022) An intelligent framework for timely, accurate, and comprehensive cloud incident detection. ACM SIGOPS Oper Syst Rev 56(1):1–7
Lim MH, Lou JG, Zhang H, Fu Q, Teoh ABJ, Lin Q, Ding R, Zhang D (2014) Identifying recurrent and unknown performance issues. In: 2014 IEEE International Conference on Data Mining, IEEE, p 320–329
Lin Q, Hsieh K, Dang Y, Zhang H, Sui K, Xu Y, Lou JG, Li C, Wu Y, Yao R, et al. (2018) Predicting node failure in cloud service systems. In: Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, p 480–490
Liu D, Zhao Y, Xu H, Sun Y, Pei D, Luo J, Jing X, Feng M (2015) Opprentice: Towards practical and automatic anomaly detection through machine learning. In: Proceedings of the 2015 internet measurement conference, p 211–224
Lomio F, Moreschini S, Lenarduzzi V (2021) Fault prediction based on software metrics and SonarQube rules. machine or deep learning? arXiv:2103.11321
Lopes CV, Maj P, Martins P, Saini V, Yang D, Zitny J, Sajnani H, Vitek J (2017) Déjàvu: a map of code duplicates on github. Proceedings of the ACM on Programming Languages 1(OOPSLA):1–28
Lou JG, Lin Q, Ding R, Fu Q, Zhang D, Xie T (2013) Software analytics for incident management of online services: An experience report. In: 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE), IEEE, p 475–485
Lou JG, Lin Q, Ding R, Fu Q, Zhang D, Xie T (2017) Experience report on applying software analytics in incident management of online service. Autom Softw Eng 24(4):905–941
Lovrić M, Milanović M, Stamenković M (2014) Algoritmic methods for segmentation of time series: An overview. J Contemp Econ Bus Issues 1(1):31–53
Luo C, Lou JG, Lin Q, Fu Q, Ding R, Zhang D, Wang Z (2014) Correlating events with time series for incident diagnosis. In: Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining, p 1583–1592
Lyu Y, Rajbahadur GK, Lin D, Chen B, Jiang ZM (2021) Towards a consistent interpretation of aiops models. ACM Trans Softw Eng Methodol (TOSEM) 31(1):1–38
Majidi F, Openja M, Khomh F, Li H (2022) An empirical study on the usage of automated machine learning tools. In: 2022 IEEE International Conference on Software Maintenance and Evolution (ICSME), IEEE, p 59–70
Manes SS, Baysal O (2021) Studying the change histories of stack overflow and github snippets. In: 2021 IEEE/ACM 18th International Conference on Mining Software Repositories (MSR), IEEE, p 283–294
Mann HB, Whitney DR (1947) On a test of whether one of two random variables is stochastically larger than the other. The annals of mathematical statistics p 50–60
McHugh ML (2012) Interrater reliability: the kappa statistic. Biochemia medica 22(3):276–282
Munaiah N, Kroh S, Cabrey C, Nagappan M (2017) Curating github for engineered software projects. Empir Softw Eng 22(6):3219–3253
Nakajima S (2018) Quality assurance of machine learning software. In: 2018 IEEE 7th Global Conference on Consumer Electronics (GCCE), IEEE, p 601–604
Nedelkoski S, Cardoso J, Kao O (2019a) Anomaly detection and classification using distributed tracing and deep learning. In: 2019 19th IEEE/ACM international symposium on cluster, cloud and grid computing (CCGRID), IEEE, p 241–250
Nedelkoski S, Cardoso J, Kao O (2019b) Anomaly detection from system tracing data using multimodal deep learning. In: 2019 IEEE 12th International Conference on Cloud Computing (CLOUD), IEEE, p 179–186
Nikanjam A, Braiek HB, Morovati MM, Khomh F (2021) Automatic fault detection for deep learning programs using graph transformations. ACM Trans Softw Eng Methodol 31(1), https://doi.org/10.1145/3470006
Nikanjam A, Morovati MM, Khomh F, Ben Braiek H (2022) Faults in deep reinforcement learning programs: A taxonomy and a detection approach. Autom Softw Eng 29(1), https://doi.org/10.1007/s10515-021-00313-x
Notaro P, Cardoso J, Gerndt M (2021) A survey of aiops methods for failure management. ACM Trans Intell Syst Technol (TIST) 12(6):1–45
Notaro P, Cardoso J, Gerndt M (2021b) A systematic mapping study in aiops. In: Service-Oriented Computing-ICSOC 2020 Workshops: AIOps, CFTIC, STRAPS, AI-PA, AI-IOTS, and Satellite Events, Dubai, United Arab Emirates, December 14-17, 2020, Proceedings, Springer, p 110–123
Openja M, Morovati MM, An L, Khomh F, Abidi M (2022) Technical debts and faults in open-source quantum software systems: An empirical study. J Syst Softw 193:111458
Poth A, Meyer B, Schlicht P, Riel A (2020) Quality assurance for machine learning-an approach to function and system safeguarding. 2020 IEEE 20th International Conference on Software Quality. Reliability and Security (QRS), IEEE, pp 22–29
Prasad P, Rich C (2018) Market Guide for AIOps Platforms. https://www.gartner.com/en/documents/3892967, Last Accessed: -06-Dec.-2022
Rasool G, Arshad Z (2015) A review of code smell mining techniques. J Softw: Evol Process 27(11):867–895
Rijal L, Colomo-Palacios R, Sánchez-Gordón M (2022) Aiops: A multivocal literature review. Artificial Intelligence for Cloud and Edge Computing p 31–50
Romano J, Kromrey JD, Coraggio J, Skowronek J, Devine L (2006) Exploring methods for evaluating group differences on the nsse and other surveys: Are the t-test and cohensd indices the most appropriate choices. In: annual meeting of the Southern Association for Institutional Research, Citeseer, p 1–51
Rosá A, Chen LY, Binder W (2015) Catching failures of failures at big-data clusters: A two-level neural network approach. In: 2015 IEEE 23rd International Symposium on Quality of Service (IWQoS), IEEE, p 231–236
Saarimaki N, Baldassarre MT, Lenarduzzi V, Romano S (2019) On the accuracy of SonarQube technical debt remediation time. In: 2019 45th Euromicro Conference on Software Engineering and Advanced Applications (SEAA), IEEE, p 317–324
Saha A, Hoi SC (2022) Mining root cause knowledge from cloud service incident investigations for aiops. In: Proceedings of the 44th International Conference on Software Engineering: Software Engineering in Practice, p 197–206
Shapiro SS, Wilk MB (1965) An analysis of variance test for normality (complete samples). Biometrika 52(3/4):591–611
Sharma B, Jayachandran P, Verma A, Das CR (2013) Cloudpd: Problem determination and diagnosis in shared dynamic clouds. In: 2013 43rd Annual EEE/IFIP International Conference on Dependable Systems and Networks (DSN), IEEE, p 1–12
Stol KJ, Ralph P, Fitzgerald B (2016) Grounded theory in software engineering research: a critical review and guidelines. In: Proceedings of the 38th International conference on software engineering, p 120–131
Su Y, Zhao Y, Niu C, Liu R, Sun W, Pei D (2019) Robust anomaly detection for multivariate time series through stochastic recurrent neural network. In: Proceedings of the 25th ACM SIGKDD international conference on knowledge discovery & data mining, p 2828–2837
Subramanian VN, Rehman I, Nagappan M, Kula RG (2020) Analyzing first contributions on github: what do newcomers do. IEEE Software
Svoboda J, Ghafir I, Prenosil V et al (2015) Network monitoring approaches: An overview. Int J Adv Comput Netw Secur 5(2):88–93
Tambon F, Khomh F, Antoniol G (2023) A probabilistic framework for mutation testing in deep neural networks. Inf Softw Technol 155:107129. https://doi.org/10.1016/j.infsof.2022.107129, https://www.sciencedirect.com/science/article/pii/S0950584922002385
Tan J, Lungu M, Avgeriou P (2018) Towards studying the evolution of technical debt in the python projects from the apache software ecosystem. In: BENEVOL, p 43–45
Tu Z, Su Z, Devanbu P (2014) On the localness of software. In: Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, p 269–280
Vadlamani SL, Baysal O (2020) Studying software developer expertise and contributions in stack overflow and github. In: 2020 IEEE International Conference on Software Maintenance and Evolution (ICSME), IEEE, p 312–323
Vassallo C, Panichella S, Palomba F, Proksch S, Gall HC, Zaidman A (2020) How developers engage with static analysis tools in different contexts. Empir Softw Eng 25(2):1419–1457
Wang H, Wu Z, Jiang H, Huang Y, Wang J, Kopru S, Xie T (2021) Groot: An event-graph-based approach for root cause analysis in industrial settings. In: 2021 36th IEEE/ACM International Conference on Automated Software Engineering (ASE), IEEE, p 419–429
Wessel M, De Souza BM, Steinmacher I, Wiese IS, Polato I, Chaves AP, Gerosa MA (2018) The power of bots: Characterizing and understanding bots in oss projects. Proceedings of the ACM on Human-Computer Interaction 2(CSCW):1–19
Wilson SJ (2017) Data representation for time series data mining: time domain approaches. Wiley Interdiscip Rev Comput Stat 9(1):e1392
Wohlin C, Aurum A (2015) Towards a decision-making structure for selecting a research design in empirical software engineering. Empir Softw Eng 20(6):1427–1455
Xu W, Huang L, Fox A, Patterson D, Jordan MI (2009) Detecting largescale system problems by mining console logs. In: Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles, p 117–132
Xue J, Birke R, Chen LY, Smirni E (2016) Managing data center tickets: Prediction and active sizing. In: 2016 46th Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN), IEEE, p 335–346
Xue J, Birke R, Chen LY, Smirni E (2018) Spatial-temporal prediction models for active ticket managing in data centers. IEEE Trans Netw Serv Manag 15(1):39–52
Yao K, Li H, Shang W, Hassan AE (2020) A study of the performance of general compressors on log files. Empir Softw Eng 25:3043–3085
Zhang T, Gao C, Ma L, Lyu M, Kim M (2019) An empirical study of common challenges in developing deep learning applications. In: 2019 IEEE 30th International Symposium on Software Reliability Engineering (ISSRE), IEEE, p 104–115
Zhang Y, Chen Y, Cheung SC, Xiong Y, Zhang L (2018) An empirical study on tensorflow program bugs. In: Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis, p 129–140
Zhang Y, Guan Z, Qian H, Xu L, Liu H, Wen Q, Sun L, Jiang J, Fan L, Ke M (2021) Cloudrca: a root cause analysis framework for cloud computing platforms. In: Proceedings of the 30th ACM International Conference on Information & Knowledge Management, p 4373–4382
Zhao G, Hassan S, Zou Y, Truong D, Corbin T (2021) Predicting performance anomalies in software systems at run-time. ACM Trans Softw Eng Methodol (TOSEM) 30(3):1–33
Author information
Authors and Affiliations
Corresponding author
Ethics declarations
Conflicts of interest
The authors have no conflicts of interest to declare that are relevant to the content of this article.
Additional information
Communicated by: Markus Borg.
Publisher's Note
Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.
Rights and permissions
Springer Nature or its licensor (e.g. a society or other partner) holds exclusive rights to this article under a publishing agreement with the author(s) or other rightsholder(s); author self-archiving of the accepted manuscript version of this article is solely governed by the terms of such publishing agreement and applicable law.
About this article
Cite this article
Aghili, R., Li, H. & Khomh, F. Studying the characteristics of AIOps projects on GitHub. Empir Software Eng 28, 143 (2023). https://doi.org/10.1007/s10664-023-10382-z
Accepted:
Published:
DOI: https://doi.org/10.1007/s10664-023-10382-z