Chapter Four

Advances in Using Agile and Lean Processes for Software Development

Pilar Rodríguez; Mika Mäntylä; Markku Oivo; Lucy Ellen Lwakatare; Pertti Seppänen; Pasi Kuvaja    Faculty of Information Technology and Electrical Engineering, University of Oulu, Finland

Abstract

Software development processes have evolved according to market needs. Fast changing conditions that characterize current software markets have favored methods advocating speed and flexibility. Agile and Lean software development are in the forefront of these methods. This chapter presents a unified view of Agile software development, Lean software development, and most recent advances toward rapid releases. First, we introduce the area and explain the reasons why the software development industry begun to move into this direction in the late 1990s. Section 2 characterizes the research trends on Agile software development. This section helps understand the relevance of Agile software development in the research literature. Section 3 provides a walk through the roots of Agile and Lean thinking, as they originally emerged in manufacturing. Section 4 develops into Agile and Lean for software development. Main characteristics and most popular methods and practices of Agile and Lean software development are developed in this section. Section 5 centers on rapid releases, continuous delivery, and continuous deployment, the latest advances in the area to get speed. The concepts of DevOps, as a means to take full (end-to-end) advantage of Agile and Lean, and Lean start-up, as an approach to foster innovation, are the focus of the two following Sections 6 and 7. Finally, Section 8 focuses on two important aspects of Agile and Lean software development: (1) metrics to guide decision making and (2) technical debt as a mechanism to gain business advantage. To wrap up the chapter, we peer into future directions in the area.

Keywords

Software processes; Agile software development; Lean software development; Lean thinking; Leagility; Rapid releases; Continuous delivery; Continuous deployment; DevOps; Lean startup; Metrics; Technical debt

1 Introduction

This chapter will provide you with advanced knowledge on Agile software development, Lean software development, and the latest progress toward Rapid software development. You may wonder why you should care about software processes, and, in particular, about Agile and Lean software development. One may legitimately question the importance of software development processes as many successful software innovations have not been initially held by well-defined software processes. Take, for example, the case of Facebook. Facebook, which emerged as a student's project at Harvard University in 2004, is currently one of the world's most popular social networks [1]. However, as companies grow, business and technical risks also increase, more customers become dependent on the developed products, projects become larger, the development involves more people and aspects such as work coordination become essential [2]. Using the example of Facebook, what was initially composed of a group of students, rapidly became one of the Fortune 500 companies, with a revenue of US$ 27.638 billion in 2016. Today, Facebook has around 18,770 employees and over 1.94 billion monthly active users. Obviously, nowadays, Facebook needs to coordinate its work through a more sophisticated development process, which is, indeed, based on Agile and Lean software development.a

You could also wonder, then, from the wide umbrella of software development processes that are available in the literature, which is the best one I should apply? Why should I care about Agile and Lean? The answer to this question is not straightforward, and it will certainly depend on your company's business context and organizational needs. The traditional phase-gate process, commonly applied in other engineering fields, has been widely used in software development for decades (e.g., Waterfall model [3]). However, nowadays, software has acquired an essential role in our lives, which has completely changed the way in which the software development business is run these days. In a software-driven world, innovation, speed, and ability to adapt to business changes have become critical in most software business domains. If this is your case, you can greatly benefit from Agile and Lean software development processes, like companies such as Facebook, Microsoft, IBM, Google, Adobe, Spotify, Netflix, …, just to mention a few, already did. Next, we briefly describe how software processes have evolved over time to better understand the relevance of Agile software development and, also, the reasons why it caused some initial controversy in the software community.

1.1 Evolution of Software Development Processes

The software engineering literature has stressed the importance of software development processes and their influence on product quality for decades [2,4]. Consequently, efforts for improving software development processes have made different contributions over time. Among the landscape of contributions to software processes, we can find process models such as the Waterfall model [3] or the Spiral model [5], process standards, which are widely used in the industry, such as the ISO/IEC 12207:2008 [6], ISO/IEC 90003:2004(E) [7], model-based improvement frameworks such as CMMI [8], SPICE (ISO/IEC 15504:1998) [9], and Bootstrap [10], and, more recently, adaptive approaches for software development such as Agile and Lean methods [11]. Fig. 1 depicts a timeline with some of these important contributions to software development processes.b It bases on the review of process models conducted by Münch et al. [2].

Fig. 1
Fig. 1 Contributions to software development processes over last 4 decades [1216].

Software development processes have gradually evolved from heavyweight, stage-based processes, which built on the assumption that requirements are relatively stable and split the development process on distinct sequential phases based on those requirements (such as the Waterfall model [3]), to lighter/more flexible processes that try to cope with current business turbulence. As illustrated in Fig. 1, process-centric models, which were considered deterministic and repeatable [18], have given way to flexible approaches, which emphasize continuous evolution of software functionality, flexibility, speed, face-to-face communication, customer involvement, and a minimal number of lightweight artifacts.

1.2 The Emergence of Agile Software Development

The main driver behind the evolution of software processes toward Agile and Lean software development is the environment in which the software development industry works today, which is fundamentally different from the environment in which it used to work 20 years ago. On the one hand, the prevalence of software products has shaped a software-driven society. Software is all around us, from the (electronic) toothbrush that we use in the morning, to the alarm that we set-up before going to sleep. Thus, the business around software products is open to countless opportunities. On the other hand, the Age of Information,c which is strongly based on the Internet, has made digital resources constantly available for everyone. Information flows are accelerated, global communication and networking are faster and individuals can explore their personal needs easier. Overall, software relevance, globalization, and market dynamics, characterized by rapid and unpredictable change, have shifted the software development landscape. These market features put pressure on software and software-intensive organizations to develop what Eisenhardt and Martin [20] called dynamic capabilities. Software development organizations need to be creative, innovative, and flexible, while working with incomplete information and pursuing economic efficiency. This situation is particularly relevant for organizations in domains such as web or mobile applications and services. In these contexts, applications are frequently developed in a matter of weeks or months, rather than years, as it was common when using traditional processes [1]. Yet, the emergence of trends like internet of things (IoT) will shape software development processes of more traditional industries in the near future as well.

To cope with this situation, a community of practitioners formulated the Agile Manifesto in 2001 [11]. In a 2 days meeting in the Wasatch mountains of Utah in February 2001,d 14 independent software practitioners proposed the Agile Manifesto as an alternative to software processes that were considered too inflexible and slow to adapt to business changes. It provoked a change in the way in which the software engineering community was addressing software development processes. In essence, Agile recognizes the limitations of anticipating external business changes and provides means oriented to implement minimum viable products (MVPs) quickly as a key competitive advantage [21]. The idea is that MVPs are incrementally developed in collaboration with customers, as more information about the product is known. Contrary to traditional phase-based software development processes, Agile appraises iterative development. Traditional software development phases (e.g., requirements, development, and testing) are run in small cycles to achieve continuous delivery and feedback and, therefore, improve the company's capability to adapt to market and customer fluctuations [21]. Furthermore, Agile emphasizes the human side of the sociotechnical software development activity as a primary driver of project success [22,23]. Agile methods advocate that the key role that people plays in software development makes the development process less deterministic and repeatable than previously considered by traditional prescriptive methods [18]. Kruchten [24] explained it using the party metaphor: “Consider you organize a party this Saturday at your home. You invite a group of people, order the food, move the furniture, and you record carefully: who comes, when, who eats what, drinks what, etc., and everyone leaves having had a good time. The next Saturday, to have another great time, you decide to have the very same people, the very same food and drinks, you ask them to dress the same way, arrive at the same time, you introduce them to the same people, bring them the same glasses with the same drinks, make the same jokes,... will you be guaranteed to have a nice party again...?” In the same line, Boehm stressed that “one of the most significant contributions of the agile methods community has been to put to rest the mistaken belief that there could be a one-size-fits-all software process by which all software systems could be developed[2]. The bad news is that, unfortunately, there is no silver bullet for software development processes. That is, there is no definitive answer to the question: what is the best software development process I should apply? However, the good news is that Agile and Lean software development offer means to cope with current software business dynamics, which can be adapted to different contexts.

Regarding to the adoption level of Agile and Lean software processes in the software development industry, what was initially considered as a fad has been progressively consolidated. Nowadays, a great extent of the software industry follows these methods. For example, the latest State of Agile Survey by VersionOne [25] found that 43% of its 3880 respondents worked in software organizations with more than 50% of their teams using Agile. Only 4% of respondents indicated that in their organization no team was using Agile. Similarly, a survey study conducted in Finland in 2012 concluded that the Finnish software industry has moved toward these methods, being the 58% of the survey's respondents working in organizational units using Agile software development [26]. Nevertheless, it is also worth mentioning that the adoption of Agile has not always been a smooth process. Indeed, Agile software development caused some initial controversy among those that saw it as an attempt to undermine the software engineering discipline [27]. Particularly, there were some initial concerns about using it as an easy excuse to avoid good engineering practices and just code up whatever comes next [2730]. However, as we will see in the rest of the chapter, and particularly in Sections 4 and 5, Agile software development is a much more disciplined approach than it may seem at first sight.

1.3 Lean Thinking and Continuous Deployment (CD)

A few years after the formulation of the Agile Manifesto, Lean thinking (or simply Lean) started to become also the center of attention of the software development industry [15]. However, Lean did not appear as a software development approach of its own until 2003, when Poppendieck and Poppendieck introduced it in their book Lean Software Development: An Agile Toolkit [15]. One of the reasons that captured the attention of the software community upon Lean thinking was the focus of Lean on the organization as a whole [15,3133]. Agile software development was mainly conceived to work for small software development teams [34]. However, scaling Agile methods, such as Scrum [35] or eXtreme programming (XP) [36], to operate a whole organization was not straightforward; Agile does not explicitly provide support in that sense [32,3739]. Thus, Lean thinking was discerned as a promising solution to be combined with Agile methods. Nowadays, Lean thinking is not only applied as a way of scaling Agile, but also as well as a way of improving software development processes from a wider perspective [40].

The interest on Lean thinking, which originally emerged in the automotive industry [41], is not exclusive to the software development industry. Lean has been widely adopted in different domains, from the healthcare domain to the clothing industry. Table 1 shows some examples of benefits that are attributed to Lean in diverse domains, in terms of profitability, productivity, time-to-market, and product quality.

Table 1

Examples of Benefits Attributed to Lean Thinking in Companies From Different Domains
DimensionBenefit
Profitability and productivityToyota, which is well known as an icon of Lean thinking, cut $2.6 billion out of its $113 billion manufacturing costs, without closing a single plant in 2002 by using Lean principles [42]. Moreover, although Toyota has suffered challenging crisis in its history [43], the company is one of the leaders at global automobile sales
Time to marketIn the retail clothing industry, Zara's business model is based on Lean thinking. Zara has reduced its lead time by collecting and sharing input from customers daily and using Lean inventories. Zara delivers new items to stores twice a week (as much as 12 times faster than its competitors) and bring in almost 30,000 designs each year, as opposed to the 2000–4000 new items introduced by its competitors [44]
In the healthcare domain, Lean thinking has provided significant improvements in reducing patient waiting lists, floor space utilization, and lead time in laboratorial tests [45]
Product qualityToyota is well known as an icon in quality control [43]. For example, the Toyota Lexus CT200h has received the maximum rating under the Japanese overall safety assessment in 2011

During last years, a vogue for rapid and continuous software engineering is emerging [46]. Rapid and continuous software engineering bases on many ideas from Agile and Lean software processes. Concretely, it refers to the organizational capability to develop, release, and learn from software in rapid parallel cycles, often as short as hours or days [4648]. Speed is the key aspect in this trend. The aim is to minimize the step between development and deployment so that new code is deployed to production environment for customers to use as soon as it is ready. CD is the term used to refer to this phenomenon [16,4952]. Although the concept of deploying software to customers as soon as new code is developed is not new and it is based on Agile software development principles, CD extends Agile software development by moving from cyclic to continuous value delivery. This evolution requires not only Agile processes at the team level but also integration of the complete R&D organization, parallelization, and automation of processes that are sequential in the value chain and constant customer feedback [46]. Rapid releases, continuous delivery, and CD will be widely discussed in Section 5.

2 Trends on Agile, Lean, and Rapid Software Development

Given the importance of Agile, this section provides a more detailed account of the history and topics of Agile in the scientific literature. The analysis helps the reader understand how a movement initially promoted by practitioner's proponents of Agile methodologies has become a well-established research discipline. Particularly, we analyze the various concepts that are investigated inside the scientific literature of Agile through the lens of automated text mining of scientific studies of Agile development. To characterize the research on Agile software development, we collected and analyzed a large set of studies by searching abstracts in the Scopus database, starting from the year 2000. Using search words “agile” and “software” resulted in over 7000 published articles that we used in our trend mining.

2.1 Overview of Agile Literature

First, we explore the research topics in Agile software development over the past 2 decades. We divided the articles into four roughly equally large groups based on the year of publication and plotted a word comparison cloud of their titles. Fig. 2 shows the word comparison cloud. Early years (2000–07) are in black, second period (2008–11) is in gray, third period (2012–14) is in red, and the most recent era (2015–17) is in blue. The words in each quadrat are more common in their given periods than in other periods, i.e., the size of each word is determined by its deviation from the overall occurrence average. The figure was plotted with R Package “wordcloud.”

Fig. 2
Fig. 2 Word comparison cloud of research on Agile software development from 2000 to till date.

Although the early years contain several articles about Agile software development in general, e.g., Refs. [28,53,54], the Agile software development method that was the most investigated early was XP [36]. XP is an Agile method with the most doctrinaire approach by setting detailed development practices such as test-driven development and pair programming. The early success of XP as well as declining interest toward it later, may well be explained by its mandating approach to a set of development practices. Adopting it at first can be straightforward as it gives clear rules such that all the development code is done by pair programming. However, later people may realize that such ultimatums might not make sense in their context and, thus, they would turn to more flexible Agile methods. For example, for pair programming research shows that having two junior programmers can form a cost-effective pair while the same does not hold for two expert programmers [55]. During the early years, many papers about Agile manufacturing appeared [56] which addressed the manufacturing of physical products. Work in this area also influenced Agile software development as we shall explain in the next section.

In the second period (2008–11) research about Agile software development in the technological contexts of the web and service-oriented architectures increased in numbers. Thus, the scientists working on technical advances also connected their works to software process advances in Agile software development, e.g., Ref. [57]. During that time, researchers connected Agile software development to work on global and distributed software development, which addresses issues of developing the same software in multiple sites with diverse locations around the globe, e.g., Ref. [58]. You should also notice that papers connecting Agile to global and distributed software development were the first research steps toward scaling Agile beyond one colocated team. Research efforts in Agile software development increased also in the areas of process simulations, e.g., Ref. [59], linking business to Agile, e.g., Ref. [60], and in customer and other type of collaborations, e.g., Ref. [61].

In the third period (2012–14), the technical advances of cloud computing [62] and model-driven development [63] were linked with the process advances of Agile. The term “Lean” gained popularity as a way to advance Agile even further [64]. Learning and teaching Agile was studied in universities [65] but articles about learning Agile also include papers about self-reflection in Agile teams [66].

In the most recent period (2015–17), we can see the rise of word continuous, which increases in popularity due to the practices of continuous integration, CD, and continuous delivery [46,67]. These practices highlight the importance of running working software, which is integrated and delivered to clients continuously, rather than providing major updates biannually, for example. We also notice increase in popularity of Kanban that is a method for managing work and tasks in Agile software development. Systematic literature reviews (SLRs) about Agile increased in popularity in the most recent period as well. SLRs offer an overview of particular areas of Agile software development like using software metrics in Agile [68] or technical debt [69].

2.2 Trends in Agile

The previous section offered a general overview on Agile software development over the past 2 decades. For this section, we did individual searches on topics presented in previous section but also on engineering topics we knew that had been introduced with Agile software development such as refactoring. Thus, we searched for the keywords shown in Fig. 3 combined with the word “software”. Adding word software was necessary to exclude, for example, papers discussing Scrum in context of Rugby instead of Agile software development. Research in software engineering in general has increased in past 2 decades [70], so we normalized all search results by the number of papers found with the general terms of “software development” or “software engineering”. We also normalized all trend graphs to have values between 0 and 1 where max is the year with the highest normalized amount of papers.

Fig. 3
Fig. 3
Fig. 3 Trends on Agile software development.

The concepts of XP, Scrum, Lean, Kanban, DevOps, and continuous integration/deployment/delivery are shown in Fig. 3A–F. We can see that XP has been declining in research interest since 2004, Fig. 3A. Scrum, Lean, and Kanban have had good popularity since 2009 but they still appear to be gaining popularity, although the growth trends is not as steep as it has been in the past. DevOps and continuous integration/deployment/delivery seem to be gaining popularity fast and can be characterized as the hot research topics in Agile software development. These topics will be developed in Sections 5 and 6.

Fig. 3G–I shows the popularity of the concepts of technical debt and code smells that are used to describe suboptimal software engineering solutions which hinder the velocity of Agile teams. We can see that the research in both areas is still increasing. The concept of technical debt appears to be more recent than code smells. The concept of technical debt is also larger than code smells. Code smells refer to code problems only, while technical debt can refer to problems with using an old version of the build server, for example. Refactoring is about code modifications to fix code smells or technical debt or due to the need for other behavior persevering changes. The popularity of refactoring research has been stable since 2009. The concept of technical debt in the context of Agile will be developed in Section 8.

Finally, Fig. 3J–L shows the popularity of three Agile software development practices that were popularized by XP that are pair programming, test-driven development, and user stories. We can see that although the popularity of XP has declined in research literature, the popularity of pair programming has remained relatively stable since 2003, and the research interest in TDD has similarly remained stable since 2007. Research on user stories that could also be titled as Agile requirements engineering is still experiencing fast growth. So, even when XP might become extinct, some of its practices are still sparking wide interest.

2.3 Summary

This section has demonstrated popularity of many Agile software development concepts and practices in the research literature. Next sections will go deeper to the foundations of Agile and help the reader in putting these concepts together as all of these concepts are essentially solutions of the business and engineering problems companies are having while developing software-based products, services, and solutions.

3 A Walk Through the Roots of Agile and Lean Thinking

This section describes Lean thinking, agility, and its combination (known as Leagility) as they originally arose in manufacturing (more concretely, in the automotive industry). Understanding the principles of Agile and Lean in the manufacturing domain helps better understand the essence of these paradigms. Thus, this section provides background of Agile and Lean that we believe may be interesting for the reader, although, its reading is not mandatory to understand the rest of the chapter.

3.1 Lean Thinking

Lean was born as part of the industrial renaissance in Japan after the Second World War in the 1940s. Traditional mass production systems, which are based on producing large batches of products through continuous assembly lines of interchangeable parts, were unsuitable in a Japanese market lashed by the war and characterized by low volumes. Thus, Japanese manufacturers found themselves surrounded by obstacles that forced them to develop new methods. Japanese new production methods led to what we know today as Lean or Lean thinking. However, it is interesting to notice that the term Lean was not used by Japanese manufacturers. Lean was first used by researchers from the Massachusetts Institute of Technology (MIT) when they began research under the International Motor Vehicle Program (IMVP) in 1986.e With the aim of investigating the differences across worldwide automotive industries, IMVP researchers discovered that the Japanese auto industry was far ahead when compared to the automotive industry in America. By carefully studying Japanese methods, particularly those of Toyota under its Toyota production system (TPS), they conceived an entirely different production system, which they called Lean manufacturing [41]. Thus, Lean or Lean thinking is the English term that western researchers used to describe Japanese original production methods.

