  Unique developmental and operational characteristics of ML components as well
as their inherent uncertainty demand robust engineering principles are used to
ensure their quality. We aim to determine how software systems can be (re-)
architected to enable robust integration of ML components. Towards this goal,
we conducted a mixed-methods empirical study consisting of (i) a systematic
literature review to identify the challenges and their solutions in software
architecture for ML, (ii) semi-structured interviews with practitioners to
qualitatively complement the initial findings and (iii) a survey to
quantitatively validate the challenges and their solutions. We compiled and
validated twenty challenges and solutions for (re-) architecting systems with
ML components. Our results indicate, for example, that traditional software
architecture challenges (e.g., component coupling) also play an important role
when using ML components; along with new ML specific challenges (e.g., the need
for continuous retraining). Moreover, the results indicate that ML heightened
decision drivers, such as privacy, play a marginal role compared to traditional
decision drivers, such as scalability. Using the survey we were able to
establish a link between architectural solutions and software quality
attributes, which enabled us to provide twenty architectural tactics used to
satisfy individual quality requirements of systems with ML components.
Altogether, the results of the study can be interpreted as an empirical
framework that supports the process of (re-) architecting software systems with
ML components.
