Rethinking Release
Transcription
Rethinking Release
Master of IT – Software Engineering Final Project Rethinking Release – a case study 16th March 2015 Student: Kenn A. Thisted ([email protected]) Supervisor: Dr. Yvonne Dittrich, Associate Professor Contents Abstract.................................................................................................................................................2 1. Introduction......................................................................................................................................3 2. Case background..............................................................................................................................3 2.1 Overview of IT at Topdanmark..................................................................................................4 2.2 Existing tools landscape.............................................................................................................4 2.3 Existing release process.............................................................................................................5 2.4 Recent initiatives........................................................................................................................7 2.4.1 Partial Branches.................................................................................................................7 2.4.2 Branch Automation Server.................................................................................................8 2.4.3 Build automation................................................................................................................9 3. Related work.....................................................................................................................................9 3.1 Continuous software engineering..............................................................................................9 3.1.1 Continuous Integration.....................................................................................................10 3.1.2 Continuous Delivery and Continuous Deployment.........................................................10 3.1.3 Maturity models...............................................................................................................11 3.2 Deployment pipeline................................................................................................................13 3.3 DevOps....................................................................................................................................14 3.4 Summary of related work........................................................................................................15 4. Method............................................................................................................................................16 4.1 Research approach...................................................................................................................16 4.2 Fieldwork and analysis methods..............................................................................................17 4.3 Reflection on the research process and fieldwork...................................................................18 4.4 Trustworthiness........................................................................................................................19 5. Case description..............................................................................................................................19 5.1 Case selection..........................................................................................................................20 5.2 Course of events.......................................................................................................................21 6. Analysis..........................................................................................................................................23 6.1 Tool design...............................................................................................................................24 6.1.1 Extension to user interface...............................................................................................25 6.1.2 Limitations.......................................................................................................................25 6.1.3 The extent of the change..................................................................................................26 6.2 Application impact...................................................................................................................28 6.3 Process impact.........................................................................................................................29 6.4 Learnings for the organisation.................................................................................................29 7. Discussion.......................................................................................................................................30 8. Conclusion......................................................................................................................................32 References..........................................................................................................................................34 Abstract Context: For a number of years software in Topdanmark has been released on a monthly basis, and a demand for more frequent releases is becoming a key issue. The existing process, tools and recent initiatives to renew the infrastructure serve as stepping stones for rethinking the release process and tools. The subject of the study is a targeted collaborative effort between an infrastructure tools team and a development team to design and implement a concept and solution to this problem within certain time and scope constraints. Thus a continuous delivery proof-of-concept was conducted over a period of 3 months between October 2014 and January 2015. Objective: Answering the problem if and how a higher frequency of software releases could be achieved. Method: A qualitative case study was designed and conducted to observe and reflect on the course of events and result of the proof-of-concept effort. Result: Fieldwork examples are included in the case description, and supported by design sketches and implementation examples the analysis shows the result as effects on tool design, application impact, process impact, and learnings. The main focus is on the small scale of the resulting design and implementation, but also important are the effects on the application architecture and the immediate improvement on the process of the development team. Discussion topics include the value of the collaborative effort, the small design and automation effort needed compared to initial expectations, the dilemma of having to leave some software behind, and requirements to application architecture in order to take advantage of the concept as implemented in the proof-of-concept. Conclusion: The study concludes by confirming how we were actually able to design and implement a continuous delivery solution, and even though it supports only a narrow subset of applications, it provides a starting point for the organization to gain experiences with releasing software more frequently. Master i Software Engineering (Professional Master of IT) Final Project: Rethinking Release – a case study 16th March 2015 Student: Kenn A. Thisted ([email protected]) Supervisor: Dr. Yvonne Dittrich, Associate Professor Rethinking Release – a case study Kenn A. Thisted, 2015 2 1. Introduction For a number of years software in Topdanmark*) has been released on a monthly basis. Excluding a release every summer and winter this allows for about 10 planned ordinary releases a year. Each release involves a comprehensive process of testing, build, release management, and deployment. A demand for more frequent releases is materialising both from developers and from product owners representing business needs. This is becoming a key issue in the near future which lead me to want to investigate: • Can we achieve a significantly higher frequency of software releases at Topdanmark without compromising quality? In order to support this main problem the study should also investigate the efforts towards achieving this goal. In the autumn of 2014, responding to the recognized business needs of increased frequency and flexibility in releasing software, Topdanmark IT decided to conduct a continuous delivery proof-of-concept (PoC) in a collaborate effort between a tools team and a development team. The effort was titled "HypR PoC" abbreviating the Danish term for increased release frequency: Hyppigere Releases. This report is a design case study documenting and analysing this collaborative effort and the resulting product and impact. In the report I will strive for referring to the subject of the study as the proof-of-concept (PoC) while the study itself is referred to as the project. 2. Case background This chapter establishes background information about the current organisation, processes and tools relevant to the following analysis of this case. *) Topdanmark is the second-largest insurance company in Denmark. Rethinking Release – a case study Kenn A. Thisted, 2015 3 2.1 Overview of IT at Topdanmark Topdanmark is an insurance company operating in Denmark. Spanning both property & casualty as well as life insurance the company has approximately 2,700 employees. Topdanmark has it's own IT department covering both development and operations. The IT department consists of about 400 employees of which roughly 200 work in development. Software development in Topdanmark IT is mainly organised in five departments each supporting separate lines of business (see figure 2.1). Bridging these are IT Operations which is responsible for executing, monitoring, and supporting running IT systems. In addition Architecture & Methods (A&M) provides common architectural and infrastructure components shared across other departments. Figure 2.1: IT departments supporting lines of business In A&M the Agile Development & Testing team is responsible for the processes, tools, and infrastructure supporting software development in Topdanmark. 2.2 Existing tools landscape This section briefly introduces the primary tools and technologies used at Topdanmark relevant to this case study. The effort in this PoC focuses on applications written in Java and running on Microsoft Windows. Java is coded using primarily Eclipse IDE, but others are allowed, and run on IBM WebSphere Application Servers (WAS). The shared database is IBM DB2 on the mainframe. Database schemas are created and maintained using CA ERwin Data Modelling. Rethinking Release – a case study Kenn A. Thisted, 2015 4 The main code repository is Serena Dimensions CM, and support for build and release processes are built with and around this tool. Deployment and environment provisioning is a proprietary solution (written mostly in PowerShell) based on BMC BladeLogic Server Automation. Dimensions is a Centralized Version Control System (CVCS) in which all source code artefacts are stored. The existing build and deployment pipeline triggered from this is a custom built workflow with a web client user interface. The example below (figure 2.2) shows how build targets can be selected and subsequently deployed to the desired environment. Other custom tools include a build & dependency fetcher plugin for Eclipse. Figure 2.2: Custom 'Build and Deploy' web interface Additional tools and technologies are used for mainframe applications, building the public web site, as well as a variety of supporting functions, but these are excluded from the current study. 2.3 Existing release process The current release process in Topdanmark has been in operation for a number of years. Inspired by Unified Process [Jacobsen et al. 1999] the TopUP (Topdanmark Unified Process) process was introduced to coordinate releases from several systems in and across departments, streamlining them into unified release trains running approximately once a month (see figure 2.3). Rethinking Release – a case study Kenn A. Thisted, 2015 5 Figure 2.3: The monthly TopUP process release train The internal introduction material to TopUP states these as primary objectives for the process: documenting development initiatives, audit requirements for code in production, and at any given moment knowing who did what to which code, and why. The process aims to be quite open and delegate responsibility to the developer in stating two rules only: You may not deliver code that breaks other peoples code, and in order to submit code you must state the reason why. Figure 2.4: The existing branching model In the current process code is produced at the developer's workstation and checked into a branch in Dimensions. During development and testing code is built from a branch and deployed on one of an array of Distributed Source Control Management (DSCM) environments/servers. Following successful testing (automated and/or manual) code is pushed to Main branch. From there it is subsequently being built again and tested in collaboration with code from other branches in what are called Integration and Release tests, and upon verification allowed onto the Production environments (see figure 2.4). For the scope of this report Rethinking Release – a case study Kenn A. Thisted, 2015 6 it is not necessary to understand the branching strategy that the model represents in detail. It is sufficient to recognize that there is some degree of complexity involved in handling multiple branches and understand the flow of code that the direction of the arrows indicate. DSCM environments are virtual servers, whereas Release, and Production are "physical" environments in that they have dedicated servers. The physical environments are duplicated, and for every release code is deployed on a non-production set. Pending verification production is simply switched to the new set. 2.4 Recent initiatives Like most places the set of tools and technologies evolves over time – sometimes defensively to not run out of support, but more interesting in this case also offensively to benefit from new features. The general level of tools is kept reasonably updated, but of special interest to the release process a couple of recent initiatives are significant. 2.4.1 Partial Branches When TopUp was introduced all branches were fully populated (see branching model in figure 2.4 above) i.e. they each contained the full set of items. In order to reduce time spent working with each branch (e.g. rebase and deliver in figure 2.3), as well as reducing storage space needed, the concept of partial branches was introduced and implemented in March 2013. This allows and encourages development teams to only keep the necessary items – items that are actually being worked on – in their own branch. Initially the concept was introduced for the server platform (Java and PHP code) where it maps well with project directory structures. Starting October 2014 the concept was expanded to include the mainframe platform (COBOL and PL/I code) based on a custom filtering by member (file) type and name. The prevalence of the partial branches concept is communicated by publishing “Dimensions Partial Population Statistics” comprised of a graph showing the average branch population for the latest 3 months (see figure 2.5) supplemented by a list of population percentages for each branch. The list is omitted here since I trust that the graph itself is sufficient to illustrate the concept. Rethinking Release – a case study Kenn A. Thisted, 2015 7 Figure 2.5: Branch population average (3 months) The black line indicates the average population percentage across all branches (number of branches stated for each date). The green line indicates the target potential based on items actually having been touched within the latest year. 2.4.2 Branch Automation Server A couple of years ago the concept of a Branch Automation Server (BAS) was introduced. This is a Continuous Integration (CI) platform (see related work section 3.1.1), based on a set of common tools like Jenkins (as the CI server) and SonarQube (for static code analysis), which allows the tools team to offer this as standardized server instances to development teams. Using this common BAS concept development teams can take advantage of a shared effort and avoid having to set up this infrastructure themselves. As the name implies a BAS can be issued to each branch serving as an engine automatically running the team's unit tests (e.g. in JUnit), acceptance tests (e.g. Robot Framework), or other kinds of automatable testing technologies. In addition the BAS offers static code analysis initially supporting Java code, while support for PHP code is planned for early 2015. The purpose of this concept is to improve software quality by running tests and static analysis every time code is checked into the branch. One important aim of CI is to prevent integration problems occurring when merging developer copies of code. Performing this integration frequently using automation keeps the effort and scope of problems small compared to more infrequent manual integrations that was commonplace before. Rethinking Release – a case study Kenn A. Thisted, 2015 8 2.4.3 Build automation The existing build process in TopUp consists of custom built tools around and integrating to Dimensions. Since October 2014 this proprietary build infrastructure is supplemented by a parallel build process based on Apache Maven (build automation server). Reasons for this include tool modernization and standardization. By adopting a widely used modern build tool it is possible to take advantage of industry or community support and mitigate the risk of critical knowledge being held by only a few key persons. The goal is to have all builds transferred to Maven before end of June 2015 allowing the existing proprietary build tool to be decommissioned. 3. Related work This chapter will present selected research articles, books and book chapters, as well as other sources relevant to continuous software engineering. Although terms and definitions presented have evolved from earlier software engineering disciplines not much research exists on these contemporary conceptions. Because of this most work presented is state of the art as in it represents the latest developments on the subject. 3.1 Continuous software engineering In software engineering the term "continuous" is used in various contexts. One example of its use in process related contexts like lean and agile is continuous improvement which deals with the iterative effort of incrementally improving practices. For the purpose of this report it is relevant however to introduce the more technical practices of continuous integration, continuous delivery, and continuous deployment. A common property for these concepts is automation. They all aim to automate steps of the software development process in order to speed up these steps and consequently be able to get a quicker response of success or failure of each step. This originates from a recognition that manually performing tasks like build, test, and deployment is simply too slow and error prone to effectively achieve sufficiently fast feedback. Hence automating these tasks is essential in supporting the overlying lean an agile processes' goal of being able to efficiently adapt to changes. Rethinking Release – a case study Kenn A. Thisted, 2015 9 Another important effect of automation is quality. Automating tasks like build, test, and deployment allows for a consistent quality of the processes in that potential manual errors performing the tasks are avoided. This way automation helps produce more dependable results. Although automation in itself does not affect the quality of the code, a general perception is that the increased frequency of dependable feedback encourages smaller and more manageable changes which in turn leads to better software. A common rule of these practices is that if anything breaks during these tasks, regaining a stable build immediately becomes first priority. By not allowing an error state to exist for very long this also contributes to the overall software quality. The following sections will elaborate on continuous software engineering by presenting terms that provide different perspectives on the subject including industry best practice and case studies. 3.1.1 Continuous Integration Originating from eXtreme Programming (XP) [Beck 1999] Continuous Integration is a practice in software development where developers in a team integrate their code frequently – usually at least once a day. This process of build, test, and possibly static code analysis is automated yielding the above mentioned benefits of fast feedback allowing for quick response by the team. Continuous integration is widely used supporting agile methods in software engineering. Even though the concept can quite easily be explained like in the often quoted article by Martin Fowler [Fowler 2006] and several aspects were covered in more detail in the basic textbook on the subject [Duvall et al. 2007], it is still very loosely defined, and often both descriptions and implementations vary as elaborated upon in Continuous Integration Flows [Ståhl and Bosch 2014]. For the purpose of this report it is sufficient to recognize that continuous integration is a predecessor to continuous delivery in two ways: the former concept was introduced a few years prior to the latter, and it is also generally perceived as a prerequisite in automated implementations. 3.1.2 Continuous Delivery and Continuous Deployment The concept of Continuous Delivery is inspired by the first of the twelve principles [Beck et al. 2001] behind the Agile Manifesto: "Our highest priority is to satisfy the customer through early and continuous delivery of valuable software." Rethinking Release – a case study Kenn A. Thisted, 2015 10 The subtitle of the basic textbook [Humble and Farley 2011] summarizes the purpose of continuous delivery: Reliable software releases through build, test, and deployment automation. As stated earlier quality, implicitly in reliable, is a key objective, and automation represents the means to achieve this. Like with with continuous integration various interpretations of continuous delivery exist. One important distinction to make is about the extent of automation. When researching or discussing the subject one sometimes encounters some ambiguity in perceptions of Continuous Delivery and the much related term Continuous Deployment. This project and report mirrors the definition that seems to be consistent with key influencers like ThoughtWorks and PuppetLabs and reflected in the recent book Lean Enterprise [Humble et al. 2014]: "Despite the name, continuous delivery is not about deploying to production multiple times a day. The goal of continuous delivery is to make it safe and economic to work in small batches. This in turn leads to shorter lead times, higher quality, and lower costs." The important distinction in this context is that with Continuous Delivery deployment to production is a manual step in the process, while in Continuous Deployment this step is automated. In both cases all other steps are automated. The purpose of both is of course to provide frameworks for speeding up software development, but this difference represents a key distinction in whether changes (assuming passed tests and possible other metrics) are pushed into production automatically or, as preferred in this case, they can be pulled into production upon request. 3.1.3 Maturity models Continuous delivery maturity models visualise actions in progress towards successful implementation as well as allowing organizations and teams to assess their current state, the gap towards their desired target state, and next steps in that direction. The research based "Stairway to Heaven" conceptual model [Olsson et al. 2012; Olsson and Bosch 2014] defines five consecutive ascending steps in the transition of moving from traditional software development towards continuous deployment. From four case studies the model shows evolutionary steps through agile and continuous integration. Especially relevant for this report step four states that " Continuous deployment Rethinking Release – a case study Kenn A. Thisted, 2015 11 implies that you continuously push out changes to the code instead of doing large builds and having planned releases of large chunks of functionality", followed by emphasizing the importance of fast feedback. Although the article talks about highly prioritized frequent delivery of software this is mentioned as an implicit part of step three: continuous integration. Figure 3.1: Olsson & Bosch's "Stairway to Heaven" evolution model An observation to make regarding the book presenting this model [Bosch (Ed.) 2014] is that it contains specific parts addressing steps two, three, and five. Regarding step four, however, it states: "The fourth step in the stairway to heaven, continuous deployment, is not present explicitly in this book as it often evolves automatically as a natural extension of continuous integration". Even though further investigation into this claim in relation to others distinguishing between continuous integration, delivery, and deployment could prove interesting in itself, it is out of scope for this report. For the purpose of this project and report the general steps and evolutionary nature of the model are sufficient, as well as noting that even though not emphasized in this model there is no immediate contradiction between the perceptions of delivery in this model and the definition of continuous delivery in the section above. A more elaborate maturity model was presented a couple of years earlier in the paper “The Agile Maturity Model” [Humble and Russel 2009]. This model specifies important attributes towards continuous delivery, presenting them in a matrix of themed groups (horizontal) and five ascending levels of maturity (vertical). The same model, now with a “Configuration Management” theme appended, was presented a couple of years later as “A Maturity Model for Configuration and Release Management” in the Continuous Delivery text book [Humble and Farley 2011] (see figure 3.2). Rethinking Release – a case study Kenn A. Thisted, 2015 12 Figure 3.2: Maturity model [Humble and Farley 2011, p.419] This matrix concept has been adopted in industry context and similar models have been published as Continuous Delivery Maturity Models in the last few years. Examples of these include an article from InfoQ [Rehn et al. 2013] – a well known knowledge base in software development, and a paper from Praqma consultants [Praqma unknown]. Both models have emerged from the agile community and are vendor independent. The most recent example is a Tech Tip article from IBM urban{code} [Minick 2014] showing that the concept is entering the space of major vendors. These industry spin-offs share the same common properties as the original model. The models are not identical but themed groups shared across all models include important disciplines like building, deploying, testing, and visibility. In addition the InfoQ model includes “Culture & Organization” as a separate theme, which makes very much sense in that these are essential factors in successful implementation of a change towards continuous delivery. IBM's model introduces indicators of the current industry norm level for each theme as well as the desired target level. Both are interesting contributions adding to the original model. 3.2 Deployment pipeline In continuous delivery the deployment pipeline is an automated process that software being developed must pass through on its way from the developer to Release. The pipeline chains processing elements together so that the successful output of one flows into the next. Process elements that fail immediately returns control to the developer, which is key to the early response/fast feedback aspect of continuous delivery. The concept of the deployment pipeline is well described in the Continuous Delivery text book [Humble and Farley 2011] Rethinking Release – a case study Kenn A. Thisted, 2015 13 in which the sequence diagram below (figure 3.3) visualizes how changes move through the pipeline. Figure 3.3: Changes moving through the deployment pipeline [Humble and Farley 2011, p.109] The deployment pipeline is also sometimes referred to as the software delivery pipeline or the build pipeline. In principle the pipeline could serve software changes at irregular intervals or even rare occasions, but in the continual nature resulting from frequent changes it must be seen as an iterative process. In a continuous delivery context it may be obvious to most that this pipeline refers to software development in general. In model-driven development, however, a pipeline usually refers to a series of model transformations set up to efficiently support conformity between multiple uniform software deliveries. To briefly address this ambiguity it should be pointed out that this latter definition is not what is referred to when mentioning the pipeline in this project. 3.3 DevOps DevOps and Continuous Delivery are not the same thing. More often than not one comes across resources (texts, webcasts etc.) or discussions about software engineering in which these terms are used inter changeably. Since these are still emerging concepts, perhaps this is understandable, but in order to clarify the perception of DevOps in this project, I will show some examples from a very recent, as in not yet published, book on the subject [Bass et al. 2014]. The book has five parts: after introducing the subject, part two specifically addresses the Deployment Pipeline (term known from Continuous Delivery above), and then Rethinking Release – a case study Kenn A. Thisted, 2015 14 moves on to elaborate on cross cutting concerns, presents three case studies, and speculates on the future of DevOps. DevOps is a hybrid of process, relation, and a (new) practice. DevOps brings software developers and other IT professionals, in particular in IT operations, closer together. At its most basic DevOps is about seeing operations personnel as first class stakeholders, working in close collaboration on what is involved in releasing software rather than just throwing software “over the wall”. At its most extreme, DevOps practices make developers responsible for running their own applications that is monitoring them, handling errors during deployment and execution, and perhaps even act as first line support. In between are practices that cover team interactions as well as build, testing, and deployment processes. The DevOps lifecycle processes diagram (figure 3.4) shows how development gradually advances towards encompassing processes traditionally handled by other IT professionals including tools specialists and operations. Figure 3.4: DevOps lifecycle processes [Bass et al. 2014, ch.1 p.4] Regarding the deployment pipeline DevOps achieves its goals partially by replacing explicit coordination with implicit coordination e.g. minimizing manual interactions and removing surplus artefacts. The deployment pipeline concept is described much like in the previous section, although emphasizing production as the last step (as with continuous deployment). 3.4 Summary of related work The literature presented in this chapter has helped defining concepts relevant to this case. It explained the key term of continuous delivery both in itself by referencing important definitions and models, and by supporting it with related terms like continuous integration and the delivery pipeline, as well as comparing Rethinking Release – a case study Kenn A. Thisted, 2015 15 it to DevOps which addresses many of the same elements from a different perspective. Presenting this also supported the relevance and understanding of the existing tools and release process including the recent initiatives presented as case background in the previous chapter. 4. Method The research for this project was conducted as a case study. The research approach and fieldwork method is explained in this chapter while the following chapters describe the actual case in more detail and present the findings and result of the project in the analysis. This chapter describes how information was gathered and processed as fieldwork for the case study as well as reflects on the research artefacts produced and the how the process was appropriate for the purpose. 4.1 Research approach The research presented in this report took place as part of a collaborative infrastructure effort involving a tools team and a development team at Topdanmark. The subject of the research was designing and possibly implementing a proof-of-concept for an improved release process. I investigated which design and scope decisions the team made and how they worked towards this target. The fieldwork included audio recordings of team meetings from which observations were noted, and subsequent reflections made. Where relevant, recordings were supplemented with photos of whiteboard notes and drawings from the meetings. My contribution to the project included defining the exterior constraints of the project (like timebox and goal of the effort) in the role of Product Owner, and exploring possible designs together with the team. In my primary role as observer in this study I facilitated the audio recordings, collected them along with other fieldwork items, e.g. design sketches, and subsequently processed these for the study. My intervention in the project focussed on keeping progress towards the goal while mitigating threats to progress and completion. In addition to that I assisted by clarifying questions along the way, especially regarding constraints and whether some design ideas would be acceptable. The research presented is based on qualitative observation only. Qualitative research targets understanding Rethinking Release – a case study Kenn A. Thisted, 2015 16 how people work things out and arrive at solutions rather than measuring their effort based on certain criteria. The research method put to use in this project can be described as Participatory Action Design Research. The action research element [Robson 2002] focuses on exploring the influence of introducing continuous delivery as a change to the existing development process. The design element refers to the main task of devising how the tool should be built to support this, and the participatory aspect refers to the fact that the design arose from a collaborative effort between two teams undertaking the principal roles of users and designers [Simonsen and Robertson 2013]. The typical action research process addresses an experimental approach of a cyclic nature. The aim is to repeatedly understand a situation, deliberating change, implementing selected change, and then observing and reflecting upon the effect as a basis for a subsequent cycle. As a qualitative research method it investigates the how and why of decision making rather than meticulous quantitative measures. Focus is on information produced only in the particular case studied. More general conclusions would merely be informed assertions or propositions. 4.2 Fieldwork and analysis methods The bi-weekly meeting of the planned PoC (see figure 4.1) were audio-recorded from which observations were logged (see template in table 4.1 below). Subsequently reflections were noted by the observer only in a separate session. Figure 4.1: Observations timeline template Prior to recording participants had been informed about this study and assured anonymity in the report. Any material significant to the meetings has been captured and stored. This includes photos of whiteboard notes and drawings, as well as any literature presented. Rethinking Release – a case study Kenn A. Thisted, 2015 17 Time hh:mm Min. Observationer (da) mm:ss Transcription highlights - in Danish, not anonymized Reflections (en) Post-observation reflections - in English Table 4.1 Template for collecting data Following meetings, patterns in observations and reflections emerged by experimenting with grouping them into categories (see table 4.2). Pattern / Categories Obs. # Relevant observations and reflections First observation Second observation Third observation Fourth observation … Cat. A Cat. B Cat. C Cat. D • • • • Table 4.2 Template for exploring observation patterns Instantiation examples illustrating the use of these templates in the fieldwork are given in the case description below (chapter 5). 4.3 Reflection on the research process and fieldwork When evaluating the implementation of the research process what comes to mind is the difference between expectations at the outset and the actual course of the project. As it turned out observations along the expected timeline nicely accommodated the expansion in time as well as the supplemental meetings. As such the form and observations in the field work did not suffer from having to adapt to the reality of the HypR PoC.. During the course of the project it was observable that key elements of the technical design were established quite early and refined rather than redefined when revisited. On a couple of occasions what took focus was challenges with progressing the project itself due to either problems with the subject application in relation to the PoC scope or with resources being prioritized to other tasks than the PoC. Delays as a result of the Rethinking Release – a case study Kenn A. Thisted, 2015 18 latter also meant that the PoC scope and design had to be recalled a couple of times during the project, which did of course not create much additional value to observations. 4.4 Trustworthiness In assessing the trustworthiness of how this case study was conducted and the results it yielded I must of course consider the impact of my own involvement. In a strict study context my presence as an observer, especially due to meetings being recorded, was noticed by the team a few times, appx. once every meeting. This was noted, however, merely in context of participants restricting language expressions or refraining from explicitly naming a certain person. Also my research perspective while participating will have affected my observations. I was more observant to details than I would be under normal circumstances, and at two or three occasions during the study I specifically asked the team to elaborate on an element of the discussion in order to clarify it for study purposes. There can be no doubt that having the role of Product Owner in an agile context, and even a manager in Topdanmark context, my presence in the collaborative effort cannot be completely neutral. It is my belief, however, that besides explicitly having mitigated challenges with the subject application, and by perseverance kept on encouraging the team when they doubted the value of continuing, my impact on the actual rethinking, defining and implementing the new release process itself did not significantly influence the result besides having formally accepted the solution as valid. Throughout the observations I find evidence that the ideas and decisions that went into the solution were coined and made by the collaborative team itself. 5. Case description This chapter describes the collaborative effort of rethinking release, and designing and implementing a solution. A brief overview of the HypR PoC course of events is be presented supported by example artefacts from the fieldwork. Referring to the text book maturity model (figure 3.2) the PoC addresses two main areas. Regarding build and integration it targets bringing the level of practice from Level 0 – Repeatable through Level 1 – Consistent to Level 2 – Managed in which builds are kept stable and gathered metrics visible. The current target level for Rethinking Release – a case study Kenn A. Thisted, 2015 19 testing would be Level 1 – Consistent in which (sufficient) automated tests are part of the development process. By far most of the work to achieve this level lies within development itself to produce the actual volume and quality of tests to be automated. 5.1 Case selection In A&M the Agile Development & Testing team is responsible for the processes, tools, and infrastructure supporting software development in Topdanmark. As illustrated below (figure 5.1), the HypR PoC was conducted as a collaborative effort between this team from A&M and a development team in IT Claims. In order to increase the probability of a success collaboration the development team was selected based on interest, skills and having a good candidate application for continuous delivery. For simplicity the Agile Development & Testing team from A&M will be referred to as the tools team in this report. Figure 5.1 HypR PoC collaboration between A&M and IT Claims The research project targeted the process and tools supporting the process of committing source code to version control, building application artefacts, performing tests, and releasing applications into production. This process is essential in bringing applications from all business areas from development to production. The project involved both members of the Agile Development & Testing team (shortened to Tools team in this report) and the development team responsible for the application used as a sample in the project. Members of the Tools team included specialists in development and testing tools as well as software engineering infrastructure such as the CI platform. The development team was headed by the architect responsible for the application and included two developers working with all steps of coding, testing, and supporting the application. The specific application and team in question were selected due to the fact that they were frontrunners in pushing for a more efficient development and release process, and the application was relevant to the case in being relatively small and decoupled. PoC participants are listed in table 5.1. Rethinking Release – a case study Kenn A. Thisted, 2015 20 Alias Team Role Tim Tools CI and build infrastructure Ulrik Tools CI and testing tools Lasse Tools Development and testing tools Dan Development Application responsible Erik Development Developer Viktor Development Developer Anders Architecture Build infrastructure Rasmus Architecture Development tools Table 5.1 – PoC participants (anonymized), their teams and roles All of these participants had been involved in pre-study discussions on various challenges and shortcomings of the current process and tools, and suggestions of improvements pointing towards continuous delivery. During the project, the build infrastructure specialist from the Tools team and the application responsible from the development team were recurring characters while the other participants attended when possible and relevant for their area of expertise. 5.2 Course of events The timeline below (figure 5.2) illustrates the actual design meetings conducted during the PoC and observed for the study in this project. Regular meetings were held throughout the course of events from October through January, but as can be seen the last couple of meetings were at more irregular intervals. This was due to delays resulting from prioritizing other work, but did not in itself impact the result of the PoC. In order to evaluate the effort and result a review was held including a retrospective. Shortly after the redesigned tool was released for the involved development team and potentially others to use. At one point during the study (HypR #1½) the team brought in support from the Architecture team to discuss and verify the proposed solution at that time. One of the architects had a unique knowledge of the current build process and infrastructure since he and the infrastructure specialist from the tools team were the primary designers and implementers of the existing TopUp build and release process about 10 years ago. Rethinking Release – a case study Kenn A. Thisted, 2015 21 Figure 5.2: Project timeline All meetings were recorded and observations noted (in Danish) using the template mentioned in the methods chapter. Subsequently reflections relevant to the case were made (in English). Tables 5.2 shows an (anonymized) fieldwork example from one of the observation sheets. Time Min. 14:30 Observationer (da) Reflections (en) 1:27 Tim [anonymized] præsenterer design idé Temporary solution based on current setup Initiated in Git repository (code projects) Current setup: Git & Dimensions, TopUp Jenkins points to Git and works on the code process (CI) Is PoC interesting: Yes, we have learned/are CD: learning a lot. Dimensions: Main – Release – Prod Baseline code from Git / RM ownership 5:17 Export (like today) onto Feature – Deliver to main. 5:30 14:39 Høvlet ind på en feature (integrationsbranch) deliveret (af PRM) til Main -> Trigger automatisk Delivery 14:40 Udvider Feature med et CD-flag alt. Opfinde en ny type request: "CD" 7:22 14:41 Kører pipelinen igennem [Jenkins] 14:41 Integration Git-Dimensions er ikke særlig god – gør vi ikke noget ved her. 8:22 14:42 Vi bygger source, vi versionerer ikke artefakter 8:58 14:42 CD og TopUp fungerer ikke godt sammen. Det er TopUp, der er problemet ift. at implementere CD effektivt 09:34 14:43 Realistisk inden jul: Whitelist over moduler/projekter, som er CD-godkendt 9:50 14:44 Fx TopDoc eller PHP 10:49 14:44 Er der nogle filer udenfor whitelist Feature ["CD"] Delivered to Main automatically triggers Continuous Delivery. - Equivalent to sign-off (Ready for production) Main === Release (Automatic) - pending manual Deploy Versioning: Source vs. Artefacts => CD vs. TopUp will not work together Problem: TopUp process, not Dimensions tool - Dimensions as a tool (also) caused problems Whitelist: CD approved applications - Tree of depencencies... Example: No COBOL Table 5.2: Observations and Reflections example Rethinking Release – a case study Kenn A. Thisted, 2015 22 Following meetings observations and reflections relevant to the case were then grouped with other obser vations on the same subject. From grouping a pattern of four distinct groups emerged, and were identified by their main subjects: software engineering tools, target application architecture and considerations, development team process, and additional learnings for possible future consideration. An excerpt of this grouping and patten exploration is shown in table 5.3. Pattern / Categories Obs. #1 Relevant observations and reflections Tools Term: Continuous Delivery (CD) Application candidates: TopDoc + Letters integ. Collaboration impact at development team Term: Release Pipeline Add tools to existing setup (time constraint) As far as we can with as little as possible Release when we want, independent of others Building release candidates rather than in prod. Identification of "Main" as basis for CD Regulation: Separation of concerns Release control from RM to PO Team control and responsibility Importance of "continuous" principle Value stream of pipeline Use existing DSCM environments Different infrastructure for future development Base PoC on Dimensions (Git or eq. later) Requires available release environment Team: code, Maven scripts, func.+unit tests App. • Process Learnings • • • • • • • • • • • • • • • • • • • • • • Table 5.3: Pattern exploration example 6. Analysis When analysing the observations, as described above, four main themes became visible (see table 5.3): a) Considerations and decisions regarding tool design i.e. redesign to add functionality to the existing tools in order to accommodate the purpose (=> Tools). b) Impact on the application being developed in order to be able to take advantage of the redesigned tool (=> Application). Rethinking Release – a case study Kenn A. Thisted, 2015 23 c) Realizations and predictions regarding the impact on the development process including the opportunity for improved agile collaboration between the development team and their product owner (=> Process). d) Learnings for the organization both in general and regarding a potential future continuous delivery solution (=> Learnings). This chapter presents the tool design and implementation that manifests this PoC's very strict, limited by circumstances, solution to rethinking release. It will show what it takes, or how little you can “get away with” and still create a valuable contribution towards continuous delivery. 6.1 Tool design Due to the time constraint of the PoC the team realized and decided that the design and implementation of a continuous delivery approach in this context should be based on expanding existing infrastructure rather than introducing new technology to add to or replace current components. For example they explicitly decided that introducing Git to replace Dimensions would be out of scope. Figure 6.1 shows the original design sketch. Figure 6.1: HypR PoC design sketch Rethinking Release – a case study Kenn A. Thisted, 2015 24 The team discussed different options and decided to concentrate the effort on when developed and tested code is promoted to Main, automating the way through integration and release. From various perceptions of "continuous delivery", guided by introductory sources on the subject [Phillips et al. 2014; Wooton et al. 2013], the process would end at potentially shippable software in a Release state ready to be pulled into production by release management upon request from the product owner. 6.1.1 Extension to user interface The design of the solution was based on introducing a continuous delivery “check mark” to the existing Feature in Dimensions. For the development team this means that they will identify the application as CDready (once) and then have the option of supplying the name of a dedicated Jenkins Job in a field, added as an attribute to the Feature Request in this PoC (see figure 6.2), in order to take advantage of continuous delivery. Figure 6.2: "CD Jenkins Job" attribute added to Feature Request 6.1.2 Limitations The PoC only supports a narrow subset of possible changes to the code base. Changes supported have to be code only (no database changes) and atomic to the application as in dependencies are not allowed (fig. 6.3). A detailed description of the solution, including a diagram providing an architecture perspective, was published on the Topdanmark intranet. The translation of this detailed description (originally in Danish) explains the solution at a technical level that targets existing and new users of the tool now supporting this new continuous delivery option of the software development process (see figure 6.3 below). Rethinking Release – a case study Kenn A. Thisted, 2015 25 Continuous Delivery in Dimensions - detailed description A field 'CD Jenkins Job' has been added to the Feature Request in Dimensions. On the Main BAS a specific CD job is created. Entering the name of this job into the field triggers the CD process. The job name cannot be one previously linked to automatic creation based on POM files being delivered to Main. Also this job cannot have upstream nor downstream dependencies. When a Feature containing the right job name is delivered to Main in Dimensions, this triggers the Jenkins job to be run on Main. This specially designed job must have the notification plugin enabled with a post build notification via REST to the CD Dimensions Bridge. The Bridge will then evaluate the result of the job, and if it is successful deliver the original Feature directly to the Release branch in Dimensions. On the Release branch the 'ususal' Jenkins jobs will run and build code of the Feature once more. When this build is completed successfully, a release candidate is ready. Limitations: • Only the Tools team can configure jobs on the Main BAS Server (Creating the special job must only be done the first time) • Only one CD job at a time can run on Main • Application changes using this CD concept: - must be built and delivered using Maven via BAS servers - cannot contain database changes - cannot have build dependencies to other applications (service dependencies are allowed) - other applications cannot have build dependencies to this application Figure 6.3: HypR PoC architecture and detailed description 6.1.3 The extent of the change The existing Dimensions tools code base consists of about 10,000 lines of code. Implementing this solution changed only about 70 lines of code. In addition to that the added CD Bridge (figure 6.3) consists of about 200 lines of code. Rethinking Release – a case study Kenn A. Thisted, 2015 26 // Then deliver items deliverItems(items , fromBranch , toBranch , deliverReport) ; //Launch any Continuous Integration jobs handleContinuousDelivery(toBranch , requests) ; // Finally deliver request(s) if ( mode .equals(DeliverModeEnum. DELIVER_MODE )) { for (RequestWrapper request : requests) { DLog. info ( "Completing " + request.getName()) ; doDeliverMode(request , fromBranch , toBranch , deliverReport) ; } } /** * This method handles any Continuous Delivery requests * * @param toBranch the branch to be delivered to * @param requests the delivered requests */ private void handleContinuousDelivery (Branch toBranch , List<RequestWrapper> requests) { if ( toBranch.isMain() ) { String jobName = getJobName(requests) ; if ( jobName != null && ! "" .equals(jobName.trim()) ) { String url = "http://" + objectFactory. getBaseDatabase().toLowerCase() + "main/jenkins/job/" + jobName + "/build" ; HttpClient httpClient = new DefaultHttpClient() ; HttpPost httpPost = new HttpPost(url) ; try { HttpResponse response = httpClient.execute(httpPost) ; if (response.getStatusLine().getStatusCode() == 200 || response.getStatusLine().getStatusCode() == 201 ) { DLog. info ( "Jenkins Continuous Delivery job started. StatusCode=" +response.getStatusLine().getStatusCode()) ; } else { DLog. info ( "Jenkins Continuous Delivery job could NOT be started. StatusCode=" +response.getStatusLine().getStatusCode()+ " - Feature is now part of the normal release..." ) ; removeJobName(requests) ; } } catch (IOException e) { DLog. error ( "Jenkins Continuous Delivery job could not be started. IO Message: " +e.getMessage()) ; removeJobName(requests) ; } } } } Figure 6.4: Code example with added handleContinuousDelivery method. Rethinking Release – a case study Kenn A. Thisted, 2015 27 The above example (figure 6.4) shows (in bold) the small extent of the code change needed to implement the continuous delivery design. Basically one handleContinuousDelivery method is added handling the request for continuous delivery by verifying that this happens on the Main branch, and that a valid jobName is supplied. Basically this along with the CD Bridge forms the implementation. 6.2 Application impact The application presented by the development team in this PoC had to undergo a couple of changes during the project. Quite early in the PoC the team faced a requirement involving a database schema update, and since this is not supported by this continuous delivery solution, that requirement was threatening the completion of the project within the time frame. Given priority, however, a clever workaround was devised, that allowed the project to continue without much interruption. The database schema update was split in two, such that additions to the schema were implemented separately in an ordinary release before the continuous delivery changes, while deletions from the schema were held back until the PoC was completed. This way we were able to accommodate both real world requirements and the continuous delivery PoC at the same time. Also during the time of the PoC the application under work was split into two separate parts: one front-end part and one back-end part. From an architecture perspective this separates functionality in and near the user interface from handling database persistence. This split would allow the front-end to be released separately from, and at a higher frequency using continuous delivery, than the back-end, which would still have to follow the ordinary release cycles. In addition to these direct application impacts the PoC also change the teams perception of tests. They realised that test coverage for a successful run to be trusted sufficiently to release the application based on that will present a new challenge. This means that the team will have to build and maintain a sufficient set of unit tests, and balancing unit tests with higher level tests e.g. functional tests. Finally during the PoC the team realised that in order to be automated, which is a requirement in continuous delivery, database schema changes will eventually have to be versioned and handled just like code. Also handling test data is expected to be a challenge, which we did not look further into during this project. Rethinking Release – a case study Kenn A. Thisted, 2015 28 6.3 Process impact The impact of the way the development team will work with the new release process also includes changes in their interactions with their product owner and end users. Continuous delivery will allow fro proper agile slicing of small vertical user stories. Due to the monthly releases in TopUp, slicing and prioritizing user stories used to be more targeted towards composing a batch of user stories that would fit the monthly capacity. The team explicitly mentioned the impact that the opportunity of continuous delivery will have on the dialogue with their product owner in being able to prioritize and release smaller, more targeted user stories. This also means that the team will be able to take advantage of getting user feedback much earlier than before and thus being able to respond to change more efficiently. This is true both after releasing but also as early as when presenting potentially shippable increments in Release. 6.4 Learnings for the organisation Throughout this project learnings were part of observations and reflections made as fieldwork. In addition a final retrospective was held to facilitate a shared team reflection and evaluation continuing the participatory aspect. Significant learnings for the combined team and the IT departments in general are listed here. • Despite the restriction in time and technology we were actually able to design and implement a very narrow continuous delivery solution confirming that we could in fact achieve the goal of a significantly higher frequency for software releases in Topdanmark. For now it is restricted to a very small subset of applications, but is expected to serve as a basis for further development and initiating experiences with working this way. • To expand this effort and create a consistent solution including other applications, we must involve IT operations in order to ensure sufficient capabilities from Release into Production. • The technologies used to implement this PoC will not be sufficient to implement continuous delivery for general use in Topdanmark. Since moving all existing applications to continuous delivery is not realistic this implies the need to build a new process separate from TopUP implementing more Rethinking Release – a case study Kenn A. Thisted, 2015 29 appropriate tools like distributed version control (e.g. Git) and versioning of binary artefacts to support application dependencies across multiple versions “at the same time”. • There was general agreement that in implementing this as a collaborate effort together with one primary target team brings essential focus to the task at hand. We were simply able to better scope the effort, and descope unnecessary features, and customize the design and implementation according to the needs required to support the specific application supplied by the team. Taking the next and possible future applications into consideration was easy to avoid working like this. • As stated by one of the developers even the solution implemented in this PoC is already impacting the way the development team works with development and user stories in collaboration with the product owner representing their line of business. In summary the final design and implementation proved to be significantly simpler than expected at the outset. Realizing that the technological implementation needed to achieve this within the short time span would not be able to support a future general solution, motivation was challenged, but in the end the common perception is that we gained important learnings for our next step, while already being able to take advantage of and gain experience with more frequent releases with select applications. In addition we gained experience in how to address implementing continuous delivery. We learned that close collaboration is a key aspect and helps target a successful effort. Another important element was that the development team from the outset had substantial understanding and knowledge about the concepts involved in continuous integration and delivery (see related work above). This is recognized as being a prerequisite for an efficient and even successful adoption of the concept. 7. Discussion Regarding software engineering a sound understanding of the aspects of continuous integration and continuous delivery is key to introducing these subjects into an organization let alone implement solutions based on them. One will have to navigate ambiguous definitions across different sources of information but should anyway be able to extract the essence of the intentions behind the concepts. Basic sources of information are important for basic information, but once one begins digging deeper into Rethinking Release – a case study Kenn A. Thisted, 2015 30 the landscape of continuous engineering, great value of understanding various aspects, assessing the organizational level, and identifying valuable activities are to be found using maturity models. Collaboration is valuable When reading about and discussing continuous software engineering often focus is on the technical aspects and implementations of software development and release processes. This is perhaps understandable since these support the extent of automation that is essential for the success building and maintaining infrastructure supporting these processes. Another important issue to consider, however, is the value of collaboration. During this project we learned that joining forces in a collaborative team helped us focus the scope of the effort and establish the right level of ambition for the solution. In retrospect though, we could have been more efficient. Due to other priorities with both teams we did not manage to obtain quite the close level of collaboration that had been envisioned at the outset. We have no doubt in the value of collaboration, and I believe that having been able to “enforce” this even more, perhaps even by co-locating the teams, would have increased efficiency in implementing and verifying the solution. It takes less than you think In the beginning of the HypR PoC most participants saw a considerable challenge in implementing what was then perceived as sufficient infrastructure technology to support continuous delivery. Based on initial perceptions of the range of technologies often discussed when addressing the subject, at least a few of the team members did not find it realistic to produce a solution within the time frame given. In innovation, however, restrictions often promote creative ideas, and thus the team managed to focus design and implementation of the solution on a simple idea involving only the addition of one small component (the CD Bridge) and very small changes to the existing infrastructure (additions to the code). This way the solution is somehow in contrast with the general perception of continuous delivery infrastructure. Small and smart automation The landscape of tools supporting continuous software engineering consists of both piecing together industry standard open source components and emerging large commercial frameworks from new and existing vendors. One advice to take away from this PoC, however, is that based on your existing infrastructure it is definitely worth considering to start introducing continuous integration and delivery as concepts by expanding your existing process support with small and smart automation supplements rather Rethinking Release – a case study Kenn A. Thisted, 2015 31 than thinking that a complete solution must initially be built from scratch. Prepare to leave behind That said if you are not a greenfield operation, but rather have a considerable amount of legacy software, you must realise that not all software fits easily into the concepts of continuous software engineering. In order to take advantage of continuous software engineering where it makes immediate sense and supports business needs for frequent releases and fast feedback one should not hesitate implementing solutions supporting these needs. For mature organizations this would generally mean that much software would still need to be developed and released as usual and as such be left behind. Subsequently one could consider if and how to move or evolve this software to fit into the continuous concepts. Architecture impact Software architecture must be considered in relation to continuous software engineering. A loosely coupled component-based architecture fits better into continuous delivery than a monolithic architecture where the whole application must be released as one. The target application in this PoC represents two examples of how to create a fit for continuous delivery. For one the application is actually an extension of a large existing system, but it is developed as a separate component. And the split between user interface and persistence layer that was mentioned earlier further supports being able to take advantage of continuous delivery. 8. Conclusion Rather than letting us be overwhelmed by the broad spectrum of continuous software engineering efforts described in literature and maturity models, a targeted effort that makes a difference goes far and can provide great value on its own. One thing is the technical solution of automating continuous delivery, but also important is the organizational learnings and acknowledgement that arise from beginning to embrace this improved way of working. Combining the tools and process aspects of continuous delivery is what truly supports agile software development. As show in this case study it is possible with small means to achieve a significantly higher release frequency, and I can only encourage anyone to explore the options. Already having experiences with agile development, continuous integration, and deployment pipelines are important shortcuts along with a strong Rethinking Release – a case study Kenn A. Thisted, 2015 32 mindset of striving to automate the processes involved. Quality is an attribute inherent in choosing continuous delivery as an approach building on the foundations of agile development methods and continuous integration. All things equal this neither improves nor decreases the quality of software produced this way but rather maintains the same level of quality as before. The importance of a desired sufficient level of quality as a prerequisite for releasing software more often is significant though. If not one will just repeat bad practices more frequently and produce bad software faster. But all things are not equal, and I believe that the active decisions having to be made regarding software when considering continuous delivery will in itself create attention to improving software quality. The case study also demonstrated how a continuous delivery solution could be designed and implemented. The solution builds on existing infrastructure and initiatives and emphasizes starting with experimenting with small and smart additions to the existing tools rather than from the outset expecting to implement a full-fledged framework from scratch. Conducting this tightly scoped PoC required creative thinking and we managed to design and implement a solution that was significantly different from our initial perceptions of what would be needed. Future Research This case study has inspired a small series of interesting candidates for future research: • Employing the experience of small-scale implementations of continuous delivery in additional case studies in order to confirm or compare the results. • Studying the effect (process, architecture) of introducing continuous delivery in development teams. • Further digging into the different perceptions and definitions of, as well as relations between, the various continuous * concepts and technologies in continuous software engineering. • Elaborating on the evolution of different continuous delivery maturity models, the relation between them, or their effect when systematically applied to industry contexts. • Relating the experiences of this study to the need of supporting multiple development and release cycles or rythms in the field of software ecosystems [Dittrich 2014] and/or the recent concept of bimodal IT [Colella et al. 2014; Gartner 2014]. Rethinking Release – a case study Kenn A. Thisted, 2015 33 References [Bass et al. 2014] Len Bass, Ingo Weber, Liming Zhu. 2015. DevOps - A Software Architect's Perspective. Draft chapters retrieved from SlideShare.net July-September 2014 via Australia's Information Communications Technology Research Centre of Excellence (NICTA). http://www.ssrg.nicta.com.au/projects/devops_book/ [Beck 1999] Kent Beck. 1999. Embracing change with extreme programming. Computer 32, 10 (October 1999), 70-77 [Beck et al. 2001] Beck et al. 2001. Principles behind the Agile Manifesto. Retrieved 2nd March 2015 from http://agilemanifesto.org/principles.html [Bosch (Ed.) 2014] Jan Bosch (Ed.). 2014. Continuous Software Engineering. Springer International Publishing Switzerland. [Bratteteig et al. 2013] Bratteteig et al. 2013. Methods: organising principles and general guidelines for Participatory Design projects. In Rutledge International Handbook of Participatory Design. Ruthledge, New York, NY. [Colella et al. 2014] Heather Colella, Tina Nunno, Andy Rowsell-Jones, Mary Mesaglio. 2014. Three Steps to Successfully Implementing Bimodal-Aware IT Governance. Gartner, Inc. Retrieved 2nd March 2015 from http://www.gartner.com/document/2901217 [Dittrich 2014] Yvonne Dittrich. 2014. Software engineering beyond the project – Sustaining software ecosystems. Information and Software Technology 56, 11 (November 2014), 1436-1456. [Fowler 2006] Martin Fowler. 2006. Continuous Integration. Retrieved 2nd March 2015 from http://www.martinfowler.com/articles/continuousIntegration.html [Fowler 2013] Martin Fowler. 2013. Continuous Delivery. Retrieved 2nd March 2015 from http://martinfowler.com/bliki/ContinuousDelivery.html Rethinking Release – a case study Kenn A. Thisted, 2015 34 [Gartner 2014] Gartner Symposium. 2014. Evaluate Rate of Change, Required Governance and Acceptable Risk. Presented at the Gartner Symposium, 9-13 November 2014, Barcelona, Spain [Humble and Farley Jez Humble and David Farley. 2011. Continuous Delivery: reliable software releases 2011] through build, test, and deployment automation. Addison-Wesley/Pearson Education, Boston, MA. [Humble and Russel Jez Humble and Rolf Russel. 2009. The Agile Maturity Model – Applied to Building and 2009] Releasing Software. ThoughtWorks Inc., San Francisco, CA. [Humble et al. 2014] Jez Humble, Joanne Molesky, and Barry O'Reilly. 2014. Adopt Lean Engineering Practices. In Lean Enterprise – How High Performance Organizations Innovate at Scale. O'Reilly Media, Sebastopol, CA. [Jacobsen et al. 1999] Ivar Jacobsen, Grady Booch, and James Rumbaugh. 1999. The Unified Software Development Process. Addison-Wesley, Reading, MA. [Minick 2014] Eric Minick. 2014. Continuous Delivery Maturity Model. IBM urban{code}. Retrieved 2nd March 2015 from https://developer.ibm.com/urbancode/docs/continuous-delivery-maturity-model/ [Olsson et al. 2012] Helena Holmström Olsson, Hiva Alahyari, and Jan Bosch. 2012. Climbing the "Stairway to Heaven" – A Multiple-Case Study Exploring Barriers in the Transition from Agile Development towards Continuous Deployment of Software. 38Th Euromicro Conference on Software Engineering and Advanced Applications (SEAA). Cesme, Izmir, Turkey. [Olsson and Bosch Helena Holmström Olsson and Jan Bosch. 2014. Climbing the "Stairway to heaven": 2014] Evolving From Agile Development to Continuous Deployment of Software. In Continuous Software Engineering. Springer International Publishing Switzerland. Rethinking Release – a case study Kenn A. Thisted, 2015 35 [Phillips et al. 2014] Andrew Phillips, Michiel Sens, Adriaan de Jonge, and Mark van Holsteijn. 2014. An IT Manager's Guide to Continuous Delivery. XebiaLabs, Boston, MA. [Praqma unknown] Unknown. Continuous Delivery Maturity Model. Praqma. Retrieved 2nd March 2015 from http://www.praqma.com/sites/default/files/img/cdmaturity_paper_5_0.pdf [Rehn et al. 2013] Andreas Rehn, Tobias Palmborg, and Patrik Boström. 2013. The Continuous Delivery Maturity Model. InfoQ. Retrieved 2nd March 2015 from http://www.infoq.com/articles/Continuous-Delivery-Maturity-Model [Robson 2002] Colin Robson. 2002. Designs for Particular Purposes: Evaluation, Action and Change. In Real World Research, 2nd Edition. Blackwell Publishing. Oxford, UK. [Simonsen and Jesper Simonsen and Toni Robertson. 2013. Participatory Design: An Introduction. In Robertson 2013] Rutledge International Handbook of Participatory Design. Ruthledge, New York, NY. [Ståhl and Bosch 2014] Daniel Ståhl and Jan Bosch. 2014. Continuous Integration Flows. In Continuous Software Engineering. Springer International Publishing Switzerland. [Wootton et al. 2013] Benjamin Wootton, Mark Prichard, and Andrew Phillips. 2013. Preparing for Continuous Delivery. DZone, Inc., Cary, NC … Rethinking Release – a case study Kenn A. Thisted, 2015 36