According to MIT's researchers, Lean is about “doing more with less” by ideally producing “the right things, at the right time, and in the right place[41]. Based on fundamental industrial engineering principles, Lean thinking, as interpreted by MIT's researchers, steeps in a philosophy of maximizing value and minimizing waste. Five principles guide this philosophy [71]: value, value stream, flow, pull, and perfection.

  •  Value is everything that a customer is willing to pay for. Thus, value is understood as customer value. Defining and understanding value from the perspective of the customer is the central focus of Lean thinking. Lean thinking stresses that every activity inside a company should contribute to create customer value. The goal is to make organizations deliver as much customer value as possible. Its counterpart, waste, or muda in Japanese, is everything that consumes resources but creates no customer value.
  •  Value stream is the optimized end-to-end collection of actions required to bring a product/service from customer order to customer care. The activities in the value stream are classified in three groups: (1) activities that create value and, therefore, are legitimately part of the value stream; (2) activities that create no value for customers but are currently needed to manufacture the product. These activities remain in the value stream as, otherwise, the product cannot be manufactured, but the aim is to improve the production process so that they can be removed at some point; and (3) activities that clearly create no value for customers and should be immediately removed from the value stream.
  •  Flow means that production activities should be organized as a continuous flow, eliminating discontinuities. Flow requires that unnecessary steps and inventories are eliminated (waste). Opposite to mass production, in which interchangeable parts are continuously produced to assemble final products, in Lean thinking, products are made using single piece flows. In a single piece flow, operations are efficient in a way that batch sizes and inventories are replaced by working on one product at a time.
  •  Pull focuses on producing products only when they are really needed. Accordingly, in a pull system, an upstream process produces only when a downstream process is ready and “pulls” some more work from the upstream process. This minimizes inventories. In traditional push systems, work is produced in response to a preset schedule, regardless of whether the next process needs it at that time. Accordingly, the process is transformed from batch-and-queue to just-in-time (JIT) production.
  •  Perfection, or Kaizen in Japanese, refers to the enterprise-level improvement and learning cycle. Lean aims to achieve zero waste and defects based on the concept that there is no end in the strive for perfection and learning.

MIT's five principles of Lean are probably the most popular interpretation of Lean thinking. Some voices have questioned the validity of IMPV's studies by pointing out to a certain biased interpretation of the original Japanese methods [72]. For example, Toyota and its TPS, which had a great influence on Lean thinking as interpreted by MIT's researchers, was originally called the Respect for Humanity System. The respect for humanity system was based on two main pillars: continuous improvement and respect for people [73]. Thus, value and waste were not originally the main focuses of the paradigm. When later Lean was interpreted from a western point of view, influenced by the existing western's social–economical system, value, and waste became key components of Lean thinking. Nevertheless, biased or not, it is indisputable that MIT's studies, and the five principles outcome of these studies, have vastly influenced the shape of Lean thinking as it is understood nowadays. The book The Machine That Changed the Worldf [41] provides a more detailed description of the story of Lean.

Besides MIT's researchers, it is important to know that other authors have also provided slightly different interpretations of Lean thinking. Table 2 presents most popular interpretations of Lean thinking. It can be said that Lean has incrementally evolved over time [41,71,7476]. As presented in Table 2, Onho [74] described the TPS mainly from a perspective of reducing wastes such as overproduction, waiting, transportation, overprocessing, inventory, movement, and defects. Although Onho emphasized the concepts of JIT and autonomation, many authors have taken waste as the key element of Lean thinking. For example, Cusumano referred to Lean as: “The authors [referring to the authors of The Machine That Changed the World] used the term ‘Lean’ to describe any efficient management practice that minimizes waste[77]. In a similar vein, Shah and Ward defined Lean production as “an integrated socio-technical system whose main objective is to eliminate waste by concurrently reducing or minimizing supplier, customer, and internal variability[78]. The excessive focus on waste has frequently created certain unfair reputation to Lean thinking among those who have seen it as an easy excuse to get rid of employees and resources. However, although the concept of waste is undoubtedly important in Lean, the 5, 14, and 13 principles of Lean thinking by Womack and Jones [71], Liker [75], and Morgan and Liker [76] respectively (see Table 2), clearly show that Lean thinking is more than only removing waste. As we will see in Section 4, the interpretation of Lean thinking in software development has been mainly taken from an Agile perspective, as Lean software development was largely built upon the values and principles formulated in the Agile Manifesto. Thus, although waste is an important concept in a software development context as well, Lean software development goes way beyond waste reduction.

Table 2

