  Recently, many software organizations have been adopting Continuous Delivery
and Continuous Deployment (CD) practices to develop and deliver quality
software more frequently and reliably. Whilst an increasing amount of the
literature covers different aspects of CD, little is known about the role of
software architecture in CD and how an application should be (re-) architected
to enable and support CD. We have conducted a mixed-methods empirical study
that collected data through in-depth, semi-structured interviews with 21
industrial practitioners from 19 organizations, and a survey of 91 professional
software practitioners. Based on a systematic and rigorous analysis of the
gathered qualitative and quantitative data, we present a conceptual framework
to support the process of (re-) architecting for CD. We provide evidence-based
insights about practicing CD within monolithic systems and characterize the
principle of "small and independent deployment units" as an alternative to the
monoliths. Our framework supplements the architecting process in a CD context
through introducing the quality attributes (e.g., resilience) that require more
attention and demonstrating the strategies (e.g., prioritizing operations
concerns) to design operations-friendly architectures. We discuss the key
insights (e.g., monoliths and CD are not intrinsically oxymoronic) gained from
our study and draw implications for research and practice.