Main Sources of Lean Thinking in a Manufacturing Context
SourceDescription
Ohno [74]Ohno described the Toyota production system (TPS) as follows:

 The basis of the TPS is the absolute elimination of waste. Ohno described seven classes of waste: (1) overproduction (producing more quantity of product or product's components than needed), (2) waiting (waiting for a previous upstream activity to be done), (3) transportation (unnecessarily moving of materials), (4) overprocessing (unnecessarily processing by a downstream step in the manufacturing process), (5) inventory (storing of materials that are not needed for the present), (6) movement (unnecessary motion of people), and (7) defects (rework because of quality defects)

 According to Ohno, two pillars support this system: (1) Just-in-time (JIT), which refers to producing the right items at the right time in the right amounts and (2) autonomation, which refers to a quality control principle that provides machines and operators the ability to stop the work immediately whenever a problem or defect is detected

Liker [75]Liker considers 14 principles in his interpretation of Lean thinking as follows:

1. Base your management decisions on a long-term philosophy, even at the expense of short-term financial goals

2. Create a continuous process flow to bring problems to the surface

3. Use “pull” systems to avoid overproduction

4. Level out the workload (heijunka)

5. Build a culture of stopping to fix problems, to get quality right the first time

6. Standardized tasks and processes are the foundation for continuous improvement and employee empowerment

7. Use visual control so no problems are hidden

8. Use only reliable, thoroughly tested technology that serves your people and process

9. Grow leaders who thoroughly understand the work, live the philosophy, and teach it to others

10. Develop exceptional people and teams who follow your company's philosophy

11. Respect your extended network of partners and suppliers by challenging them and helping them improve

12. Go and see for yourself to thoroughly understand the situation (genchi genbutsu)

13. Make decisions slowly by consensus, thoroughly considering all options; implement decisions rapidly (nemawashi)

14. Become a learning organization through relentless reflection (hansei) and continuous improvement (kaizen)

Morgan and Liker [76]Morgan and Liker focused on the Toyota product development process. It can be described in 3 categories and 13 principles:
Process

1. Establish customer-defined value to separate value added from waste

2. Front load the product development process to explore thoroughly alternative solutions while there is maximum design space

3. Create a leveled product development process flow

4. Utilize rigorous standardization to reduce variation and create flexibility and predictable outcomes


Skilled people

5. Develop a chief engineer system to integrate development from start to finish

6. Organize to balance functional expertise and crossfunctional integration

7. Develop towering technical competence in all engineers

8. Fully integrate suppliers into the product development system

9. Build in learning and continuous improvement

10. Build a culture to support excellence and relentless improvement


Tools and Technology

11. Adapt technology to fit your people and process

12. Align your organization through simple, visual communication

13. Use powerful tools for standardization and organizational learning

Table 2

3.2 Lean Manufacturing Toolkit

Lean thinking has no formal practices, but builds on any practice that supports its principles. Still, a toolkit of recommended practices, tools, and techniques, from which to choose from, have emerged over time to implement the fundamentals in practice. Table 3 summarizes those that are relevant from a software development perspective, as they have been mentioned in the context of Lean software development (and will appear later on in the next sections). For a more thorough listing of Lean terms, with examples and illustrations, the reader is referred to The Lean Lexicon created by The Lean Enterprise Institute [79].

Table 3

Selection of Recommended Practices/Tools/Techniques From Lean Thinking
Practice/Tool/TechniqueDescription
Autonomation (Jidoka)Quality control principle that aims to provide machines and operators the ability to stop the work immediately whenever a problem or defect is detected. This leads to improvements in production processes by eliminating root causes of defects. Related to the concept of “Stop-the-line”
CellLocation of processing steps immediately adjacent to each other so that products can be processed in very nearly continuous flow
Chief engineer (Shusa)Manager with total responsibility for the development of a product. The chief engineer is the person who has responsibility to integrate the development team's work around a coherent product vision
Just-in-time (JIT)System for producing the right items at the right time in the right amounts
KaikakuProcess improvement through a radical change
KaizenContinuous process improvement through small and frequent changes
KanbanMethod based on signals for implementing the principle of pull by signaling upstream production
Lead timeMetric defining the total time that a customer has to wait to receive a product after placing the order
Mistake proofing (Poka-yoke)Method that helps operators prevent quality errors in production by, for example, choosing wrong parts. The method ensures that an operator can only choose the right action as selecting the wrong action is impossible. For example, product designs have physical shapes that make impossible to wrongly install parts in wrong orientations
Big room (Obeya)Project leaders room containing visual charts to enhance effective and timely communications, and to shorten the Plan–Do–Check–Act cycle
Set-based concurrent engineeringApproach to designing products and services by considering sets of ideas rather than a single idea
Self-reflection (Hansei)Continuous improvement practice of looking back to think how a process can be improved
Six-SigmaManagement system focused on improving quality by using mathematical and statistical tools to minimize variability
StandardizationPrecise procedures for each activity, including working on a sequence of tasks, minimum inventory, cycle time (the time required to complete an operation), and talk time (available production time divided by customer demand)
Usable knowledgeLearning process focused on capturing knowledge to be applied in other projects
Value stream mapping (VSM)Tool for analyzing value and waste in the production process. VSM provides a standardized language for identifying all specific activities that occur along the value stream
Visual controlTools to show the status of the production process so that everyone involved in the production process can understand it at a glance
Work-in-progress (WIP)Items of work between processing steps
5-WhysMethod for analyzing/finding the root cause of the problems consisting in asking “why” five times whenever a problem is discovered

3.3 Agility

Similar to Lean thinking, the agility movement does not has its origins in software development but in a manufacturing context. However, agility in manufacturing emerged well after Lean thinking was already in use. Concretely, it appeared in manufacturing at the beginning of the 1990s, with the publication of a report by the Iacocca Institute [80]. This report defined agility as a solution to adjust and respond to change, and satisfy fluctuant demand through flexible production. Specifically, Nagel and Dove [80] defined agility as “a manufacturing system with extraordinary capability to meet the rapidly changing needs of the marketplace, a system that can shift quickly among product modes or between product lines, ideally in real-time response to customer demand.” Christopher and Towill [81] describes how “the origins of agility as a business concept lie in flexible manufacturing systems, characterizing it as a business-wide capability that embraces organizational structures, information systems, logistics, processes, and in particular mind set.”

Similar as well to the concept of Lean, agility seems to be “highly polymorphous and not amenable to simple definition[82]. However, two aspects are usually stressed in the literature: adaptation and flexibility. The concept of adaptation is based on the contingency theories, which are classes of the behavioral theory [83]. These theories state that there is no universal way of managing an organization. The organizing style should be adapted to the situational environmental constraints in which the organization operates. Thus, organizations are seen as open systems that must interact with their environment to be successful. Successful organizations do not keep themselves in isolation but develop their adaptation capabilities. A close related term is organizational flexibility. Organizational flexibility is considered as “the organization's ability to adjust its internal structures and processes in response to changes in the environment[84]. The aim of agility is to achieve an adaptive and flexible organization able to respond to changes and exploit them to take advantage.

The literature highlights also four capabilities that are particularly important to achieve an Agile organization [85]:

  •  Responsiveness, as the ability to identify and respond fast to changes. It does not only mean identifying changes when they happen (being reactive to changes) but also proactively sensing, perceiving, and anticipating changes to get a competitive advantage.
  •  Competency, which involves all capabilities needed to achieve productivity, efficiency, and effectiveness. Competency comprehends each area in an organization, from strategic vision, appropriate technology and knowledge, product quality, cost effectiveness, operations efficiency, internal and external cooperation, etc.
  •  Flexibility, which refers to the organizational capability to make changes in products and to achieve different objectives using the same facilities. Flexibility involves from product characteristics and volumes to organizational and people flexibility.
  •  Speed or quickness, which relates to making tasks and activities in the shortest possible time in order to reduce time-to-market.

To achieve these capabilities, Agile organizations are usually flat organizations with few levels of hierarchy, and informal and changing authority. Regulations with respect to job description, work schedules, and overall organizational policies are also loose, and trust is given to teams to perform their tasks. Teams are self-organized and job descriptions are redefined based on need [84]. A more comprehensible description of the main attributes of agility as it originally emerged in the manufacturing domain can be found in Ref. [84].

3.4 Combining Lean and Agile in Manufacturing

As in software development, the combination of Lean and Agile also occurred in manufacturing [86]. However, in a manufacturing context, the migration occurred from Lean and functional systems to Agile and customized production [81]. That is, Lean thinking was already in place when many organizations started to look for agility. Accordingly, the shift was characterized by a strong influence of Lean thinking, mainly understood as efficiency and waste reduction. In this context, Lean and Agile seemed to have some intertwined ideas [86]. Agile's focus on flexibility and capacity to embrace change could challenge Lean's focus on overall economic contribution. For example, achieving flexibility in a manufacturing context may request important investments in machines and storages. Marson-Jones et al.’s matrix [87] was created to guide the combination of Lean and Agile in a manufacturing context. It is based on the idea of market winners and market qualifiers. The combination is guided according to the primary company's aim as follows:

  •  If the primary company's aim is on reducing cost (i.e., cost is the market winner and, therefore, dominates the paradigm as primer requirement), then Lean should be the primary strategy. In this case, aspects such as quality, lead time, and service level are highly desirable but are not strictly requested (market qualifiers).
  •  However, if the goal of the company is to improve its service level, Agile should take priority. In this case, cost would be a market qualifier but not a market winner.

In a similar vein, the theory of Leagility in a manufacturing domain [86,88] says that while the combination of Agile and Lean might work well, since Lean capabilities can contribute to Agile performance, the combination has to be carefully planned to prevent risks that Agile's demands may cause on Lean capabilities [86]. Specifically, time and space restrictions are considered in the manufacturing domain, limiting the combination of Agile and Lean to three scenarios:

  1. 1. Different value streams, that is, different products.
  2. 2. The same product but at different points in time.
  3. 3. Using both paradigms at different points in the value stream by using decoupling strategies (strategies to decouple Agile and Lean).

In other words, in manufacturing, there is a tendency to suggest that although Agile and Lean can be combined, they cannot be used at the same time in the same space. Fortunately, the software domain does not have the same restrictions. Indeed, although building upon similar principles, the own characteristics of software development have made the combination of Agile and Lean for software development quite different from its combination in manufacturing. Next section develops this combination in detail.

4 Agile and Lean in Software Development

Section 3 has described the way in which Agile and Lean emerged in manufacturing. When it comes to the software development domain, we need to consider the fundamental differences between domains [89]. For example, differently from manufactured products, software products are of an intangible nature, which makes it impossible to specify physical measures, affecting the entire concept of quality [90]. The concepts of value and waste are impacted as well. Software products are malleable and its value is not limited to a single time-bound effort. Defining value is not a straightforward task in software development [91], having a whole research field on its own, value-based software engineering [92]. Similarly, waste does not have to follow necessarily the path of the original seven forms of waste as identified by Ohno [74]. Most waste in manufacturing can be directly detected by observing the physical material flow and machine/worker activities. However, many times, intangible work items in software development challenge waste recognition and process improvement. Principles such as those related to flow or visual communication are also impacted due to this intangible nature. Another key difference is on the role of people. While human presence in a manufacturing environment is mainly required to operate automated machines, in software development, people creativity, and knowledge are essential.

Not everything is more challenging, though. Compared to manufactured products, software is quickly duplicated and easily changed throughout releases. This offers innumerable more possibilities from a flexibility and agility perspective than in the case of manufactured products. The main message is that a direct copy/paste from manufacturing to software development is not possible. However, if Agile and Lean are thought of as a set of principles rather than practices (as presented in Section 3), applying these principles in a software development domain makes more sense and can lead to process improvements [40,75,77]. This section develops on how, based on the principles presented in Section 3, Agile and Lean have been interpreted for software development.

4.1 Agile Software Development

The Agile Manifesto [11] started the Agile software development movement. Similar to Lean thinking principles, the Agile Manifesto only establishes the fundamentals of ASD. Besides, a variety of methods have emerged to implement Agile's values and principles in practice. XP [36], Scrum [35], dynamic systems development method [93], crystal [94], or feature-driven development [95] are among the popular Agile methods. In this section, we will describe Scrum and XP as they are the most widely used in industry [26], having captured also a great attention in research (see Section 2). As we will see next, while XP provides concrete software development practices, Scrum could be mostly considered as a software management approach.

4.1.1 Agile Values and Principles: The Agile Manifesto

Under the slogan “We are uncovering better ways of developing software by doing it and helping others do it,” the Agile Manifesto supposed a reaction against traditional methods that were considered unable to meet market dynamics [11]. Based on the original ideas of Agility, and taking Lean thinking as one of its inspiring sources [96], the Agile Manifesto was formulated from a software development angle.

The Agile Manifesto highlights four values:

  1. 1. individuals and interactions over processes and tools,
  2. 2. working software over comprehensive documentation,
  3. 3. customer collaboration over contract negotiation, and
  4. 4. responding to change over following a plan.

What the authors of the Manifesto wanted to mean through these values is that while there is value in the items on the right (i.e., processes and tools, comprehensive documentation, contract negotiation, and following a plan), they value the items on the left more (i.e., individuals and interactions, working software, customer collaboration, and responding to change). In other words, processes and tools are useful as far as they serve people and their interactions; documentation that serves working software is fine, but documentation that is not supporting the development process and never gets updated becomes a waste of time and resources; contracts with customers are fair to run the software business, however customer collaboration is more important in order to develop the right product that will serve real customer's needs; and being able to respond to business changes is more important than following a strict plan that might lead to create the wrong product.

In addition to these four values, the Agile Manifesto establishes 12 principles as follows [11]:

  1. 1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. 2. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
  3. 3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. 4. Business people and developers must work together daily throughout the project.
  5. 5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. 6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. 7. Working software is the primary measure of progress.
  8. 8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. 9. Continuous attention to technical excellence and good design enhances agility.
  10. 10. Simplicity—the art of maximizing the amount of work not done—is essential.
  11. 11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. 12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

These values and principles do not say how the software development process should be operationalized, but provide the basis to guide it. The idea is to provide responsiveness, flexibility, capability, and speed to the software development process (see Agile capabilities presented in Section 3.3). The Agile Manifesto caused some initial controversy among the software engineering community, especially in those who perceived Agile as an easy excuse for irresponsibility with no regard for the engineering side of the software discipline [27]. However, many others understood that agility and discipline were not so opposed [28,29,97]. Indeed, the 17 proponents of the Manifesto stated that: “the Agile movement is not anti-methodology, in fact, many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modelling, but not in order to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely used tomes. We plan, but recognize the limits of planning in a turbulent environment.”g

4.1.2 XP

eXtreme Programming [36], simply known as XP, was the most popular Agile method at the beginning of the movement. Although other Agile methods, such as Scrum [35], have acquired more popularity recently, many XP practices are still widely used in industry. Indeed, XP offers a very concrete set of practices to implement Agile. Overall, these practices aim to provide continuous feedback from short development cycles and incremental planning, and flexible implementation schedule to respond to changing business needs. XP relies on evolutionary design, automated tests to monitor the development process, a balance between short-term programmer's instincts and long-term business interest and oral communication.

As presented in Table 4, XP has its own set of values and principles, which are well aligned with the values and principles of the Agile Manifesto [36]. XP's values are the basis for XP's principles (i.e., each principle embodies all values).

Table 4

XP Own Set of Values and Principles
XP's values

1. Communication. Keeping a constant flow of right communication

2. Simplicity. Finding the simplest solution that could possible work. XP argues that it is better to do it simple today and pay a little more tomorrow to change it if needed, than to do something very complicated today that may never be used in the future

3. Feedback. Keeping a constant feedback about the current state of the system. Feedback works from a scale of minutes (e.g., feedback from unit testing) to a scale of days or weeks (e.g., customer feedback about the most valuable requirements—stories in XP's terminology)

4. Courage. Going at absolutely top speed. Tossing solutions and starting over a most promising design if needed. Courage opens opportunities for more high-risk and high-reward experiments

XP's principles

1. Rapid feedback. Speed is important from a learning perspective because the time between an action and its feedback is critical to learn. XP aims to learn in seconds or minutes instead of days or weeks at development level, and in a matter of days or weeks at business level instead of months or years

2. Assume simplicity. Each problem is faced as if it could be solved using a very simple solution. The focus is on solving today's problem and add complexity in future, if needed

3. Incremental change. Problems are solved incrementally instead of making big changes all at once

4. Embracing change, by preserving the most options while solving the present problem

5. Quality work. Focus on excellent or even “insanely” excellent to support work enjoyment

Table 4

However, what most probably took the attention of software practitioners on XP was not this set of values and principles, but its very concrete set of practices for software development. When creating the method, the authors tried to come back to what they argued to be the basic activities of software development: coding (the one artifact that development absolutely cannot live without), testing (and particularly automated testing, to get confidence that the system works as it should work), listening (so that things that have to be communicated get communicated, e.g., listening to what the customer says about the business problem), and designing (creating a structure that organizes the system logic). XP's practices focus on these four basic activities. Next, we introduce each of the 12 practices that are considered in XP’s. For a more detailed description of each practice, the reader is referred to Ref. [36].

  •  The planning game. The planning game is used to determinate the scope of the next release. XP calls for implementing the highest priority features first. In this way, any features that slip past the release will be of lower value. Following the Lean principle of value, the customer is responsible to choose the smallest release that makes the most business value, while programmers are responsible for estimating and completing their own work. Particularly, two sources are used to determine the scope of a release: business priorities and technical estimates. Business stakeholders (or customer representatives) decide upon the scope of the release, priorities, composition, and dates. Technical stakeholders make estimations of how long a feature takes to implement, technical consequences of business decisions, work organization (process), and detailed scheduling. Planning poker is a common consensus-based technique to make estimations in XP. In Planning poker, estimations are made by using numbered cards that face down to the table. Thus, decision makers (in this case technical stakeholders) do not speak their individual estimations aloud but using the cards. Once everyone has made an estimation using the cards, cards are revealed, and estimates discussed. By hiding estimates in this way, the group can avoid the cognitive bias of anchoring, where the first number spoken aloud sets a precedent for subsequent estimates (Fig. 4).
    f04-04-9780128160701
    Fig. 4 Planning poker deck (by Hkniberg at Wikimedia Commons).

    The planning game creates a plan that is an alive artifact that can be quickly updated when the reality overtakes the plan. Plans are updated at least for each 1–4-week iterations and for 1–3-day tasks, so that the team can solve plan deviations even during an iteration.
  •  Small releases. XP calls for short release cycles, a few months at most. Within a release, XP uses 1–4-week iterations. Short releases cycles include fewer changes during the development of a single release and better ability to adapt to business changes. Key Agile characteristics such as responsiveness and speed are achieved by working in short release cycles.
  •  Metaphor. A metaphor is a simple story of how the system should work that is shared among all programmers. The metaphor helps everyone on the project understand the basic elements of the system and their relationships. The metaphor matures as the development proceeds. It is similar to the concept of system architecture but simple enough to be easily communicated between technical and business stakeholders.
  •  Simple design. Design should be as simple as possible to solve today's problem (e.g., runs all tests, does not have duplicated logic, and has the fewest possible classes and methods). Any complexity should be removed as soon as it is discovered. Design is part of the daily business of all programmers in XP, in the midst of their coding.
  •  Testing. Testing and coding are simultaneously conducted in XP. Developers continuously write unit tests that are run for the development to progress. Unit tests written by programmers help convince themselves that their programs work well. In addition, customers write (or at least specify) functional tests to convince themselves that the system as a whole works the way they think it should work. A comprehensive suite of tests is created and maintained, which are run and rerun after each change (several times a day). Automated testing is a key in this context. Test-driven development, the concept of writing first tests for new functionality before the new functionality is added, has acquired a lot of popularity in XP [98].
  •  Refactoring. Refactoring focuses on restructuring a system without changing its behavior in order to improve its internal quality. Refactoring is conducted often in XP to keep the system in shape and remove unnecessary complexity.
  •  Pair programming. As shown in Fig. 5, pair programming refers to two developers programming together at one machine. XP advices for all production code to be written in pairs. One member of the pair focuses on writing code while the other thinks more strategically about the solution in terms of tests, complexity, etc. One of the advantages of pair programming is that it allows knowledge sharing among team members.
    f04-05-9780128160701
    Fig. 5 Two coworkers pair programming (by Edward at Wikimedia Commons).
  •  Collective ownership. In XP, anyone can change anything anywhere in the system at any time. The aim is that anybody who sees an opportunity to add value can do it. Thus, everybody takes responsibility for the whole system.
  •  Continuous integration. Integrate and build the system every time that a new task is completed. As tasks are small, the system gets integrated many times per day. Continuous integration is one of the most important Agile practices nowadays, key for enabling continuous delivery and CD (see Section 5).
  •  40 h per week. This practice aims to limit working overtime. As a rule, people should not work more than 40 h per week so that they keep fresh, creative, careful, and confident.
  •  Onsite customer. XP asks for a real customer (a person who will really use the system) to be an integral part of the team, available full time to answer questions, resolve disputes, and set small-scale priorities.
  •  Coding standards. Coding standards are followed to maintain the quality of the source code. Coding standards are essential as everyone can change any part of the system at any time, and refactoring each other's code constantly. Moreover, the aim is that code serves also as a communication channel between developers.

4.1.3 Scrum

Nowadays, Scrum is among the most, if not the most, used Agile method [26]. Scrum was first mentioned in 1986, as a new approach to product development in a study in Harvard Business Review by Takeuchi and Nonaka [99]. Thus, the ideas behind Scrum did not originate in the software domain either, but were adapted to it. Scrum uses the rugby metaphor of players packing closely together with their heads down and attempting to gain possession of the ball (see Fig. 6) to refer to a holistic product development strategy where a development team works as a unit to reach a common goal. In Scrum, a common team goal is defined and shared among all team members, and all team members do their best to reach that common goal (e.g., gaining possession of the ball in rugby). The team is self-organized and can decide the best means to achieve the goal. Thus, the team leader does not dictate what to do next, but uses a facilitative style to help the team achieve its goal. Ideally, the team is physically colocated (reminding the concept of cell in Lean thinking), or uses close online collaboration, to facilitate communication and create a team spirit.

Fig. 6
Fig. 6 Rugby players forming a Scrum (or Melé) to gain possession of the ball (by Maree Reveley at Wikimedia Commons).

Scrum started to be used for software development in the early 1990s. The origins of Scrum for software development is a topic of frequent debate. Some mistakenly believe that Jeff Sutherland, John Scumniotales, and Jeff McKenna invented Scrum in 1993. However, Sutherland himself has acknowledged that their first team using Scrum at Easel Corporation took Takeuchi and Nonaka's work [99] as their inspiring source [100]. Although the team was already using an iterative and incremental approach to building software, “the idea of building a self-empowered team where everyone had the global view of the product on a daily basis” was motivated by Takeuchi and Nonaka's work [100]. Sutherland's teamh started to develop what we know today as Scrum in software development. In 1995, Sutherland introduced the Scrum team to Ken Schwaber, CEO of Advanced Development Methods, who started to use Scrum at his own company as well. Sutherland and Schwaber worked together to formalize the Scrum development process, which was first presented in a paper describing the Scrum methodology at the Business Object Design and Implementation Workshop, held as part of Object-Oriented Programming, Systems, Languages & Applications ‘95 (OOPSLA ‘95). Sutherland and Schwaber, as 2 of the 17 initial signatories of the Agile Manifesto, incorporated the ideas behind Scrum into it.

Scrum is a quite simple process framework. Rather than focusing on technical software development practices, Scrum is a method for managing the software development process. It focuses on how a software development team should organize its work to produce software in a flexible way, rather than on the technical practices that the team should apply. Fig. 7 depicts the Scrum process framework. It is composed by three main elements: the scrum team (in the middle of the figure), scrum events (in red), and scrum artifacts (in blue).

  •  The product owner, the development team, and the scrum master compose the scrum team. The product owner is the responsible person for maximizing the value of the product and the work of the development team. It reminds to the Chief Engineer in Lean thinking. The development team is composed by the professionals who do the work in order to deliver a potentially releasable product increment at the end of each sprint. The scrum master is responsible for making sure that the development work adheres to the Scrum rules (roles, events, and artifacts).
  •  Scrum considers five well-scheduled events: the sprint, the sprint planning, the daily Scrum meeting, the sprint review, and the sprint retrospective. A sprint is each of the increments in which the software development process is divided. The sprint planning is the meeting held at the beginning of each sprint to agree on the work that will be developed in the following sprint. During the sprint, the Scrum team meets daily during 15 min in the daily Scrum meeting to synchronize activities and create a plan for the next 24 h. At the end of the sprint, the work done during the sprint (potentially shippable increment) is inspected during the sprint review meeting. Finally, the sprint retrospective is a meeting for the Scrum team to inspect its way of working.
  •  Three main artifacts are considered in Scrum: the product backlog, the sprint backlog, and the increment itself. The sprint backlog is an ordered list that contains all work to be done during the sprint (e.g., user stories, features, functions, requirements, enhancements, and fixes). The product backlog contains all the work to be done for the next product release. The increment is the sum of all product backlog items completed during a sprint (i.e., outcome of the sprint).
Fig. 7
Fig. 7 The Scrum process.

Next, we describe how all these pieces work together. The product is defined through product backlog items, which are usually known as user stories and features. Product backlog items are stored initially in the product backlog and incrementally transferred to the sprint backlog as the product development progresses through sprints. User stories and features describe the product's functionality from a customer perspective. The underlying strength of these backlog items is that they focus on the value that will be delivered to the user. User stories are often defined following the pattern:

  • ‘As a < User >, I want to < Have > so that < Benefit >’

For example, a user story of a library system could be: “As a librarian I want to have facility of searching a book by different criteria so that I will save time to serve my customers.” In addition, each user story contains acceptance criteria that establish the criteria that the implementation of the user story must meet to be considered as implemented (as done in the Scrum's jargon). User stories contain also an estimation of how much it will take to implement the story, measured as estimated story points. The product owner is responsible of defining the user stories and the acceptance criteria for each user story. User stories are usually described at different level of detail. Particularly in large systems, where high-level product features are initially defined and, as the work progresses, elaborated in more detail through user stories [102]. User stories and features are incrementally created. Thus, it is not expected that a complete set of backlog items is created from the beginning, but the product backlog is an alive artifact that adapts to customer/business's changes. The product owner is the customer's voice to the team and, therefore, responsible for defining features/user stories and prioritizing them to maximize the value of the product. The product owner is also responsible to ensure that the product backlog is visible, transparent, and clear to everyone.

The development is carried out through increments or time boxes, called sprints (lasting between 2 and 4 weeks). Thus, products are developed iteratively and incrementally, maximizing opportunities for feedback and, therefore, increasing responsiveness and flexibility. Each sprint has a sprint goal that is defined during the sprint planning meeting, including the user stories that will be undertaken during that sprint. This is the common goal shared by everyone in the team (as in rugby). The Scrum team is self-organized and has the authority to decide on the necessary actions to complete the sprint goal, which is defined in cooperation with the product owner. Scrum teams are cross-functional, which means that the team has all skills and competences needed to meet the goal. Concerning the size of the team, scrum teams should be small enough to remain nimble but large enough to be able to complete significant work within a sprint. In practice, scrum teams are composed of between 5 and 10 members. Although there are also distributed scrum teams, the ideal case is that all team members are collocated in the same working area, as the Cell and Big-room concepts in Lean thinking.

The sprint backlog, selected from the product backlog, contains a prioritized set of user stories (or any other backlog item such as bug fixes) that will be implemented in that sprint. Once the sprint backlog is established during the sprint planning meeting, it remains unchangeable during the sprint. This means that no one is allowed to ask the development team (or any team's member) to work on a different set of requirements or tasks and, similarly, the development team is not allowed to act on what anyone else may request. After every sprint, two meetings are held. On the one hand, the sprint review meeting, to analyze the progress, and to demonstrate the current state of the product. The goal of this meeting is to show to all interested stakeholders, and particularly to customers/product owners, the potentially releasable increment that has been developed during the sprint. The key aspect in Scrum is that each sprint delivers customer value. On the other hand, a retrospective meeting is also held at the end of each sprint to reflect about the way of working. In particular, the purpose of the meeting is to reflect on how the last sprint went in order to identify (1) aspects that went well and, therefore, should be kept and (2) potential improvements that need corrections. The outcome of this meeting is an actionable plan for implementing improvements to the way the scrum team does its work. This mechanism allows self-reflection and continuous improvement (kaizen) in Scrum. In addition, every day the scrum team has a stand-up meeting of around 10–15 min, usually at the beginning of the day, in which each team member discusses what s/he did since the last stand-up meeting, whether s/he faced any obstacle in that task, and what s/he will do before the next stand-up meeting in the following day. The daily scrum meeting provides transparency on the scrum team daily work and reduces complexity. It allows the team to inspect its progress toward the sprint goal, reveals possible impediments, and promotes quick decision making and adaptation. Fig. 8 shows an example of a daily scrum meeting of a scrum team.

Fig. 8
Fig. 8 Daily Scrum meetings last 15 min every day and are used to provide transparency on the progress toward the sprint goal, reveal possible impediments, and promote quick decision making (by Klean Denmark at Wikimedia Commons).

In this process, the scrum master ensures that the rules of Scrum are followed and is in charge to remove impediments in the work of the scrum team. For example, the scrum master can help the product owner by finding techniques for an effective management of the product backlog, or to the scrum team by facilitating scrum events. Therefore, the scrum master is a servant–leader for the scrum team rather than a manager.

As described earlier, Scrum is a fairly simple method. However, despite its simplicity, Scrum builds upon three important pillars: transparency, inspection, and adaption. Scrum provides transparency to the development process by making progress visible all the time through events such as daily scrum meetings and sprint reviews. Scrum allows frequent inspection to detect undesirable variances (e.g., changes in customers’ needs) and adapt to the new circumstances (e.g., the resulting product will not meet customer's expectations). In words of its founders, “Scrum implements the scientific method of empiricism [...] to deal with unpredictability and solving complex problems[103]. Through small iterations, Scrum improves predictability and control risk by making decisions based on what is known.

Besides the main elements of Scrum described earlier, a number of practices have adhered to Scrum during time. Although, they are not part of the original Scrum framework, they have shown to be very useful as well in certain contexts. For example, Scrum of scrums (or meta-Scrum) are used to synchronize the work of several scrum teams when scaling Scrum from one team to several teams. Backlog grooming is a popular practice to keep the product backlog in shape by reviewing that the backlog contains appropriate items that are properly prioritized. The Agile glossary by the Agile alliance is a good resource to learn more about different terms in the context of Scrum and Agile software development in general (https://www.agilealliance.org/agile101/agile-glossary/).

4.2 Lean Software Development

Nowadays, Lean software development is certainly tied to Agile software development. However, few know that the interest of the software development industry on Lean thinking dates to early 1990s, well before the Agile Manifesto was formulated. Next, we analyze the path followed by Lean thinking within software development before and after the Agile Manifesto, which constituted a breach in the conception of Lean thinking in software development. Then, we focus on Kanban, since it is the most popular Lean technique applied in software development, and list different sources of waste in software development.

4.2.1 Lean Software Development: Pre-Agile Manifesto

The path of Lean thinking within software development started as early as the 1990s, with concepts such as Lean software production and mistake proofingi [104,105]. At that time, Lean thinking was understood as a way of making software development processes more efficient and improving their quality. A major focus was on waste reduction. For example, Freeman [104] describes Lean software development as a system of “achieving ends with minimal means” by striving to have “the minimum amount of tools, people, procedures, and so on.” This and similar interpretations of Lean thinking made Lean to be quite unpopular among software engineers, who saw it as a way to get rid of employees. In 1998, Raman [106] analyzed the feasibility of Lean in software development from a wider perspective, considering the five principles of value, value stream, flow, pull, and perfection as defined by MIT's researchers (see Section 3.1). Raman concluded that Lean could be implemented through contemporary concepts (at that time), such as reusability, rapid prototyping, spiral model, or object-oriented technologies. As we will see next, the conception of Lean software development has considerably evolved after the formulation of the Agile Manifesto.

4.2.2 Lean Software Development: Post-Agile Manifesto

After the formulation of the Agile Manifesto, Lean software development was mainly considered as one of the Agile methods [34]. However, as practitioners started to learn more about Lean principles, Lean software development incrementally acquired an identity in itself [64]. As in manufacturing, Lean software development has been differently interpreted by several authors. Table 5 presents the most popular interpretations of Lean in software development.

Table 5

Interpretations of Lean Thinking in Software Development
AuthorDescription
Poppendieck and Poppendieck [15,107109]Seven principles guide Lean software development (2006) [107]:

1. Eliminate waste, understanding first what value is

2. Build quality in, by testing as soon as possible, automation, and refactoring

3. Create knowledge, through rapid feedback and continuous improvement

4. Defer commitment, by maintaining options open and taking irreversible decisions when most information is available

5. Deliver fast, through small batches and limiting WIP (work-in-progress)

6. Respect people, the people doing the work

7. Optimize the whole, implementing Lean across an entire value stream

Seven principles of Lean software development (2017)a:

1. Optimize the whole, as the synergy between parts is the key to the overall success

2. Focus on customers and the problems they encounter

3. Energize workers to bring creative and inspired people

4. Reduce friction in terms of building the wrong product, building the product wrong, and having a batch and queue mentality

5. Enhance learning to respond to future as it unfolds

6. Increase flow by creating a steady, even workflow, pulled from a deep understanding of value

7. Build quality in, defects should not be tolerated and should be fixed in the moment they occur

8. Keep getting better, by changing as fast as the world changes, paying attention to small stuff, and using the scientific method

Middleton and Sutton [110]Interpretation based on Womack and Jones's five principles of Lean [71]:

1. Value, identifying what really matters to the customer

2. Value stream, ensuring every activity adds customer value

3. Flow, eliminating discontinuities in the value stream

4. Pull, production is initiated by demand

5. Perfection

Middleton and Sutton [110] provide means to implement these principles in practice in a software domain
Larman and Vodde [31]Larman and Vodde's book [31] focus on scaling Lean and Agile software development with large-scale Scrum. Their interpretation of Lean thinking based on the Lean thinking house, which has two pillars: respect for people and continuous deployment. In addition, Larman and Vodde provided a companion book in 2010 with more concrete practices for scaling Lean and Agile in the software domain [111]
Reinertsen [112]Set of principles for product development flow, including managing queues, reducing batch size, and applying WIP constraints
Anderson [113]Kanban as a means to bring Lean thinking into a software development organization. Kanban uses five core properties: (1) visualize workflow, (2) limit WIP, (3) make policies explicit, (4) measure and manage flow, and (5) use models to recognize improvement opportunities. More details on Kanban are provided in Section 4.2.3

Table 5

a http://www.poppendieck.com/ (last accessed 15.08.2017).

Lean software development was initially mainstreamed with an interpretation of Lean thinking led by Poppendieck and Poppendieck [15]. Some argue that this interpretation took the view on software development from the Lean (manufacturing)’s angle. Still, Poppendiecks’ principles have been widely used in industry. Poppendieck and Poppendieck have evolved their Lean principles during last years [15,107109]. Table 5 presents Poppendieck and Poppendieck original principles as they were formulated in 2006 [107] and the current form of these principles. Besides some changes in terminology, the original principles have been complemented with: (1) a deeper focus on customers and the problems they encounter; (2) a greater focus on people and creating a Lean mindset [109]; (3) reducing friction in terms of reducing building the wrong thing, reducing building the thing wrong, and reducing a batch and queue mentality; (4) a greater focus on enhancing learning; and (5) a greater focus on continuous improvement (keep getting better).

As time passes by, more diversity was introduced. Thus, besides Poppendieck and Poppendieck's interpretation of Lean software development, other authors have contributed to shape this phenomenon. For example, Middleton and Sutton [110] provide means to implement the original Womack and Jones's (1996) five principles of Lean thinking in the software domain. In a similar vein, Larman and Vodde [111] base their interpretation of Lean software development on the Lean thinking house and provide concrete practices for scaling Lean and Agile based on this interpretation. Other authors, such as Reinertsen [112] and Anderson [113], have focused on more concrete aspects of Lean software development such as flow and Kanban. Moreover, an increasing body of scientific studies reporting experiences when using Lean software development has populated the software engineering literature (e.g., [89,114121]). Although there is no unified model for the use of Lean and Agile in these studies, some patterns are observable. Most studies converge in the importance of aspects like frequent builds through iterative development, reducing WIP, continuous problem correction and improvement, using cross-functional teams, increasing transparency, and considering human aspects. Table 6 presents some benefits and challenges when applying Lean thinking in software development, as they are mentioned in these scientific studies.

Table 6

Some Benefits and Challenges When Using Lean Software Development According to the Scientific Literature
BenefitsChallenges

 Increased customer satisfaction

 Increased productivity

 Decreased lead and development times

 Improved progress transparency

 Identification of problems’ root causes

 Identification of bottlenecks

 Creating a Lean and Agile organizational culture to extend Lean thinking beyond software development teams

 A deep organizational change is needed to align the entire organization around Lean

 Involving management in development tasks

 Achieving flow in knowledge work. For example, lack of repetition in knowledge work makes it difficult to specify/standardize tasks

 Frustration when starting to use the stop-the-line technique due to the need of stopping-the-line continuously

Table 6

4.2.3 Kanban

Kanban is a popular Lean technique used in software development. It is defined as a signals system to implement the principle of pullj in manufacturing. The idea behind Kanban is very simple. It focuses on using a visual signaling device to give authorization and instructions for producing items in a pull system. The signals tell an upstream process the type and quantity of products to make for a downstream process. Thus, products (or product parts) are only manufactured when needed. Kanban cards are the most common example of these signals. However, Kanban can be also implemented through other devices such as metal plates or colored balls. Fig. 9 shows an example of how Kanban cards support pull. Process A only produces when it receives a Kanban card. Similarly, Process B returns the Kanban card to Process A when it needs more materials.

Fig. 9
Fig. 9 Kanban as a signaling device in manufacturing.

This same idea has been applied in software development but in the form of a board and sticky notes, as depicted in Fig. 10. The board represents each activity in the development cycle in a column (e.g., definition of backlog items, analysis, development, acceptance testing, and deployment). The sticky notes represent user stories or tasks from the product backlog. Thus, the Kanban board visualizes the development flow of these user stories/activities. The number of items under each activity is limited by establishing work-in-progress (WIP) limits. For example, in Fig. 10, three backlog items can be under analysis at the same time, three under development, two in the phase of acceptance testing and one in deployment. Items from the backlog are moved from column to column as the development progresses. An item can be moved to the next development step only if there is room for the new item according to the WIP limits. Thus, teams are not overloaded with work and can focus on the items that provide maximum customer value. Teams can pull more work at any time, triggered by availability of resources. For example, whenever a team member is free, s/he can pull the highest priority ticket from the product backlog. Besides development activities and WIP limits, the Kanban board can include also other information such as the person/s working on each backlog item. It is up to the team to design the Kanban board that better serves its needs.

Fig. 10
Fig. 10 Example of a Kanban board for software development.

The board has the same purpose that signals in a manufacturing context, implementing pull in practice by visualizing the workflow (providing visibility to the entire software development process), and enabling the identification of problems, such as bottlenecks in the workflow (a source of waste). Moreover, WIP limits help reduce inventory and focus on the feature that is being developed [113]. Kanban provides five key benefits [113]:

  1. 1. It visualizes workflow. The Kanban board visualizes the status of each activity in the development process. The team can easily see the big picture of what has been done so far and what needs to be done. Transparency provides a greater control of the workload to deliver in a continuous manner.
  2. 2. It limits work-in-progress. WIP limits are used to limit the amount of work that can be pulled into each activity. It helps optimize workflow and prevent from team overloading and multitasking. Moreover, WIP limits make bottlenecks visible, helping to a better distribution of resources.
  3. 3. It helps measure and manage flow. Besides providing information to eliminate bottlenecks in the entire value stream, lead times can also be easily calculated using the board. The shorter the lead-time, the greater is the value for customers and the organization.
  4. 4. It makes process policies explicit. The process and the policies that the team agrees on how to manage the workflow becomes also visible through the Kanban board. For example, it is clear for everyone what kind of items take priority at a certain time in the development process (e.g., bug fixing vs new user story development).
  5. 5. It supports continuous improvement in a collaborative way. The Kanban board allows for transparency in the development flow and process monitoring. Inefficiencies and bottlenecks are visible. Kanban teams need to work on those, if they want to maintain a steady flow (Kaizen culture).

Ahmad et al. [122] reviewed the scientific literature on Kanban in software development and found promising benefits when using Kanban, such as better understanding of the whole process by all stakeholders, especially developers, improved team communication, and increased customer satisfaction. However, they also found some challenges, such as integrating Kanban with Agile practices, changing the organizational culture according to Lean and applying Kanban in distributed environments. Regarding integrating Kanban and Agile, Kanban is often used in combination with Scrum in which is known as Scrumban [123]. In Scrumban, Scrum teams employ Kanban boards to visualize their development flow. Depending on the team and the situation at hand, sprints are changed by a continuous delivery flow but other Scrum's elements such as daily scrum meetings or periodic reviews are kept [123].

4.2.4 Waste in Software Development

The main focus of Lean software development is not on reducing costs but on creating value. Still, Table 7 lists some typical sources of waste in software development because we think they can help better understand the concept of waste in software development processes. However, readers should not try to memorize these sources of waste but train their eyes to seeing waste by reflecting upon these typical sources of waste.

Table 7

Sources of Waste in Lean Software Development
AuthorSources of Waste
Poppendieck and Poppendieck [107]Original sources of waste in manufacturing [74]:

1. Overproduction: producing more quantity of product or product's components than needed

2. Waiting: waiting for a previous upstream activity to be done

3. Transportation: unnecessarily moving of materials

4. Overprocessing: unnecessarily processing by a downstream step in the manufacturing process

5. Inventory: storing of materials that are not needed for the present

6. Movement: unnecessary motion of people

7. Defects: rework because of quality defects

Translation to software development [107]:

1. Extra features: producing more features and, therefore, code than what is needed to get the customer's current job done

2. Delays: waiting for things to happen because of delays in starting a project, decision making, testing, etc.

3. Handoffs: tacit knowledge that is left behind in the mind of the originator

4. Relearning: forgetting things that were already learned so that knowledge is not preserved

5. Partially done work: partially done software that is not integrated into the rest of the environment. For example, uncoded documentation, unsynchronized code, untested code, undocumented code, or undeployed code

6. Task switching: switching time to get into the flow of the new task. Software development requires deep concentrated thinking and switching between tasks takes a lot of effort (e.g., when people are assigned to work on multiple projects)

7. Defects: rework because product defects. A primary focus should be on mistake proofing the code and making defects unusual

Sedano et al. [124]

1. Building the wrong feature or product: cost of building a feature/product that does not address user or business needs

2. Mismanaging the backlog: cost of duplicating work, expediting lower value user features, or delaying necessary bug fixes

3. Rework: cost of altering delivered work that should have been done correctly but was not

4. Unnecessarily complex solutions: cost of creating a more complicated solution than necessary, a missed opportunity to simplify features, user interface, or code

5. Extraneous cognitive load: costs of unneeded expenditure of mental energy

6. Psychological distress: costs of burdening the team with unhelpful stress

7. Waiting/multitasking: cost of idle time, often hidden by multitasking

8. Knowledge loss: cost of reacquiring information that the team once knew

9. Ineffective communication: cost of incomplete, incorrect, misleading, inefficient, or absent communication

Table 7

Poppendieck and Poppendieck [107] translated the original seven sources of waste in Lean manufacturing [74] into the seven wastes of software development. In their books, they also provide some ways to reduce these wastes. More recently, Sedano et al. [124] provided further insights into waste in software development by empirically identifying sources of waste such as knowledge loss, ineffective communication and psychological distress.

4.2.5 Combining Agile and Lean Software Development in Practice

Principles of Lean software development (see Table 5) are mostly well aligned with the principles and values of the Agile Manifesto. Lean thinking inspired many ideas behind the Agile Manifesto and, therefore, it is not surprising that Agile and Lean share many similarities in the software domain [82,96,125]. Indeed, software companies have traditionally used both in combination. The use of Lean thinking alone is quite uncommon in the software domain [26]. Unlike manufacturing, the transformation toward Agile and Lean in software development has been conducted as a single trip, where the borders between Agile and Lean are not clearly defined. Time and space restrictions, as considered in manufacturing (see Section 3.4), have not been taken into account in the software domain. Wang et al. [64] identified six strategies that the software industry follows to combine Agile and Lean thinking. Those strategies are shown in Table 8 (shorted by popularity).

Table 8

Six Categories of Lean Application in Agile Software Development
StrategyDescription
Using Lean principles to improve Agile processesSelected elements or principles of Lean thinking are used in the context of Agile software development, which is already in place, to improve Agile processes. For example, automating the workflow, using the idea of eliminating waste, or applying Kanban
Using Lean to facilitate Agile adoptionLean principles serve as bases to decide the concrete Agile practices or methods to be used. Lean principles justify the adoption of certain Agile practices/methods
Using Lean to interact with other business areasAgile processes are kept in software development while Lean principles are used to interact with neighboring business units such as delivery units, product management, marketing, and customers
From Agile to Lean software developmentAgile is in place when the company decides to focus on Lean. A comprehensive application of Lean principles changes Agile processes to a situation that, at the end, Lean processes become dominant and Agile practices play a supporting role
Synchronizing Agile and LeanAgile teams and Kanban teams work in parallel and in a synchronized manner to address different development aspects of the same product. For example, Scrum teams take care of large-scale changes while Kanban teams focus on small feature requests and bug fixes
Nonpurposeful combination of Agile and LeanCombination of elements from Agile and Lean with no specific distinction between both paradigms

Based on X. Wang, K. Conboy, O. Cawley, ‘Leagile’ software development: an experience report analysis of the application of lean approaches in agile software development. J. Syst. Software 85(6), 1287–1299, 2012.

In our experience, Lean thinking works well as a means for scaling Agile, due to the unique focus of Lean thinking on the organization as a whole [120,121]. For example, in one of our studies with Ericsson R&D Finland [120], we found that Lean thinking was used to support concrete Agile practices. Ericsson R&D transformed its processes from following basic Agile principles to complementing them with Lean principles. The transformation involved around 400 people. In this way, Lean thinking underpins Agile software development. Moreover, Lean is seemed as a means to achieve a learning organization through continuous improvement. The transformation affected the whole development chain, from the earliest product release phases to maintenance, going way beyond processes and tools and involving a profound change of culture and thinking. Big projects gave room to flexible releases. Agile feature-oriented development, with an end-to-end user story focus, was used to provide flexibility in managing the product and a better ability to serve multiple stakeholders. Development was structured to supports continuous flow. Continuous Integration was a key element in this sense. Testing was done in parallel with development. As a result, the status of the software at all levels became visible and feedback times between traditional test phases were reduced from months to weeks. Seating facilities were also largely modified to support the Lean way of working. Individual offices were gradually given way to team spaces.

We studied the main elements that characterize the combination of Agile and Lean in another example from Elektrobit,k a Finnish provider of wireless embedded systems, in Ref. [121]. In general, we found that Lean principles guided also the implementation of Agile methods. Many elements of Agile methods such as Scrum and XP were already in place (e.g., network of products owners, product backlogs, continuous integration, test automation, self-organized and empowered cross-functional teams, and retrospective meeting). In addition, Lean principles, such as creating a culture of customer value in which everyone cares about providing customer value, seeing-the-whole value stream, providing continuous flow through small batches of working software and creating a learning organization to adapt to business and market changes, guided team level activities. Lean practices, such as Kanban, were also used at implementation level.

Overall, Lean helps improve Agile processes and support well-known management issues, such as shorting release cycles and decreasing time-to-market by using flow, defining key performance indicators based on value, improving collaboration with customers by using pull and avoiding short term thinking by using perfection and continuous improvement [40].

5 Beyond Agile and Lean: Toward Rapid Software Development, Continuous Delivery, and CD

Speed has become increasingly important in current software development. Indeed, it is the key term in the latest advances beyond Agile and Lean software development processes in the form of rapid software development. Rapid software development refers to develop, release, and learn from software in rapid parallel cycles, often as short as hours or days [47,48]. In this context, software is not seen anymore as an item that evolves through releases that are delivered every certain months; rather, software is seen as a continuous evolution of product functionality that is quickly delivered to customers. Value-driven and adaptive real-time business paradigm are key concepts in this context [51]. Value driven because the goal is to create as much value as possible for both, the company and its customers. Adaptive real-time business paradigm because that value is created by activating a continuous—real time—learning capability that allows companies to adapt to business dynamics. In this section, we develop into the importance of speed in current software development processes and describe the concepts of continuous delivery and CD as a means to achieve rapid software development. Particularly, we focus on process elements that are important to achieve this capability.

5.1 Need for Speed

Why does speed matter? The traditional view of software as a static item, which can be bought and owned, is not the current reality of the software industry. Software products and software-intensive systems are increasingly object of a constant transformation. Indeed, customers expect a continuous evolution of product functionality that provides additional value [126]. Speed matters because it provides a competitive advantage to satisfy customers’ needs. Speed is concerned with shortening feedback loops between a company and the users of its products. It allows companies to better understand user's behavior and adapt to business/customer changes faster. The risk of predicting what customers want is decreased by increasing feedback loops between users and companies and, thus, learning (instead of predicting) what customers want. Need-for-speed (N4S) is the name of the research program in which we have conducted part of our research activities during the last few years (http://www.n4s.fi/en/). Executed by the forefront Finnish software companies and research institutions, N4S focused on making software business in real time. Concretely, during the program, we investigated solutions for adopting a real-time experimental business model to provide capability for instant value delivery, based upon deep customer insight. In the rest of the chapter, we reveal our most relevant findings from the program. Particularly, we discuss key process elements that are important to get speed in software development and the concept of Lean start-up as an experimental model to foster innovation.

Coming back to the reasons why speed is important in software development processes, in his recent book Speed, data, and ecosystems: excelling in a software-driven world [127], Bosch reflects on five reasons why speed matters in current software business. According to Bosch,

  1. 1. Speed increases the company's ability to adapt development priorities. Working in short increments (such as sprints) allows companies set-up priorities more often. Obviously, the overall product's direction cannot be changed every increment but priorities in small items such as features can be adapted.
  2. 2. Speed allows accelerating the innovation cycle by a faster iteration through the phases of build-measure-learn (BML). Speed allows companies learn what new ideas would work for their customers faster than the competence. We further develop the concept of BML and the Lean startup movement, in which BML originated, in Section 7.
  3. 3. Speed gives development teams confidence to go into the right direction as it enables believable progress tracking. Team satisfaction increases as team's members realize that they are able to provide customer value on a continuous basis.
  4. 4. Speed allows continuous feedback on the delivery of value. It enables fast user feedback to guide the following development steps. Data collection is fundamental in this phase so that decisions are based on data rather than intuition or subjective opinions.
  5. 5. Speed supports product quality. Faster and more frequent release cycles should not compromise software quality. In fact, although it may seem paradoxical, when properly applied, rapid software development favors quality. In rapid software development coding and testing are done in parallel. Integration and bug fixing are not left to the end of the process, and testing is highly automatized. Overall, speed forces organizations to maintain high quality levels all the time, as new software is continuously delivered to users.

As we described in Section 3.3, speed is one of the four main capabilities of Agility. Speed is embedded in the Agile Manifesto as well. For example, Agile principles, such as “our highest priority is to satisfy the customer through early and continuous delivery of valuable software” and “deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale” make clear reference to speed. The notion of sprints in Agile methods such as Scrum aims also to increase speed in the software development process. Instead of waiting until the end of development, customers can see progress after every sprint. Based on Agile software development principles, rapid software development increases speed to approaches where the step between development and deployment is minimized and code is immediately delivered to production environment for customers to use (and learn from customer's usage of the product). Iterative Agile and Lean software development are extended toward continuous flow of product functionality.

5.2 Continuous Delivery and Continuous Deployment

Continuous delivery and continuous deployment (CD) are at the heart of rapid software development. Intuitively, both relate to produce new fully evaluated and ready-to-deploy software revisions continuously, even many times per day. Humble and Farley [16], in their book Continuous Delivery: Reliable Software Releases through Build, Test, and deployment automation published in 2010, state that continuous delivery provides enterprises with the ability to deliver rapidly, reliably and repeatedly value to customers at low risk with minimal manual overhead. The central concept in Humble and Farley's approach is a deployment pipeline that establishes an automated end-to-end process. Automation is used to ensure that the system works at technical level, executes automated acceptance tests and, lastly, deploys to a production or staging environment. The goal of continuous delivery is to enable the delivery of new software functionality at the touch of a button, using a fully automated process. In the ideal scenario, there are no obstacles to deploying to production; there are no integrations problems, builds can be deployed to users at the push of a button.

There is certain confusion in the use of these terms: continuous delivery and continuous deployment (we refer to the last one as CD). The early scientific literature tended to use both interchangeably, as synonyms [46]. However, there are important differences between them. Humble and Farley [16] describe CD as the automatic deployment of every change to production, while continuous delivery is an organizational capability that ensures that every change can be deployed to production, if it is targeted. However, the organization may choose not to do so, usually due to business reasons. In other words, continuous delivery refers to the organizational capability to keep software always releasable. That is, software is ready to be released to its users at any time but the company decides when it will be released. On the other hand, in CD, software is automatically deployed to production when it is ready. Note that while CD implies continuous delivery, the converse is not true. Fig. 11 graphically illustrates the difference between continuous delivery and CD.

Fig. 11
Fig. 11 Conceptual difference between continuous delivery and continuous deployment.

Humble and Farley argue that although CD enables releasing every good build to users, it does not always make sense. In continuous delivery, any build could potentially be released to users, but it is the business, not IT, who decides about release schedules.

Leading organizations, such as Facebook, Microsoft and IBM have actively moved toward rapid releases [52]. A plethora of evidence related to continuous delivery and deployment exists in companies’ white papers and online blogs, where practitioners have voiced their experiences, expectations and challenges in moving to this direction (e.g., Facebook,l Microsoft,m Google,n Adobe,o and Teslap). Next section develops into the main characteristics that allow companies to increase speed in their software development processes and achieve continuous delivery/deployment.

5.3 Key Elements to Get Speed in Your Software Development Process

In the context of the Need-for-Speed project,q we reviewed the scientific literature on CD and continuous delivery using the SLR method [46]. Our objective was to determine the underlying factors that characterize this phenomenon as they appear in the scientific literature. Next, we describe the most relevant factors that we found in our study.

  1. 1. Fast and frequent releases, with preference given to shorter cycles or even continuous flow (weekly or daily deliveries). Release cycles are accelerated when moving toward rapid software development. This implies that the surrounding areas that enable fast releases are also transformed. For example, planning needs to be a continuous activity as well in order to enable a steady flow of small changes. A tighter integration between planning and execution is needed to ensure alignment between the needs of the business context and software development. The ability to release quickly does not mean that development should be rushed into without a conscious understanding of what is actually being done. The release process needs to be clear, including having a clear release management workflow and delivery workflow.
  2. 2. Flexible product design and architecture. The software architecture will evolve during the product life-cycle and, therefore, needs to be able to adapt to changing conditions. The architecture must be flexible. Still, it has to be robust to allow organizations to invest resources in offensive initiatives (e.g., new functionality, product enhancements, and innovation) rather than defensive efforts (e.g., bug fixes). The architecture and design have to be highly modular and loosely coupled [128130]. Moreover, constantly measuring and monitoring source code and architectural quality is important [130,131]. The literature provides some techniques to manage architecture aspects in rapid software development. For example, rapid architecture tradeoff analysis to accommodate rapid feedback and evaluate design options [131], quantifying architectural dependencies by combining Design Structure Matrix (DSM) and Domain Mapping Matrix (DMM) [132] and identifying and assessing risky source code areas based on diverse metrics [133]. In addition, in order to enable continuous and rapid experimentation (see fourth factor), mechanisms in software architectures for run-time variation of functionality and data collection as well as rollback mechanisms to revert changes are required. The literature offers some solutions to achieve this end. For instance, Rally Software suggests A/B testing with Feature Toggle as a technique to manage and support run-time variability of functionality [134].
  3. 3. Continuous testing and quality assurance. Testing and quality assurance practices have to be performed throughout the whole development process, as new functionality is rolled out, and not just at the end of the development. Transparency on the testing process is important to avoid problems such as duplicated test effort and slow feedback loops [135]. Well-known testing techniques in Agile software development, such as test automation and continuous integration support continuous quality assurance. The concept of technical debt, which is further developed in Section 8, is also important to balance speed and stability. However, besides technical aspects, continuous testing, and quality assurance require also a culture of quality. Developers bear the responsibility for writing good code, perform thorough tests as well as support the operational use of their software [119,136,137]. As systems become larger and more complex, such culture complements test automation and allows quality to be maintained at scale. The principle is that more frequent release cycles should not compromise software quality.
    The latest advances toward managing quality in rapid software development focus on supporting quality-awareness during rapid cycles through continuous monitoring and visualization of product and process quality. For example, our work on the Q-Rapids projectr focuses on a data driven, quality-aware rapid software development framework. In this framework, quality and functional requirements (e.g., user stories or features) are managed together [138]. Thus, quality requirements are incrementally elicited and refined based on data gathered at both development time and runtime. Using data-mining techniques, project, development, runtime, and system usage data is aggregated into quality-related strategic indicators to support decision makers in steering future development cycles. A strategic dashboard aggregates the collected data into strategic indicators related to factors such as time to market, team productivity, customer satisfaction, and overall quality to help decision makers making data-driven, requirements-related decisions in rapid cycles [139].
  4. 4. Rapid and continuous experimentation. In rapid software development, systematic design and execution of small field experiments guides product development and accelerates innovation. Continuous experimentation allows companies to learn customer needs and base business and design decisions on data rather than on stakeholder opinions [140]. For example, Facebook uses A/B (split) testing as an experimental approach to identify user needs [136]. In A/B testing, randomized experiments are conducted over two options (e.g., two similar features) to compare, through statistical hypothesis testing, how end-users perceive each feature [136,141]. Experimental results are continuously linked with product roadmap in order to provide guidance for planning activities [142]. Rapid experiments are at the heart of the BML innovation cycle (see Section 7).
  5. 5. User involvement. The role of users is essential in rapid software development. Everything goes around providing value to users. Thus, users are continuously monitored to learn what will provide value to them. Mechanisms to involve users in the development process and collect user feedback from deliveries as early as possible (even near real-time) are essential in rapid software development. They guide design decisions and innovation. However, techniques need to be nonintrusive so that users are not stressed with continuous feedback requests. Several options can be used in this sense. For instance, similar to Facebook, Rally Software [134] uses also A/B testing with Feature Toggle as a technique to manage and support run-time variability of functionality. Facebook uses a fast upgrade of database systems to deploy experimental software builds on a large scale of machines without degrading the system uptime and availability [143]. Besides involving customers in experiments, customers are also involved in testing activities. Again, strategies applied with such purpose have to be nonintrusive. For example, dark deployment is used to deliver new features or services, which are invisible to customers and have no impact on the running system, to test system quality attributes and examine them under simulated workload in a real production environment [134,136]. Another relevant practice, canary deployment, delivers a new version of the system to a limited user population to test it under real production traffic and use. The new version is then delivered to the whole user population once it reaches a high enough quality level [134,136].
  6. 6. Automation. Computers perform repetitive tasks, people solve problems. In the context of continuous delivery and deployment, the focus is on automating the entire delivery pipeline as much as possible. The goal is that deployments are predictable, routine tasks that can be performed on demand in a matter of seconds or minutes. Continuous integration automates tasks such as compiling code, running unit and acceptance tests, monitoring and validating code coverage, checking compliance with coding standards, static code analysis and automatic code review. The continuous integration practice of Agile software development is extended to release and deploy automation. For example, Facebook [136] has a tool for deployment called Gatekeeper that allows developers to turn features on and off in the code, and to select which user groups see which features. Similarly, Agarwal [144] presents an automation system to integrate configuration management, build, release and testing processes. The system enables migrating changes from one environment to another (e.g., development to production), performing a release with selected content, and upgrading software in a target environment. Humble et al. [145] recommend automating build, testing, and deployment in the early stage of the project and evolving the automation along with the application.
  7. 7. DevOps. DevOps is another key element in continuous delivery and deployment because it allows achieving rapid end-to-end software development. DevOps integrates development and operations. It enables transparency and understanding of the whole development pipeline to overcome corporate constraints that often cause delays in product deliveries (e.g., handover delays and communication gaps). The concept of DevOps is further developed in next section.

6 DevOps

When moving beyond Agile and Lean software development toward CD, the software development process becomes characterized by increasing collaboration of cross-organizational functions and automation, particularly, in software testing, deployment and operations. In this section, we introduce the concept of DevOps, whose core principles center around cross-discipline collaboration, automation and the use of Agile principles between software development and operations. The main goal of DevOps is to improve the delivery speed of high-quality software changes while the system is in operational state.

6.1 The Origins of DevOps

Compared to early years of its inception, the concept of DevOps today is less ambiguous owing to the increased number of scientific studies describing its underlying characteristics and its adoption in software-intensive organizations [146150]. DevOps emerged in 2009 as an approach for implementing CD [151]. For several years, it had remained unclear what the concept entails, despite its popularity in the software industry.

The term “DevOps” is a combination of two words, “Development” and “Operations.” As a concept, DevOps stresses on building an Agile relationship and collaboration between software development and operations, whereby operational requirements are considered early into, and throughout the software development process. The main aim of DevOps is to speed up the delivery of quality software changes more reliably and repeatedly in production environment. DevOps proposes some practices and the use of tools to automate the management of software infrastructures, which, over the years, have become complex, heterogeneous and of large-scale.

Historically, the term DevOps was coined by Patrick Debois when organizing a practitioners’ event called DevOpsDays.s Prior to DevOpsDays, in 2008, Debois gave a presentation at the 2008 Agile conference titled: “Agile infrastructure and operations[152] that focuses on employing Agile principles to infrastructure-related activities and projects, such as upgrading application server that has multiple infrastructural component dependencies. After his presentation, Debois observed a growing interest on the topic among other software practitioners. For instance, few months prior to the DevOpsDays event, two other pioneers of DevOps, John Allspaw and Paul Hammond, shared their experiences of multiple deployments in a presentation titled “10 deploys per day: Dev & ops cooperation at Flickr” at the 2009 Velocity conference. Together with other software practitioners, the pioneers introduced a DevOps movement that today embodies a diverse set of practices and tools crucial for speeding up the delivery process of software changes to end-users.

Much of what is addressed by DevOps movement deals with problems resulting from organizational silos between software development and operations. For many medium and large software-intensive organizations, software development and operations activities are traditionally performed by separate organizations. Typically in such context, software is designed, implemented and tested by software developers and testers, and, upon completion, the developed software is handed over to operations personnel, such as system administrators. Operations personnel then deploy and operate software in production environment. Such a setup is beneficial to facilitate required specialization and prevent mix up of software development and operations tasks in daily work of engineers. However, the separation, exacerbated by poor communication between software development and operations, has been reported to bring several serious problems, including unsatisfactory testing environments and systems being put into production before they are complete [153]. The problems intensified when software developers started to use Agile methods, but without their adoption among operations personnel [154,155]. As a result, conflicting goals of “stability vs. change” began to appear. Operations personnel, being skeptical of the impacts of frequent changes to production environment, tend to seek stability by avoiding frequent system changes to production, which software developers tend to seek with Agile methods. To facilitate effective collaboration between software development and operations, several approaches, ranging from ad-hoc and informal to formal approaches, were suggested [156]. However, more recently DevOps emerged as a solution that focuses on automating the deployment pipeline and extending Agile methods to operations, as visualized in Fig. 12 [146,147]. The deployment pipeline, visualized in Fig. 13, is the path taken by all software changes to production, including changes of software features and configuration parameters. In the deployment pipeline, though it may manifest differently across software-intensive organizations, similar patterns can be observed. A common pattern is that, the software developer performs development tasks on his/her local development environment and may performs some tests before deciding to commit the changes to team's shared development environment, where the changes are made visible to others. Upon commit, software changes are automatically compiled, tested for integration and with successful tests a build is created. The newly created software build is then passed for additional tests such as acceptance tests before being deployed to production environment, where software changes are made visible to end-users. Specific details in the level and efforts needed for test and deployment automation vary across software-intensive organizations, depending on the domain and type of application being developed.

Fig. 12
Fig. 12 DevOps extending Agile collaboration to operations engineers. Adapted from T. Rautonen, DevOps—evolution of developers' role, https://gofore.com/devops-sovelluskehittajan-roolin-evoluutio/ [Online; accessed 3.10.2017].
Fig. 13
Fig. 13 The deployment pipeline.

6.2 DevOps Practices

The adoption of DevOps in software-intensive organizations is not homogenous due to factors such as target objective and starting baseline. DevOps adoption entails a series of organizational and sociotechnical practices to be employed. The organizational practices focus on organizational structures and ways in which an organization deals with the relationships and responsibilities between software development and operations. Meanwhile, the sociotechnical practices focus on engineering practices related to the development of software changes, deployment pipeline and interaction of software developers and operations personnel.

From the organizational perspective, DevOps has four common practices [157,158]:

  1. a. separating development and operation with high collaboration;
  2. b. separating development and operation with a facilitator between the two groups;
  3. c. development team gaining more responsibilities of operations and operations existing in a small team and;
  4. d. no visible operations team.

Among the four practices, the practice of separating software development and operations with high collaboration is most common in large software-intensive organizations [157,158]. The practice of separating software development and operations with a facilitator between them, and assigning more responsibilities to developers are more common in small and medium sized organizations [157,158]. However, regardless of the organization size, the practice of having developers who gain more responsibilities of operations is observed to increasingly becoming common [157,158]. This has huge implications to the working culture and division of responsibilities [136,148,159,160] A complimentary practice consists of establishing of a separate team that acts as a facilitator between the two groups. [148,159,161,162] argue for such a team because it can significantly reduce required efforts and minimize disruptions for development team. Particularly, in large organizations, the established team consists of a small number of members with multidisciplinary background including that of software development and operations. The team is responsible for standardizing deployment mechanisms such as building a deployment pipeline platform, which is to be used by software developers [148,161,162]. An important aspect to notice is that when knowledgeable software developers are given the responsibility to perform operations tasks, they tend to be given access to critical environments [159,160]. Such access allows software developers to provision by themselves different software development environments.

DevOps practices from a sociotechnical perspective focus on automating the deployment pipeline, including automatic management of software infrastructure, which consists of development and production environments. The sociotechnical DevOps practices include technical infrastructure where software development and operations activities take place and its interaction with human agents. Therefore, the deployment pipeline is the technical infrastructure where sociotechnical DevOps practices are observed. In specific, a survey of software practitioners by Cito et al. [157] reports on incorporation of practices in the following areas for DevOps: (1) software deployment and provisioning; (2) software design and implementation; (3) software troubleshooting; and (4) software monitoring and production data usage. Automation practices in the deployment process, which focus on automatic provisioning of environments, are more prominent in cloud-native software [157]. One reason is the progress in virtualization technology, which is made prevalent through cloud computing. Cloud computing provides access to computing resources that, through DevOps tools such as Puppet and Chef, software developers can use to provision and manage environment repeatedly and fast. The tools advocated in DevOps, which are used to automatically provision and manage environments, apply the concept of infrastructure-as-code, which is central to DevOps. The Infrastructure as Code concept entails a practice of using software engineering practices for managing source code such as programming language and version control, to implement and manage scripts used for environment provisioning, configuration management and system deployment [163]. In practice, the infrastructure-as-code concept is facilitated by DevOps tools like Puppet and Chef, which feature a domain-specific language used to write scripts for environment provisioning and software deployment. The benefit of using infrastructure-as-code is that it helps minimize inconsistencies and complexity of software infrastructure, which in turn helps shorten the release cycle time. We further elaborate on two sociotechnical DevOps practices as these were the focus areas in our research.

Automation of deployment process. The automation of deployment process in DevOps involves two main activities. First, an automatic provisioning of development environments, e.g., test, that are similar to the production environment. Second, the application of deployment strategies such as blue/green deployment, rolling upgrade and canary deployment, to deploy software changes to desired environments. The latter is meant to replace a manual process for deploying software and configuring environment as well as to minimize environment inconsistencies with production, as these constitute to common antipatterns in software delivery process and have impacts to the release cycle time of changes [16]. Additionally, a deployment strategy is selected and facilitated by the use of deployment automation tools. Blue/green deployment and rolling upgrade are two commonly used deployment strategies for cloud application [147]. In blue/green deployment, a number of virtual machine (VM) instances, which contain old version of the software, are maintained while in parallel the same number of VM instances, which contain an updated version of the software, are provisioned and only when they are ready, traffic is routed to the new instances [147]. In rolling upgrade deployment strategy, a small number of VM with new software version are upgraded directly to environment containing VM instances with old version and in parallel a number of old VM instances are switched off [147]. However, each strategy may also pose some reliability issues, including the amount of time needed to prepare and place a new VM to the desired environment [147]. Recently, microservice architecture has been found beneficial when considering deployment automation. Microservice architecture loosely decouples the software into collaborating services whereby each service implements a set of related functions that can be easily developed and frequently deployed, using technology such as Docker, independent of other services [164]. Despite its many benefits, microservice architecture still presents several challenges that need to be addressed in research, including complexities introduced in managing and monitoring system comprised of many different service types [165].

Monitoring. In DevOps, monitoring becomes important not just for operations personnel but also software developers. For instance at Facebook, developers in a team are responsible for monitoring and teams schedule. They rotate among themselves an “oncall” person who receives alerts of urgent issues through automated phone calls but also shields others to focus on development work [166]. Software monitoring tools, such as New Relic, allow developers to install monitoring agents to the software in order to gather real-time software and server monitoring data and metrics specified as relevant by the development team [147]. Insights from monitoring data can be used to inform and guide developers identify software failures and performance improvements as well as gain feedback from users based on software usage among other things [147]. Recent research contributions on this aspect have focused on finding effective ways to correlate runtime data to software changes during development time for such purpose, as to automate troubleshooting activity among others [167]. This is contrast to the traditional approach whereby developers and operators employ manual steps to diagnosis faults by navigating and inspecting relevant information from log statements, software metrics, and using mental models [167]. For this purpose, Cito et al. [167] have proposed an analytical approach to established explicit links that carry semantic relations between related fragments that can be individual logs, metrics, or excerpts of source code.

Finally, it is relevant to mention that DevOps practices are championed and well established in software-intensive organizations that are involved in cloud and web development [136,148,157,162]. DevOps practices are increasingly being evaluated for their feasibility in other contexts, such as embedded systems, particularly because several factors make the adoption of DevOps in such contexts challenging, e.g., unavailability of technology to enable flexible and automatic system redeployment repeatedly [159,168,169].

6.3 The Benefits and Challenges of DevOps

Benefits and challenges of DevOps have been reported in empirical studies. For example, among the most popular benefits are a reduction in release cycle time; improved quality and eased communication between software development and operations [148,161,162]. However, successful adoption of DevOps requires a mindset change, management support and shared responsibility among all stakeholders involved in the delivery of software. Support from senior management strengthens the value of and the adoption of DevOps across an organization [170]. However, the organization may encounter several challenges during the adoption of DevOps, including the need to rearchitect the software to better support DevOps in deployability, testability and loggibility [171]. Microservice architecture is one architectural design having such benefits as scalability, flexibility, and portability, and is in support of DevOps [164]. Furthermore, since in DevOps, the development team is given the responsibility to develop and operate the system that they develop, this requires the team to be equipped with necessary skills, thus, increasing the learning curve among development team members [160]. Alternatively, for some processes, their inner working may be abstracted through automation achieved in the deployment pipeline, thus, demanding a low learning curve from development team members.

7 The Lean Startup Movement

This section focuses on a movement that has acquired particular relevance during last years, the Lean startup movement. Indeed, applying the principles of Lean thinking has been broadened from the areas described in the earlier sections. One new area is the emergence and early stages of new enterprises, startups. Lean thinking is widely applicable where something new is built—manufacturing, software development, or startups. In this section, applying Lean thinking on software startups is described.

7.1 Origin and Key Concepts

In 2011, Ries [172] applied the principles of Lean thinking into startup companies in his book “The Lean startup: How today's entrepreneurs use continuous innovation to create radically successful businesses.” In the book, he focused on the question how to tune a successful business case from a product idea. In his thinking, leanness was crystallized by defining waste as a product without market potential: the biggest waste is to create a product that nobody is willing to buy. Ries presented how to work in a Lean way and avoid waste by introducing a process of early learning. The key characteristics of that process are (1) earliness, (2) close customer cooperation, (3) rapid progress, (4) measurement of the value, (5) learning, (6) corrective actions, and (7) iteration.

  •  Earliness refers to the need to follow Lean thinking from the very beginning of a startup. In the opposite case, the course of the company may already be fixed toward a wrong direction, and the efforts done turn out to be waste.
  •  Close customer cooperation refers to the principle that the customer(s) need to be linked to the startup's doings as early and closely as possible. The measurement of the value of the product is fully based on the customers’ opinions. A real customer is the source of the feedback needed when measuring the business potential of the innovation. Ries’ book classifies customers by defining different groups of customers being relevant for a startup in different phases of its evolution path. The customer groups are defined mostly in the context of American business environment and products aimed to mass markets. In a practical situation, however, close customer relationship is easier to create in case of products aimed to specific customers instead of mass markets [173]. In any case, early and close customer cooperation is very beneficial for a startup figuring out its first product. Reasonable amount of effort should be put in finding potential customers willing to cooperate with a startup—willingness to work with a startup having only a vague idea of a product and a MVP (minimum viable product), may be low among the potential customers.
  •  Rapid progress refers to a startup's need to validate the value of the product idea as rapidly as possible. Rapid progress along with earliness is a key means to avoid waste in Lean startup thinking, but the need to speed up the product development is a common trend in the software industry, as discussed earlier in Section 5. The need for a rapid progress and close customer cooperation are the drivers behind one of the key concepts of Ries’ Lean startup, building the MVP.
  •  Measurement of the value of the business case is done by the customer on the basis of that MVP—and only in that way. An MVP should be at the same time easy and fast to create, but functional enough to be a valid basis for an evaluation by the targeted customer(s). What the MVP is at the end, is left fairly open. Ries’ book addresses MVPs by introducing examples. That is understandable when aiming at covering a big variety of startup with the same principles, but in a practical situation the MVP must be well figured out to fit to the innovation, to the measurements purposes, and to the overall context.
  •  Learning refers to the experiences and opinions collected from the customer(s) concerning the value of the product idea. How the learning is gained, is covered in Ries’ original book by defining such terms as validated learning and actionable metrics. Validated learning is a result of validated experiments with the latest version of the MVP and the real customer(s). As the experiments are the source of validated learning, a key issue, besides the definition of the MVP, is careful planning of the experiments in which the value of the MVP is measured.
  •  Corrective actions refer to the conclusions drawn from learning. The corrective actions are crystallized in Lean startup thinking into two clear alternatives, changing the idea or continuing its development, called in Ries’ terminology pivoting or persevering. The criteria for pivoting or persevering are summarized by Ries as so-called actionable metrics as an opposite of vanity metrics. The actionable metrics should be accessible and audible. The point in putting such attributes as actionable and vanity on the metrics used for decision making is to highlight courage of a startup's key persons to explore the innovation in question in a critical and objective way. The positive feelings or bride of the innovator(s) should not lead to development of products that turn out to be waste. Measuring and learning in Lean startup thinking can be seen as a means to identify difficulties and find reasons not to persevere but pivot, as studied in Ref. [174].
  •  Iteration refers to the principle that the whole process of building MVP(s), measuring, and learning, has to be repeated until the aimed product gains the functionality and characteristics that guarantee customer acceptance. This principle represents the old idea of continuous and incremental development, applied in Lean startup thinking on the customer-centric validation of an innovation. The same continuous and incremental way of doing is proposed also for the growth stage of a startup, when the first product(s) has successfully been launched to the markets and the startup is seeking growth. A broader view on the practices of continuous and incremental development was presented in earlier sections.

Ries encapsulates the earlier characteristics in a simple, cyclic process containing three steps: (1) build, (2) measure, and (3) learn, BML cycle (see Fig. 14). After the three steps, the startup evaluates the results of the steps and makes a decision whether to keep the idea, persevere, or to modify it, pivot. In the former case the development of the idea to a product continues, while in the latter case the idea is modified and the build–measure–learn steps are repeated. Following this process should prevent a startup wasting its resources in developing products without market demand.

Fig. 14
Fig. 14 The BML cycle.

7.2 Derivatives and Further Developments

Ries’ Lean startup thinking was rapidly accepted not only by practitioners but also by the academia too. A set of variants based on similar thinking were presented. Stainert and Leifer presented fairly similar ideas in their hunter–gatherer model [175], which was further tuned by Nguyen-Duc et al. [176]. While the hunter–gatherer model was at a fairly high and philosophical level, Bosch et al. [177] and Björk et al. [178] presented in 2013 a development model called Early Stage Software Startup Development Model (ESSSDM), claimed to be an operationalization of Lean thinking on software startups (see Fig. 15).

Fig. 15
Fig. 15 The ESSSDM model.

The ESSSDM model was developed to bring the ideas of Ries closer to the practical work in software startups by addressing such areas as managing multiple product ideas in a product portfolio, validation criteria of the product ideas, and techniques to use for validating them. The ESSSDM model, with its focus on product portfolios, is not principally different from the original Lean startup thinking. A product portfolio including alternative product ideas, means validating several ideas in parallel or in series. However, a smaller startup may not have resources for parallel evaluation of several product ideas, as strongly recommended in the ESSSDM model. An idea portfolio may also be difficult from the focus and motivation perspectives: founding a company and taking the responsibility and risks tied to it requires courage [179]. A strong belief on a single idea may be a better catalyzer for the needed courage than a set of ideas, which possibly are not as credible.

7.3 Lean Startup and Other Startup Research

Starting fairly early, Lean startup thinking has been combined with other research paths on innovation and entrepreneurship. Müller and Thoring studied in 2012 differences and similarities of Lean startup model and design thinking [180]. The comparison highlighted, in an interesting way, certain characteristics of Lean startup thinking: (1) it assumes that a product vision exists, e.g., a Lean startup is driven by a product vision of the startup founders, (2) it is customer centered instead of user centered, and (3) its focus is on the business model for a product idea—not on user desirability or technical feasibility of the product.

The Lean startup thinking focuses on creating the business case and on validating product ideas from the business perspective. The customer acceptance of the idea is defined as the criterion of the waste. Practitioners having experience in product development know that the business feasibility is only one dimension of the whole. The technical feasibility and user desirability must be evaluated, too. Putting too much effort on an idea that is too expensive or too difficult to realize with existing technology, or difficult to use, is waste even when the idea has a real market potential [173]. Technical feasibility and user desirability are broad areas where the weight of different criteria varies according to the context and purpose of the product: a data communications product must provide the user with speed and reliability, an interactive product with desirable user experience, understandability and easiness of use, and a banking system with data security.

An example of a broader focus validation of the idea is the work of Hokkanen et al., combining the lean startup principles with the user experience of the targeted product [181183]. Hokkanen's work complements the Lean startup from the user-centered view by highlighting the importance of a good user experience in an early stage—as a part of the MVP. According to her, an MVP must be mature enough and its user experience desirable enough to help selling the idea and collecting meaningful feedback from the customer(s). Following the original Lean startup thinking, she recommends early building of communication channels to real users, implementing usability tests before measuring, and applying planned methods to collect the feedback necessary for correct learning.

7.4 Summary of the Lean Startup Movement

As mentioned earlier, Lean startup thinking is vision driven—there is an innovation, the value of which has to be measured. The startup is founded to realize the innovation to a product. Research [173] has shown that many times it really is the case. A typical story of a startup is that a single person gets an idea that he/she believes in, gathers possibly a team, preferring old friends and other trusted people, and founds a company [179]. Sometimes, founding is preceded by a long period of deliberation before the final decision for a startup is made. Of course, there are also different cases, where the need for a certain product or service is clear and the business case is easier to figure out. That does not, however, decrease the value of the basic idea of the Lean startup thinking, better to evaluate than to develop waste.

The works by Bosch et al. [177], Björk et al. [178], Müller and Thoring [180], and Hokkanen et al. [181183] are examples of how the Lean startup thinking, defined at a high abstraction level, and trying to address a big variety of different startups, needs additional stuff around the principles. However, the principles, validating before progressing, iterating, and improving continuously, seeking learning from real customers, being critical not vain, and avoiding waste, are good guidelines for any product development. The principles are broadly applicable also outside the original business-related focus, and their value is intuitively understandable. The basic message is: keep on learning—do not believe that you know the value of your idea without measuring it.

8 Miscellany

Before closing this chapter, we want to discuss two areas that have been the focus of our recent research in Agile and Lean software development processes, and we believe are useful for the readers of this chapter. On the one hand, we focus on software metrics that are usually employed in the context of Agile and Lean software development. These metrics are important not only for understanding the situation of the product under development but also for guiding the transformation toward Agile and Lean. On the other hand, we discuss on the topic of technical debt, which has become popular in the context of Agile software development.

8.1 Metrics in Agile and Lean Software Development

Our SLR about the use of software metrics in Agile software development [68] revealed both similarities and differences between Agile and traditional software development. The top goals of both development approaches are similar, that is, to improve productivity and quality. The majority of the metrics are in one way or the other tied to those goals. However, we found value-based differences in means how those goals are to be reached. Traditional software development utilizes software metrics from the viewpoint of scientific management by Taylor, i.e., controlling software development from outside. The traditional measurement programs use ideas stemming from industrial product lines and manufacturing industry such as Six Sigma. Traditional metrics programs were often large-scale corporate initiatives, which emphasized following a pregiven plan. Agile principles, such as empowering the team, focusing on rapid customer value, simplicity, and willingness to embrace changes, form a contrast to the traditional measurement programs.

Fig. 16 shows the top six metrics used in Agile software development. We selected the top metrics based on the number of occurrences and the perceived importance of each metric in the sources (for more details, see Ref. [68]).

Fig. 16
Fig. 16 Top six metrics used in Agile software development.

Velocity was found as the most important software metric in Agile development. Velocity indicates how fast is the team working or how much a team can achieve in a certain time-boxed period, e.g., in a sprint of 4 weeks. Velocity is used in sprint planning. Velocity is also used to determine different scopes for the sprint such as having a minimum scope of features that can be delivered for sure and having a stretch goal for the iteration. Having two different scopes can help in customer communication as the minimum can be promised and the maximum indicates all the changes that may happen during a sprint. Velocity enables finding bottlenecks in a software process where progress is slower than desired. Making process improvement or automation to these parts results in an excellent cost benefit ratio for the improvement. However, our study also found cases where attempts to maintain velocity led to cutting corners and lowered the product quality.

Effort estimate, which indicates the anticipated work cost of a particular feature or story, was found as the second most important metric. Effort estimates are important in feature prioritizations as all features with equal value can be sorted by the effort estimates to provide a sprint scope with the highest possible value. However, No Estimates movement started by Ron Jefferies, approximately says that making effort estimates can be counterproductive as the accuracy of the estimates is too poor to make the effort spent in estimation worthwhile. Nevertheless, effort estimates were often used and found important in the sources of our literature review.

Customer satisfaction was found as the third ranked metric, although it could be claimed that it should be the most important due to the customer centric nature of Agile software development. Yet, it was less frequently mentioned in our sources than Velocity or Effort estimate. Customer satisfaction is a metric with many possible operationalizations. We found several measures of customer satisfaction such as the number of change requests by the customer, net promoter score (the probability that a customer would recommend the product or producer to another potential customers), Kano analysis (quality model that distinguishes between must-be, one-dimensional, attractive, indifference, and negative quality), and postrelease defects found by the customers. We found that most successful projects measured customer satisfaction more often than other projects.

We find that the core books giving advice on Agile software development are missing some core software engineering metrics such as the defect count. In our review of industrial empirical studies, it was ranked in the fourth place indicating its importance in Agile software development. Defect count can have many uses. It may be a measure of software testing as the number of defects found per time unit in testing measures in-house software quality. Furthermore, the defects experienced in customer usage can be a measure of the software quality in the wild.

Technical debt, which is covered in more detail next, was among the top metrics used by Agile teams. Technical debt hinderers day-to-day software development and reduces velocity. In one company, a technical debt board was used to make technical debt visible in order to ensure that enough resources and motivation were given to removing the debt. The board was also used to make plans how to remove technical debt. The board made sure that developers picked the highest priority technical debt items instead of cherry picking lower priority but more interesting tasks.

Build status is an important measure in Agile software development. It is an indication of the agile principle working code. If builds are not passing, this indicates that no progress according to Agile principles has been made. Build status often encompasses quality gates in addition to the simple assertion that the software has been successfully built. It can include the results of automated unit testing. Frequently, successful build requires that certain end-to-end automated acceptance test is passed. When working on software with very high reliability requirements, even violations from static code analysis tools, such as Findbugs or Coverity, may be treated as build breakers.

We also studied the purposes of using metrics in Agile software development, which are depicted in Fig. 17.

Fig. 17
Fig. 17 Reasons for using metrics in Agile teams.

We found that over 70% sources used metrics for planning and progress tracking of sprints or projects. Understanding and improving quality were found as a reason for using metrics in roughly one-third of the studies. Fixing process problems inspired roughly half of the studies in using metrics. Finally, motivating people was found as the reason for using metrics in 25% of the studies, for example displaying a technical debt board can motivate people to reduce technical debt. The percentage does not add up to 100% because many studies had multiple motivations in using metrics.

8.2 Technical Debt in Agile and Lean Software Development

The Agile Manifesto highlights “continuous attention to technical excellence and good design enhances agility.” Similarly, XP has “coding standards” as one of its key practices. Still, the scientific literature highlights that Agile software development appears to be more prone to technical debt compared to traditional software development [184]. This section develops into the concept of technical debt and describes different strategies that can be applied to manage it in Agile software development.

8.2.1 What Is Technical Debt?

Technical debt is a metaphor used in software development to communicate the consequences of poor software development practices to nontechnical stakeholders. Ward Cunningham first introduced it in 1992 [185]. The concept works like a financial debt that needs to be paid back with some extra interest but applied to the software development process. Technical debt happens, for example, when developers focus only on delivering new functionality at the end of each sprint and lack time in refactoring, documentation, or other aspects of the project infrastructure. If these aspects are not considered in the sprint backlog and ignored, the software will end up growing less understandable, more complex, and harder to modify. We can view this system degradation as a debt that developers owe to the system [186]. Cunningham [185] explained that a little debt can speed up software development in the short run. However, this benefit is achieved at the cost of extrawork in the future, as if paying interest on the debt. The debt increases when it is not promptly repaid. Time spent on not-quite-right code counts as interest on that debt.

Technical debt has been usually associated to poorly written code. For example, code that is unnecessarily complex, poorly organized or includes unnecessary duplications will require future work (e.g., refactoring). However, as time passes by, technical debt has evolved to embrace different aspects of software development that range from architectural deterioration and design problems to testing, documentation, people, and deployment issues [187]. Another example of technical debt in the area of testing is when tests scripts are not properly maintained, leading to additional manual testing. In general, technical debt can be manifested in any aspect of the software development process that relates to internal system qualities, primarily maintainability and evolvability [188].

8.2.2 Technical Debt: Debt or Investment?

Technical debt seems to be, therefore, something negative, which often results in undesirable consequences such as system degradation, increased maintenance costs, or decreased productivity. However, technical debt is not only about technical shortcuts because pressures of the moment or accumulation of unfinished work. It can also be used constructively as a framework to reflect about different alternatives and make informed decisions about what to pass up [186]. As everything in life, there are always trade-offs in software development, which, unfortunately, is not a world of infinite resources. Software companies need to decide where to invest their finite resources to get maximum value for their business and their customers. Not doing something good today will allow doing something else that is also good and, at the end, will pay back better in the future [186]. For example, we may decide to sacrifice certain quality level in the next release because we prefer to include a feature that will provide a competitive advantage. Getting to the market to catch an important business opportunity may influence the decision to take on technical debt. Overall, technical debt is seen as a balance between software quality and business reality [189].

According to Fowler [190], technical debt can be classified in two groups: reckless and prudent debt. Reckless debt is the “bad” or unhealthy debt; the debt that is considered negative. It is incurred as the result of a shortage, sloppy programming, or poor development. It can be inadvertent, for example, because of poor technical knowledge, or deliberated, if the debt is a result of sloppy or careless programming. However, there is also a healthy or “good” debt, the prudent debt. Prudent technical debt is proactively incurred in order to get some benefit. For example, achieving a quicker release. In this situation, the team deliberately decides to take on technical debt and has plans to deal with consequences. Prudent debt is, therefore, related to intentional decisions to trade-off competing investments during development. Fowler argues that prudent debt could be also inadvertent, in the sense that software development is usually a learning activity. Software engineers may learn different alternatives during the development process that would have been better options from a technical point of view.

Overall, technical debt effects are not always negative. The problem with technical debt comes when it is not properly managed or gets uncontrolled. The key is to make informed decisions and be prepared for the consequences. When it is properly managed and controlled, technical debt can be utilized as an Agile strategy to gain business opportunities and be paid back later. Next section describes different strategies to manage technical debt in an Agile context.

8.2.3 Strategies to Manage Technical Debt in Agile Software Development

Besides the emphasis on quick delivery, which is frequently identified as one of the most important causes for accumulating technical debt in Agile [69], other aspects can also generate technical debt in Agile. For example (1) architecture and design issues including inflexibility in architecture, poor design, and suboptimal up-front architecture and design solutions, (2) inadequate test coverage and issues with test automation, (3) lack of understanding of the system being built, (4) oversight in estimations of sprints and, in general, unrealistic estimations, and (5) inadequate refactoring [69]. The consequences are quite straightforward, system quality degradation, which increases maintenance costs and reduces productivity, market loss/hurt business relationships, and even complete redesign or rework of a system [69]. Therefore, it is important to learn strategies that help manage technical debt in Agile and use it in a healthy way. Our SLR on technical debt in Agile software development found the following solutions to manage technical debt and balance rapid delivery and quality development [69]:

  •  Refactoring is the most common technique applied to reduce technical debt in Agile software development. Refactoring consists in restructuring the code base or system architecture without altering the external behavior of the system. The key idea is to redistribute classes, variables, and methods across the class hierarchy to simplify the underlying logic of the software and eliminate unnecessary complexity. Refactoring should be a continuous activity in Agile and rapid software development. Nowadays, many development environments include automated support for refactoring, at least for mechanical aspects of refactoring. A comprehensible overview of software refactoring, including an illustrative example on how it is conducted in practice, can be found in Ref. [191].
  •  Measuring/visualizing technical debt and communicating its consequences. Measuring technical debt is fundamental to make it visible. Nonvisible technical debt goes usually unnoticed, being a clear risk for the development (unhealthy debt). As presented earlier, technical debt is among the top metrics used by Agile teams. Unmeasured technical debt makes it hard for development teams to make a strong case for business stakeholders to invest in technical debt fixes. Overall, technical debt should be transparent. Design decisions related to technical debt and architecture dependences should be clear for everyone. The literature suggests different strategies to monitor technical debt and make it visible, such as keeping track of a list of architectural and design decisions in a backlog [130,192], using technical debt visualization boards [193196], visualizing technical debt using the “code Christmas tree” [197], pie and bar charts to visualize and manage technical debt [198], and technical visualization tools like Ndpend to detect code violations [199].
  •  Planning for technical debt and prioritizing technical debt when needed. Using technical debt proactively means that we know that we are taking technical debt and we plan how to deal with the consequences generated by our decision. Advance planning for technical debt involves assigning preemptive efforts to address it when needed by allocating resources in advance for tasks such as code cleanup, removal of design shortcuts, and refactoring. Dedicated teams, which are particularly responsible for technical debt reduction, can also be allocated when needed. Measuring is essential here in order to objectively determinate “when needed.” Optimistic estimations by Agile teams lead to technical debt. Technical debt items should be explicitly included in the product backlog so resources are explicitly allocated for these tasks. Moreover, increasing teams’ estimation ability leads to reduce reckless technical debt.
  •  The Definition of Done (DoD) supports also controlling technical debt in Agile. Employing a common DoD in different levels, such as story, sprint, and release, helps achieve a common understanding on technical debt and manage it strategically. For example, definition of the right-code can be include in the DoD. The DoD can be also used during sprint planning meetings and sprint reviews to reveal technical debt issues and plan how to deal with consequences. Overall, the DoD helps with establishing an acceptable level of technical debt.
  •  Automation, and particularly, test automation helps also reduce technical debt and increase test coverage.

A more detailed analysis of the scientific literature on technical debt in Agile software development is reported in our SLR on the topic [69].

9 Conclusions and Future Directions

Agile software development is well established in software industry. In this chapter, we have gone through the main elements of Agile and Lean software development processes, from the very fundamental principles and values that guide these approaches to the concrete methods and practices existing in the literature to implement the fundamentals in practice. Particularly, we have discussed the main characteristics of “agility” and “leanness” as they emerged in the manufacturing domain (Section 3). The five original principles of Lean thinking [71] are: (1) value, understood from a customer's perspective; (2) value stream, as the stream of production activities in which every activity delivers customer value; (3) flow, which provides continuity to the value stream; (4) pull, to make sure that production is guided only by demand; and (5) perfection, the pillar for continuous improvement. Agility, on the other hand, is characterized by four capabilities [85]: (1) responsiveness, to identify and respond fast to changes; (2) competence, to have all capabilities to achieve productivity, efficiency, and effectiveness; (3) flexibility, to make changes in products and achieve different objectives using similar facilities; and (4) speed, to reduce time-to-market.

The closeness of ideas between both paradigms has favored its combination (known as leagility). Although this combination was taken with caution in manufacturing—as it is described in Section 3—the journey of Agile and Lean in the software domain has followed a quite different path; a path characterized by a symbiosis between Agile and Lean in which limits are not clearly established. The foundations of Agile software development processes were established in the Agile Manifesto through 4 values and 12 principles. These foundations created the basis for Agile software development methods that implement those values and principles in practice (e.g., Scrum and XP). Agile software development emerged as the best possible solution to face the challenges posed by a turbulent and dynamic software market. However, although Agile processes provided important benefits at development team level, they were not enough to operate a whole organization. Thus, Lean software development emerged as a way of scaling Agile and, in general, complementing Agile software development processes. More recently—as discussed in Section 5—Agile and Lean software development processes have been extended to continuous delivery and deployment. The idea is that software development becomes a continuous process that is able to dynamically adapt to business changes and discover new business opportunities.

If we had to highlight two essential characteristics of current software processes, those would be speed and learning. Speed is essential because it does not only allow obtaining a competitive advantage, but also it favors short feedback loops. Short feedback loops are the basis for the second essential characteristic of current software processes, learning, and more concretely, validated learning. Learning is important because it is the key element that allows software companies to adapt to business changes. The goal is to learn (instead of predicting) where value is through practices such as continuous experimentation, which guide product development and accelerate innovation. DevOps (discussed in Section 6) and Lean start-up (discussed in Section 7) are key elements to achieve speed and validated learning.

How do we see the future of software development processes and, particularly, Agile software development? As the software development industry evolves, versatile, and flexible software development processes are becoming essential to cope with current market and customers’ demands. Old-fashioned software development processes, such as the waterfall model, worked well under the software industry conditions where they were developed. However, they are too complex to surface innovation in current software markets, as they are not flexible and fast enough for many software companies. Thus, Agile is turning into a mainstream methodology for software development. Although, it was initially taken with care by many software sectors, in which Agile was seen just as the latest fad that, as any fad, would have a short life, it is quite clear now that Agile won the recognition battle and it is here to stay. Nowadays, Agile is not only used by pioneers in innovative projects, but also it has spread across a broad range of industries. This is particularly true in web, mobile applications, or services domains, where applications are frequently developed in weeks or months, rather than years.

Years ago, people were not as exposed to software products as they are now. Nowadays, we are using software every single day of our lives. In our houses, our jobs, hospitals, schools, … Smartphones, watches, fridges, and cars are obvious devices containing software. However, smart microprocessors are embedded in almost every device that you can imagine: thermostats, garage doors, front doorbells, … Did you know that smart microprocessors are starting to be installed in walls and foundations of houses to monitor stress fractures, watering, and weakening in the structure of buildings? It is clear that the software development industry is growing fast. Many innovations are emerging and will continue to emerge. For example, we think that trends like the IoT will shape the software development processes of more traditional industries in the near future. The IoT is much more than hardware and connectivity. Software is needed to run and connect all these smart devices collecting and exchanging data, and connecting every aspect of our lives. Moreover, with IoT there are increasing demands in reliability and in particular to security. When software controls physical world products, security holes must be quickly and continuously patched. Agile, Lean, and rapid software development will play a key role in such development.

Both the software development industry and the research community are very active in shaping and extending Agile and Lean to processes such as rapid software development. For example, continuous processes are under constant exploration to identify ways to safely get speed in software development. Ways to activate a continuous—real time—learning capability to allow companies to adapt to business dynamics, such as continuous experimentation, are also increasingly explored. Software processes must be value driven. Better understanding on the concept of value will provide the means to improve value-based decision making as well.

References

[1] Wasserman T. In: Low ceremony processes for short lifecycle projects. Keynote at the 2013 International Conference on Software and System Process; ACM; 2013.

[2] Münch J., Armbrust O., Kowalczyk M., Soto M. Software Process Definition and Management. Springer; 2012.

[3] Royce W.W. In: Managing the development of large software systems. Proceedings of IEEE WESCON, Los Angeles, CA, USA; 1970:1–9.

[4] Oivo M., Birk A., Komi-Sirviö S., Kuvaja P., Solingen R.V. In: Establishing product process dependencies in SPI. Proceedings of European Software Engineering Process Group Conference; 1999.

[5] Boehm B. A spiral model of software development and enhancement. Computer. 1988;21(5):61–72.

[6] ISO/IEC 122007:2008(E). Systems and Software Engineering—Systems Life Cycle Processes. second ed. Geneva, Switzerland: ISO/IEC; 2008.

[7] ISO/IEC 90003:2004(E). Software Engineering—Guidelines for the Application of ISO 9001:2000 to Computer Software. 2004 ISO/IEC 90093:2004(E).

[8] CMMI. Capability Maturity Model Integration 1.3. Carnegie Mellon Software Engineering Institute; 2010. http://www.sei.cmu.edu/cmmi/.

[9] ISO/IEC 15504-1:1998. Information Technology—Process assessment—Part 1: Concepts and Introductory Guide. 1998 WG10N222.

[10] Kuvaja P., Bicego A. BOOTSTRAP—a European assessment methodology. Softw. Qual. J. 1994;3(3):117–127.

[11] Beck K., Beedle M., van Bennekum A., Cockburn A., Cunningha W., Fowler M., Grenning J., Highsmith J., Hunt A., Jeffries R., Kern J., Marick B., Martin R.C., Mellor S., Schwaber K., Sutherland J., Thomas D. Manifesto for Agile Software Development. http://www.agilemanifesto.org/. 2001.

[12] Basili V.R., Turner A.J. Iterative enhancement: a practical technique for software development. IEEE Trans. Softw. Eng. 1975;4(4):390–396.

[13] Agresti W.W. New Paradigms for Software Development: Tutorial. IEEE Computer Society Press; 1986.

[14] Jacobson I., Booch G., Rumbaugh J.E. The Unified Software Development Process—The Complete Guide to the Unified Process from the Original Designers. Addison-Wesley; 1999.

[15] Poppendieck M., Poppendieck T. Lean Software Development: An Agile Toolkit. Addison-Wesley Professional; 2003.

[16] Humble J., Farley D. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation. Pearson Education; 2010.

[17] Sommerville I. Software Engineering. ninth ed. Addison-Wesley; 2010.

[18] Osterweil L. In: Software Processes are Software Too. Proceedings of the 9th International Conference on Software Engineering; IEEE Computer Society Press; 1987:2–13.

[19] Castells M. The Rise of the Network Society: The Information Age: Economy, Society, and Culture. Wiley-Blackwell; 2011.

[20] Eisenhardt K.M., Martin J.A. Dynamic capabilities: what are they?. Strateg. Manag. J. 2000;21(10 − 11):1105–1121.

[21] Abrahamsson P., Salo O., Ronkainen J., Warsta J. Agile Software Development Methods: Review and Analysis. VTT Publications; 2002.478.

[22] Conboy K., Coyle S., Wang X., Pikkarainen M. People over process: key challenges in agile development. IEEE Softw. 2011;28(4):48–57.

[23] Cockburn A., Highsmith J. Agile software development, the people factor. Computer. 2001;34(11):131–133.

[24] Kruchten P. In: A plea for lean software process models. Proceedings of the 2011 International Conference on Software and Systems Process; ACM; 2011:235–236.

[25] VersionOne, Inc. 10th Annual “State of Agile Development” Survey. https://versionone.com/pdf/VersionOne-10th-Annual-State-of-Agile-Report.pdf. 2016.

[26] Rodríguez P., Markkula J., Oivo M., Turula K. In: Survey on agile and lean usage in Finnish software industry. 2012 ACM-IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM); IEEE; 2012:139–148.

[27] Rakitin S. Manifesto elicits cynicism. IEEE Comput. 2001;34(12):4.

[28] Boehm B. Get ready for agile methods, with care. Computer. 2002;35(1):64–69.

[29] Beck K., Boehm B. Agility through discipline: a debate. Computer. 2003;36(6):44–46.

[30] Rosenberg D., Stephens M. Extreme Programming Refactored: The Case Against XP. Apress; 2003.

[31] Larman C., Vodde B. Scaling Lean & Agile Development: Thinking and Organisational Tools for Large-Scale Scrum. Addison-Wesley Professional; 2009.

[32] Vilkki K. When agile is not enough. In: Lean Enterprise Software and Systems. Springer; 2010:44–47.

[33] Laanti M. Agile methods in large-scale software development organisations. In: Applicability and Model for Adoption. University of Oulu; 2012 Doctoral thesis.

[34] Dybå T., Dingsøyr T. Empirical studies of agile software development: a systematic review. Inf. Softw. Technol. 2008;50(9):833–859.

[35] Schwaber K., Beedle M. Agile Software Development with Scrum. Upper Saddle River: Prentice Hall; 2002.

[36] Beck K., Andres C. Extreme Programming Explained: Embrace Change. Addison-Wesley Professional; 2004.

[37] Turk D., France R., Rumpe B. In: Limitations of agile software processes. Third International Conference on eXtreme Programming and Agile Processes in Software Engineering (XP 2002); 2002:43–46.

[38] Abrahamsson P., Conboy K., Wang X. ‘Lots done, more to do’: the current state of agile systems development research. Eur. J. Inf. Syst. 2009;18(4):281–284.

[39] Maples C. In: Enterprise agile transformation: the two-year wall. Agile Conference, 2009. AGILE'09; IEEE; 2009:90–95.

[40] Maglyas A., Nikula U., Smolander K. Lean solutions to software product management problems. IEEE Softw. 2012;29(5):40–46.

[41] Womack J.P., Jones D.T., Roos D. The Machine that Changed the World: The Story of Lean Production: How Japan's Secret Weapon in the Global Auto Wars Will Revolutionize Western Industry. New York, NY: Rawson Associates; 1990.

[42] Bremner B., Dawson C., Kerwin K., Palmeri C., Magnusson P. Can anything stop Toyota?. Bus. Week. 2003;117.

[43] Cusumano M.A. Reflections on the Toyota debacle. Commun. ACM. 2011;54(1):33–35.

[44] Tokatli N. Global sourcing: insights from the global clothing industry—the case of Zara, a fast fashion retailer. J. Econ. Geogr. 2008;8(1):21–38.

[45] de Souza L.B. Trends and approaches in lean healthcare. Leadersh. Health Serv. 2009;22(2):121–139.

[46] Rodríguez P., Haghighatkhah A., Lwakatare L.E., Teppola S., Suomalainen T., Eskeli J., Karvonen T., Kuvaja P., Verner J.M., Oivo M. Continuous deployment of software intensive products and services: a systematic mapping study. J. Syst. Softw. 2017;123:263–291.

[47] Mäntylä M.V., Adams B., Khomh F., Engström E., Petersen K. On rapid releases and software testing: a case study and a semi-systematic literature review. Empir. Softw. Eng. 2015;25(2):1384–1425.

[48] Fitzgerald B., Stol K.J. Continuous software engineering: a roadmap and agenda. J. Syst. Softw. 2017;123:176–189.

[49] Olsson H.H., Alahyari H., Bosch J. In: 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; IEEE; 2012:392–399.

[50] Fitzgerald B., Stol K.J. In: Continuous software engineering and beyond: trends and challenges. Proceedings of the 1st International Workshop on Rapid Continuous Software Engineering; ACM; 2014:1–9.

[51] Järvinen J., Huomo T., Mikkonen T., Tyrväinen P. From agile software development to mercury business. In: Software Business. Towards Continuous Value Delivery. Springer; 2014:58–71.

[52] Claps G.G., Berntsson Svensson R., Aurum A. On the journey to continuous deployment: technical and social challenges along the way. Inf. Softw. Technol. 2015;57:21–31.

[53] Highsmith J., Cockburn A. Agile software development: the business of innovation. Computer. 2001;34(9):120–127.

[54] Reifer D.J. How good are agile methods?. IEEE Softw. 2002;19(4):16–18.

[55] Arisholm E., Gallis H., Dyba T., Sjoberg D.I. Evaluating pair programming with respect to system complexity and programmer expertise. IEEE Trans. Softw. Eng. 2007;33(2).

[56] Chen I.M. Rapid response manufacturing through a rapidly reconfigurable robotic workcell. Robot. Comput. Integr. Manuf. 2001;17(3):199–213.

[57] Perepletchikov M., Ryan C., Tari Z. The impact of service cohesion on the analyzability of service-oriented software. IEEE Trans. Serv. Comput. 2010;3(2):89–103.

[58] Hossain E., Babar M.A., Paik H.Y. In: Using scrum in global software development: a systematic literature review. Fourth IEEE International Conference on Global Software Engineering (ICGSE); IEEE; 2009:175–184.

[59] Port D., Bui T. Simulating mixed agile and plan-based requirements prioritization strategies: proof-of-concept and practical implications. Eur. J. Inf. Syst. 2009;18(4):317–331.

[60] Vähäniitty J., Rautiainen K.T. Towards a conceptual framework and tool support for linking long-term product and business planning with agile software development. In: Proceedings of the 1st International Workshop on Software Development Governance. ACM; 2008:25–28.

[61] Hoda R., Noble J., Marshall S. The impact of inadequate customer collaboration on self-organizing agile teams. Inf. Softw. Technol. 2011;53(5):521–534.

[62] Delen C., Demirkan H. Data, information and analytics as services. Decis. Support. Syst. 2013;55(1):359–363.

[63] Rivero J.M., Grigera J., Rossi G., Luna E.R., Montero F., Gaedke M. Mockup-driven development: providing agile support for model-driven web engineering. Inf. Softw. Technol. 2014;56(6):670–687.

[64] Wang X., Conboy K., Cawley O. ‘Leagile’ software development: an experience report analysis of the application of lean approaches in agile software development. J. Syst. Softw. 2012;85(6):1287–1299.

[65] Scott E., Rodríguez G., Soria A., Campo M. Are learning styles useful indicators to discover how students use scrum for the first time?. Comput. Hum. Behav. 2014;36:56–64.

[66] Babb J., Hoda R., Norbjerg J. Embedding reflection and learning into agile software development. IEEE Softw. 2014;31(4):51–57.

[67] Leppänen M., Mäkinen S.V., Pagels M.E., Eloranta V.P., Itkonen J., Mäntylä M.V., Männistö T. The highways and country roads to continuous deployment. IEEE Softw. 2015;32(2):64–71.

[68] Kupiainen E., Mäntylä M.V., Itkonen J. Using metrics in agile and lean software development—a systematic literature review of industrial studies. Inf. Softw. Technol. 2015;62:143–163.

[69] Behutiye W.N., Rodríguez P., Oivo M., Tosun A. Analyzing the concept of technical debt in the context of agile software development: a systematic literature review. Inf. Softw. Technol. 2017;82:139–158.

[70] Garousi V., Mäntylä M.V. Citations, research topics and active countries in software engineering: a bibliometrics study. Comput. Sci. Rev. 2016;19:56–77.

[71] Womack J.P., Jones D.T. Lean Thinking: Banish Waste and Create Wealth in Your Organisation. New York: Rawson Associates; 1996.

[72] Dybå T., Sharp H. What's the evidence for lean?. IEEE Softw. 2012;29(5):19–21.

[73] Fujimoto T. Evolution of Manufacturing Systems at Toyota. New York: Oxford University Press, Inc.; 1999.

[74] Ohno T. Toyota Production System: Beyond Large-Scale Production. Productivity press; 1988.

[75] Liker J.K. The Toyota Way. Esensi; 2004.

[76] Morgan J.M., Liker J.K. The Toyota Product Development System. New York: Productivity Press; 2006.

[77] Poppendieck M., Cusumano M.A. Lean software development: a tutorial. IEEE Softw. 2012;29(5):26–32.

[78] Shah R., Ward P.T. Defining and developing measures of lean production. J. Oper. Manag. 2007;25(4):785–805.

[79] Marchwinski C., Shook J. Lean Lexicon: A Graphical Glossary for Lean Thinkers. fourth ed. Lean Enterprise Institute; 2008.

[80] Nagel R.N., Dove R. 21st Century Manufacturing Enterprise Strategy: An Industry-Led View. DIANE Publishing; 1991.

[81] Christopher M., Towill D.R. Supply chain migration from lean and functional to agile and customized. Supply Chain Manag. Int. J. 2000;5(4):206–213.

[82] Conboy K. Agility from first principles: reconstructing the concept of agility in information systems development. Inf. Syst. Res. 2009;20(3):329–354.

[83] Donaldson L. The Contingency Theory of Organizations. Sage; 2001.

[84] Sherehiy B., Karwowski W., Layer J.K. A review of enterprise agility: concepts, frameworks, and attributes. Int. J. Ind. Ergon. 2007;37(5):445–460.

[85] Sharifi H., Zhang Z. A methodology for achieving agility in manufacturing organizations: an introduction. Int. J. Prod. Econ. 1999;62(1):7–22.

[86] Naylor J.B., Naim M.M., Berry D. Leagility: integrating the lean and agile manufacturing paradigms in the total supply chain. Int. J. Prod. Econ. 1999;62(1):107–118.

[87] Mason-Jones R., Naylor J.B., Towill D. Engineering the leagile supply chain. Int. J. Agil. Manag. Syst. 2000;2(1):54–61.

[88] Van Hoek R.I. The thesis of leagility revisited. Int. J. Agil. Manag. Syst. 2000;2(3):196–201.

[89] Staats B.R., Brunner D.J., Upton D.M. Lean principles, learning, and knowledge work: evidence from a software services provider. J. Oper. Manag. 2011;29(5):376–390.

[90] Mandic V., Oivo M., Rodriguez P., Kuvaja P., Kaikkonen H., Turhan B. In: What is flowing in lean software development?. Proceedings of the 1st International Conference on Lean Enterprise Software and Systems (LESS); 2010:72–84.

[91] Mendes E., Rodriguez P., Freitas V., Baker S., Atoui M.A. Towards improving decision making and estimating the value of decisions in value-based software engineering: the VALUE framework. Softw. Qual. J. 2017;1–50. https://link.springer.com/article/10.1007%2Fs11219-017-9360-z#citeas.

[92] Biffl S., Aurum A., Boehm B., Erdogmus H., Grünbacher P., eds. Value-Based Software Engineering. Springer Science & Business Media; 2005.

[93] Stapleton J. DSDM: Business Focused Development. Addison-Wesley Professional; 2003.

[94] Cockburn A. Crystal Clear: A Human-Powered Methodology for Small Teams. Pearson Education; 2004.

[95] Palmer S.R., Felsing M. A Practical Guide to Feature-Driven Development. Pearson Education; 2001.

[96] Highsmith J.A. Agile Software Development Ecosystems. Addison-Wesley Professional; 2002.

[97] Cobb C.G. Making Sense of Agile Project Management: Balancing Control and Agility. Wiley; 2011.

[98] Beck K. Test-Driven Development: By Example. Addison-Wesley Professional; 2003.

[99] Takeuchi H., Nonaka I. The new new product development game. Harv. Bus. Rev. 1986;64(1):137–146.

[100] Sutherland J. Agile development: lessons learned from the first scrum. Cutteer Agile Project Management Advisory Service: Executive Update. 2004;5(20):1–4.

[101] Sutherland J., Schwaber K. The Scrum Papers: Nut, Bolts, and Origins of an Agile Framework. SCRUM Training Institute; 2011.152.

[102] Leffingwell D. Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise. Addison-Wesley Professional; 2010.

[103] Schwaber K., Sutherland J. The Scrum Guide. The Definitive Guide to Scrum: The Rules of the Game. http://www.scrumguides.org/. 2016 last accessed 09.08.2017.

[104] Freeman P. In: Lean concepts in software engineering. IPSS-Europe International Conference on Lean Software Development, Stuttgart, Germany; 1992:1–8.

[105] Tierney J. In: Eradicating mistakes from your software process through Poka Yoke. Proceedings of 6th International Conference on Software Quality Week; 1993:300–307.

[106] Raman S. In: Lean software development: is it feasible?. Digital Avionics Systems Conference, 1998. Proceedings of 17th DASC; The AIAA/IEEE/SAE, IEEE; 1998 1:C13/1–8.

[107] Poppendieck M., Poppendieck T. Implementing Lean Software Development: From Concept to Cash. Addison-Wesley Professional; 2006.

[108] Poppendieck M., Poppendieck T. Leading Lean Software Development: Results Are Not the Point. Pearson Education; 2009.

[109] Poppendieck M., Poppendieck T. The Lean Mindset: Ask the Right Questions. Pearson Education; 2013.

[110] Middleton P., Sutton J. Lean Software Strategies: Proven Techniques for Managers and Developers. Productivity Press; 2005.

[111] Larman C., Vodde B. Practices for Scaling Lean and Agile Development: Large, Multisite and Offshore Product Development With Large-Scale Scrum. Addison-Wesley Professional; 2010.

[112] Reinertsen D.G. The Principles of Product Development Flow: Second Generation Lean Product Development. Canada: Celeritas Redondo Beach; 2009.

[113] Anderson D.J. Kanban. Blue Hole Press; 2010.

[114] Middleton P. Lean software development: two case studies. Softw. Qual. J. 2001;9(4):241–252.

[115] Middleton P., Flaxel A., Cookson A. Lean software management case study: Timberline Inc. In: Anonymous Extreme Programming and Agile Processes in Software Engineering. Springer; 2005:1–9.

[116] Petersen K. Implementing Lean and Agile Software Development in Industry. Blekinge Institute of Technology; 2010 Doctoral Dissertation Series No. 2010:04.

[117] Middleton P., Joyce D. Lean software management: BBC worldwide case study. IEEE Trans. Eng. Manag. 2012;59(1):20–32.

[118] Mehta M., Anderson D., Raffo D. Providing value to customers in software development through lean principles. Softw. Process Improve. Pract. 2008;13(1):101–109.

[119] Trimble J., Webster C. In: From traditional, to lean, to agile development: finding the optimal software engineering cycle. System Ssciences (HICSS), 2013 46th Hawaii International Conference on; IEEE; 2013:4826–4833.

[120] Rodríguez P., Mikkonen K., Kuvaja P., Oivo M., Garbajosa J. Building lean thinking in a telecom software development organization: strengths and challenges. In: Proceedings of the 2013 International Conference on Software and System Process. ACM; 2013:98–107.

[121] Rodríguez P., Partanen J., Kuvaja P., Oivo M. In: Combining lean thinking and agile methods for software development: a case study of a Finnish provider of wireless embedded systems detailed. 2014 47th Hawaii International Conference on System Sciences (HICSS); IEEE; 2014:4770–4779.

[122] Ahmad M.O., Markkula J., Oivo M. In: Kanban in software development: a systematic literature review. Proceedings of the 39th Euromicro Conference Series on Software Engineering and Advanced Applications (SEAA) Santander, Spain; 2013.

[123] Ladas C. Scrumban—Essays on Kanban Systems for Lean Software Development. Modus Cooperandi Press; 2009.

[124] Sedano T., Ralph P., Péraire C. In: Software development waste. Proceedings of the 39th International Conference on Software Engineering; 2017:130–140.

[125] Vilkki K., Erdogmus H. Point/counterpoint. IEEE Softw. 2012;29(5):60–63.

[126] Bosch J. Building products as innovation experiment systems. In: Software Business. Springer; 2012:27–39.

[127] Bosch J. Speed, Data, and Ecosystems: Excelling in a Software-Driven World. CRC Press; 2017.

[128] MacCormack A. How internet companies build software. MIT Sloan Manag. Rev. 2001;42(2):75–78.

[129] Olsson H.H., Bosch J., Alahyari H. In: Towards R&D as innovation experiment systems: a framework for moving beyond agile software development. IASTED Multiconferences–Proceedings of the IASTED International Conference on Software Engineering, SE 2013; 2013:798–805.

[130] Bellomo S., Nord R.L., Ozkaya I. A study of enabling factors for rapid fielding combined practices to balance speed and stability. In: 35th International Conference on Software Engineering (ICSE), IEEE; 2013:982–991.

[131] Bellomo S., Nord R.L., Ozkaya I. In: Elaboration on an integrated architecture and requirement practice: prototyping with quality attribute focus. 2013 2nd International Workshop on the Twin Peaks of Requirements and Architecture (TwinPeaks); IEEE; 2013:8–13.

[132] Brown A.W., Ambler S., Royce W. In: Agility at scale: economic governance, measured improvement, and disciplined delivery. Proceedings of the 2013 International Conference on Software Engineering; IEEE Press; 2013:873–881.

[133] Antinyan V., Staron M., Meding W., Osterstrom P., Wikstrom E., Wranker J., Henriksson A., Hansson J. In: Identifying risky areas of software code in agile/lean software development: an industrial experience report. 2014 SoftWare Evolution Week-IEEE Conference on Software Maintenance, Reengineering and Reverse Engineering (CSMR-WCRE); IEEE; 2014:154–163.

[134] Neely S., Stolt S. In: Continuous delivery? Easy! Just change everything (well, maybe it is not that easy). Agile Conference (AGILE), 2013; IEEE; 2013:121–128.

[135] Nilsson A., Bosch J., Berger C. Visualizing testing activities to support continuous integration: a multiple case study. In: Agile Processes in Software Engineering and Extreme Programming. Springer; 2014:171–186.

[136] Feitelson D.G., Frachtenberg E., Beck K.L. Development and deployment at Facebook. IEEE Internet Comput. 2013;17(4):8–17.

[137] Marschall M. In: Transforming a six month release cycle to continuous flow. Agile Conference (AGILE), 2007; IEEE; 2007:395–400.

[138] Guzmán L., Oriol M., Rodríguez P., Franch X., Jedlitschka A., Oivo M. In: How can quality awareness support rapid software development? A research preview. International Working Conference on Requirements Engineering: Foundation for Software Quality; Springer; 2017:167–173.

[139] Franch X., Ayala C., López L., Martínez-Fernández S., Rodríguez P., Gómez C., Jedlitschka A., Oivo M., Partanen J., Räty T., Rytivaara V. In: Data-driven requirements engineering in agile projects: the Q-rapids approach. Proceedings of the 2nd International Workshop on Just-in-Time Requirements Engineering: Dealing With Non-functional Requirements in Agile Software Development, Lisbon, Portugal, 2017; 2017:1–4.

[140] Eklund U., Bosch J. In: Architecture for large-scale innovation experiment systems. 2012 Joint Working IEEE/IFIP Conference on Software Architecture (WICSA) and European Conference on Software Architecture (ECSA); IEEE; 2012:244–248.

[141] Benefield R. In: Agile deployment: lean service management and deployment strategies for the SaaS enterprise. 42nd Hawaii International Conference on System Sciences, 2009, HICSS’09; IEEE; 2009:1–5.

[142] Fagerholm F., Guinea A.S., Mäenpää H., Münch J. In: Building blocks for continuous experimentation. Proceedings of the 1st International Workshop on Rapid Continuous Software Engineering (RCoSE 2014), Hyderabad, India; 2014.

[143] Goel A., Chopra B., Gerea C., Mátáni D., Metzler J., Ul Haq F., Wiener J. In: Fast database restarts at Facebook. Proceedings of the 2014 ACM SIGMOD International Conference on Management of Data; ACM; 2014:541–549.

[144] Agarwal P. In: Continuous Scrum: agile management of SaaS products. Proceedings of the 4th India Software Engineering Conference; ACM; 2011:51–60.

[145] Humble J., Read C., North D. In: The deployment production line. Agile Conference, 2006; IEEE; 2006:6.

[146] Lwakatare L.E., Kuvaja P., Oivo M. In: Lassenius C., Dingsøyr T., Paasivaara M., eds. Dimensions of DevOps. 16th International Conference on Agile Software Development (XP); Cham: Springer International Publishing; 212–217. 2015;vol. 212.

[147] Bass L., Weber I., Zhu L. DevOps: A Software Architect's Perspective. Addison-Wesley Professional; 2015.

[148] Callanan M., Spillane A. DevOps: making it easy to do the right thing. IEEE Softw. 2016;33(3):53–59.

[149] Penners R., Dyck A. Release Engineering vs. DevOps—An Approach to Define Both Terms. Full-Scale Software Engineering; 2015. Retrieved from https://www2.swc.rwth-aachen.de/docs/teaching/seminar2015/FsSE2015papers.pdf#page=53.

[150] Smeds J., Nybom K., Porres I. In: DevOps: a definition and perceived adoption impediments. 16th International Conference on Agile Software Development (XP); Helsinki: Springer International Publishing; 2015:166–177.

[151] Humble J., Molesky J. Why enterprises must adopt DevOps to enable continuous delivery. Cutter IT J. 2011;24(8):6–12.

[152] Debois P. In: Agile infrastructure and operations: how infra-gile are you?. Agile 2008 Conference; IEEE; 2008:202–207. https://doi.org/10.1109/Agile.2008.42.

[153] Iden J., Tessem B., äivärinta T. Problems in the interplay of development and IT operations in system development projects: a Delphi study of Norwegian IT experts. Inf. Softw. Technol. 2011;53(4):394–406.

[154] Elbanna A., Sarker S. The risks of agile software development: learning from adopters. IEEE Softw. 2016;33(5):72–79.

[155] Gotel O., Leip D. Agile software development meets corporate deployment procedures: stretching the agile envelope. In: Agile Processes in Software Engineering and Extreme Programming. Berlin, Heidelberg: Springer; 2007:24–27.

[156] Tessem B., Iden J. In: Cooperation between developers and operations in software engineering projects. Proceedings of the 2008 International Workshop on Cooperative and Human Aspects of Software Engineering; 2008.

[157] Cito J., Leitner P., Fritz T., Gall H.C. In: The making of cloud applications: an empirical study on software development for the cloud. Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering—ESEC/FSE 2015; 2015:393–403.

[158] Shahin M., Zahedi M., Babar M.A., Zhu L. In: Adopting continuous delivery and deployment: impacts on team structures, collaboration and responsibilities. 21st Evaluation and Assessment in Software Engineering Conference (EASE); 2017.

[159] Schneider T. In: Achieving cloud scalability with microservices and DevOps in the connected car domain. CEUR Workshop Proceedings on Continuous Software Engineering; 2016:138–141. CEUR-WS.org. Retrieved from http://ceur-ws.org/Vol-1559/.

[160] Nybom K., Smeds J., Porres I. On the Impact of Mixing Responsibilities Between Devs and Ops. Springer; Cham; 2016.131–143.

[161] Chen L. Continuous delivery: overcoming adoption challenges. J. Syst. Softw. 2017. ;128:72–86. https://doi.org/10.1016/j.jss.2017.02.013.

[162] Elberzhager F., Arif T., Naab M., Süß I., Koban S. From Agile Development to DevOps: Going Towards Faster Releases at High Quality—Experiences from an Industrial Context. Springer; 2017.33–44.

[163] Hummer W., Rosenberg F., Oliveira F., Eilam T. Testing idempotence for infrastructure as code. In: ACM/IFIP/USENIX International Conference on Distributed Systems Platforms and Open Distributed Processing; Berlin, Heidelberg: Springer; 2013:368–388.

[164] Balalaie A., Heydarnoori A., Jamshidi P. Microservices architecture enables DevOps: migration to a cloud-native architecture. IEEE Softw. 2016;33(3):42–52.

[165] Heinrich R., van Hoorn A., Knoche H., Li F., Lwakatare L.E., Pahl C., Wettinger J. In: Performance engineering for microservices: research challenges and directions. Proceedings of the 8th ACM/SPEC on International Conference on Performance Engineering Companion; ACM; 2017:223–226.

[166] Tang C., Kooburat T., Venkatachalam P., Chander A., Wen Z., Narayanan A., Karl R. In: Holistic configuration management at Facebook. Proceedings of the 25th Symposium on Operating Systems Principles—SOSP ‘15; 2015:328–343.

[167] Cito J., Oliveira F., Leitner P., Nagpurkar P., Gall H.C. In: Context-based analytics: establishing explicit links between runtime traces and source code. Proceedings of the 39th International Conference on Software Engineering: Software Engineering in Practice Track; IEEE Press; 2017:193–202.

[168] Laukkarinen T., Kuusinen K., Mikkonen T. In: DevOps in regulated software development: case medical devices. Proceedings of the 39th International Conference on Software Engineering: New Ideas and Emerging Results Track; 2017:15–18.

[169] Lwakatare L.E., Karvonen T., Sauvola T., Kuvaja P., Bosch J., Olsson H.H., Oivo M. In: Towards DevOps in the embedded systems domain: why is it so hard?. 49th Hawaii International Conference on Systems Science; IEEE; 2016:5437–5446.

[170] Jones S., Noppen J., Lettice F. In: Management challenges for DevOps adoption within UK SMEs. Proceedings of the 2nd International Workshop on Quality-Aware DevOps—QUDOS 2016; 2016:7–11.

[171] Shahin M. In: Architecting for devops and continuous deployment. Proceedings of the ASWEC 2015 24th Australasian Software Engineering Conference; ACM; 2015:147–148.

[172] Ries E. The Lean Startup: How today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses. Random House LLC; 2011.

[173] Seppänen P., Tripathi N., Oivo M., Liukkunen K. In: How are product ideas validated? The process from innovation to requirement engineering in software startups. 8th International Conference on Software Business (ICSOB); 2017.

[174] Bajwa S.S., Wang X., Duc A.N., Abrahamsson P. “Failures” to be celebrated: an analysis of major pivots of software startups. Empir. Softw. Eng. 2017;22(5):2373–2408.

[175] Steinert M., Leifer L.J. Finding One's Way': re-discovering a hunter–gatherer model based on wayfaring. Int. J. Eng. Educ. 2012;28(2):251.

[176] Nguyen-Duc A., Seppänen P., Abrahamsson P. In: Hunter–gatherer cycle: a conceptual model of the evolution of software startups. Proceedings of the 2015 International Conference on Software and System Process; ACM; 2015:199–203.

[177] Bosch J., Olsson H.H., Björk J., Ljungblad J. The early stage software startup development model: a framework for operationalizing lean principles in software startups. In: Lean Enterprise Software and Systems. Berlin, Heidelberg: Springer; 2013:1–15.

[178] Björk J., Ljungblad J., Bosch J. In: Lean product development in early stage startups. IW-LCSP@ ICSOB; 2013:19–32.

[179] Seppänen P., Oivo M., Liukkunen K. In: The initial team of a software startup, narrow-shouldered innovation and broad-shouldered implementation. 22nd ICE/IEEE International Technology Management Conference; 2016.

[180] Müller R.M., Thoring K. Design thinking vs. lean startup: a comparison of two user-driven innovation strategies. In: International Design Management Research Conference, Boston, MA; 2012:151–161.

[181] Hokkanen L., Kuusinen K., Väänänen K. Minimum viable user experience: a framework for supporting product design in startups. In: International Conference on Agile Software Development. Cham: Springer; 2016:66–78.

[182] Hokkanen L., Kuusinen K., Väänänen K. In: Early product design in startups: towards a UX strategy. International Conference on Product-Focused Software Process Improvement; Springer International Publishing; 2015:217–224.

[183] Hokkanen L., Leppänen M. In: Three patterns for user involvement in startups. Proceedings of the 20th European Conference on Pattern Languages of Programs; ACM; 2015:51.

[184] Guo Y., Spínola R.O., Seaman C. Exploring the costs of technical debt management—a case study. Empir. Softw. Eng. 2016;21(1):159–182.

[185] Cunningham W. The WyCash portfolio management system. SIGPLAN OOPS Mess. 1992;4(2):29–30. doi:10.1145/157710.157715.

[186] Shull F. Perfectionists in a world of finite resources. IEEE Softw. 2011;28(2):4–6.

[187] Tom E., Aurum A., Vidgen R. An exploration of technical debt. J. Syst. Softw. 2013;86(6):1498–1516.

[188] Kruchten P. Refining the definition of technical debt. https://philippe.kruchten.com/2016/04/22/refining-the-definition-of-technical-debt/. 2016.

[189] Lim E., Taksande N., Seaman C. A balancing act: what software practitioners have to say about technical debt. IEEE Softw. 2012;29(6):22–27.

[190] Fowler M. Technical debt quadrant. http://martinfowler.com/bliki/TechnicalDebtQuadrant.html. 2009.

[191] Mens T., Tourwé T. A survey of software refactoring. IEEE Trans. Softw. Eng. 2004;30(2):126–139.

[192] Abrahamsson P., Babar M.A., Kruchten P. Agility and architecture: can they coexist?. IEEE Softw. 2010;27(2):16–22.

[193] Nord R.L., Ozkaya I., Sangwan R.S. Making architecture visible to improve flow management in lean software development. IEEE Softw. 2012;29(5):33–39.

[194] Nord R.L., Ozkaya I., Kruchten P., Gonzalez-Rojas M. In: Joint Working IEEE/IFIP Conference on Software Architecture (WICSA) and European Conference on Software Architecture (ECSA), IEEE; 2012:91–100.

[195] Letouzey J.L. In: The SQALE method for evaluating technical debt. 2012 Third International Workshop on Managing Technical Debt (MTD); IEEE; 2012:31–36.

[196] dos Santos P.S.M., Varella A., Dantas C.R., Borges D.B. Visualizing and managing technical debt in agile development: an experience report. In: International Conference on Agile Software Development. Berlin, Heidelberg: Springer; 2013:121–134.

[197] Kaiser M., Royse G. In: Selling the investment to pay down technical debt: the code Christmas tree. Agile Conference (AGILE), 2011; IEEE; 2011:175–180.

[198] Power K. In: Understanding the impact of technical debt on the capacity and velocity of teams and organizations: viewing team and organization capacity as a portfolio of real options. 2013 4th International Workshop on Managing Technical Debt (MTD); IEEE; 2013:28–31.

[199] Hanssen G., Yamashita A.F., Conradi R., Moonen L. In: Software entropy in agile product evolution. 2010 43rd Hawaii International Conference on System Sciences (HICSS); IEEE; 2010:1–10.

u04-01-9780128160701

Pilar Rodríguez (PhD, Software Engineering) is a postdoctoral researcher of the M3S research unit at the University of Oulu (Finland). Prior to moving to Finland, she was a research assistant at the System and Software Technology Group, Technical University of Madrid (Spain). Her research interests include empirical software engineering with a focus on software processes, agile and lean software development, value-based software engineering, and software quality. She is a member of the Review Board of Empirical Software Engineering (2015, 2016, 2017), and has served as reviewer in leading academic forums in Software Engineering (e.g., TSE, EMSE, IST, IEEE Software, and ESEM).

u04-02-9780128160701

Mika Mäntylä is a professor of Software Engineering at the University of Oulu, Finland. He received a D.Sc. degree in 2009 in software engineering from the Helsinki University of Technology, Finland. His research interests include empirical software engineering, software testing, software maintenance, mining software repositories, and behavioral software engineering. He has previously worked as a postdoc at the Lund University, Sweden and as an assistant professor at the Aalto University, Finland. His studies have appeared in journals such as IEEE Transaction on Software Engineering, IEEE Software, Empirical Software Engineering, and Information and Software Technology. For more information http://mikamantyla.eu/.

u04-03-9780128160701

Markku Oivo (PhD, eMBA) is professor and head of the M3S research unit at the University of Oulu, Finland. During 2000–2002 he was Vice President and director of R&D at Solid Co. He held several positions at VTT in 1986–2000. He had visiting positions at the University of Maryland (1990–91), Schlumberger Ltd. (Paris 1994–95), Fraunhofer IESE (1999–2000), University of Bolzano (2014–15), and Universidad Politécnica de Madrid (2015). He has worked at Kone Co. (1982–86) and at the University of Oulu (1981–82). He has initiated and managed 100+ projects with tens of millions of euros funding. He has 150+ international publications.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.183.10