Improvisation in Small Software Organizations: Implications for Software Process Improvement Tore Dybå SINTEF Telecom and Informatics and Norwegian University of Science and Technology (e-mail: Tore.Dyba@informatics.sintef.no) 1 Abstract Traditional ways of developing software and improving the software process relies on theories that assumes that the environment is predictable. However, for most small software organizations the environment is constantly changing and often unpredictable. This problem has remained largely unnoticed in current debates on software process improvement, which has often been confined to discussions regarding the implementation of “best practice” models. In this essay, we propose that improvisation, and the jazz metaphor, can give valuable insights into the relationship between action and learning in small software-intensive organizations. Specifically, we describe the challenges of balancing the refinement of the existing skill base, with the experimentation of new ideas in order to find alternatives that improve on old ones. Keywords: Improvisation, Software Process Improvement, Small Organizations. 1 SINTEF is The Foundation of Scientific and Industrial Research at the Norwegian Institute of Technology. Mail address: N-7465 Trondheim, Norway. Tel +47 73 59 30 00, Fax +47 73 53 25 86 –1– Introduction We are witnessing an explosive growth in the size and complexity of the problems addressed by software. We also experience complex interactions between software organizations and their environment, as well as the implications of rapid changes in technology. Only by recognizing and actively dealing with this complexity and turbulence, can small software organizations expect to survive. There is an important distinction between acknowledging these complex interactions and being able to understand or control them. Unfortunately, there seems to be a common belief among both researchers and managers within the software community that success depends upon the ability to predict changes in the environment, and develop rational plans to cope with the change. Predictability, however, is a property of simple systems. Reality is different; the environment is not such a simple system – on the contrary, it is highly complex – it is not predictable, it is not entirely knowable, and it is definitely not controllable by the software manager or the software organization. The sooner we admit this to ourselves, the sooner we can develop more useful models for improving the process of software development. To most small software organizations, their environment is more like the croquet game in Alice in Wonderland – a game where everything is constantly changing around the player. In that game, the croquet balls were live hedgehogs, the mallets live flamingoes, and the arches were card soldiers. The players all played at once, without waiting for turns, and fighting for the hedgehogs that constantly crawled away. Just as Alice tried to hit the ball, her flamingo would twist itself round and lift its face in another direction. Besides, there was generally a ridge or a furrow wherever she wanted to send the hedgehog to, and the card soldiers were always getting up and walking to other parts of the playground (Carroll, 1982). As in the case of Alice, we argue that small organizations facing environmental turbulence, requires an improvement approach that recognizes (1) the need for a dramatically shorter time-frame between planning and action; (2) that the planning of an action does not provide all the details of its implementation; and finally (3) that creativity is necessary to make sense of the environment. We consider improvisation as such an improvement approach to better understand the relationship between action and learning in small software organizations. For that reason, we contend that small software organizations need to become more improvisational in order to survive in an increasingly turbulent and complex environment. The Nature of Improvisation The notion of improvisation occurs in several contexts such as music, theatre, teaching, therapy and sports. Recently, improvisation has also been suggested as a mindset for organizational analysis, and the jazz metaphor has been introduced as a source of under- –2– standing the processes of creativity and innovation, and of interpreting complex and changing environments (Barrett, 1998). Improvisation deals with the unforeseen, and involves continual experimentation with new possibilities in order to create innovative and improved solutions outside current plans and routines. The explorative nature of improvisation necessarily involves a potential for failure, leading to the popular misconception that improvisation is only of a spontaneous, intuitive nature that happens among untutored geniuses or in immature organizations. However, organizational improvisation does not emerge from thin air. Instead, it involves and partly depends on the exploitation of prior routines and knowledge. Berliner (1994) makes this point clear when he asserts that “Improvisation involves reworking precomposed material and designs in relation to unanticipated ideas conceived, shaped, and transformed under the special conditions of performance, thereby adding unique features to every creation.” (p. 241). Generally, there are different levels of improvisation, ranging from interpretations or minor adjustments to an already existing model, via embellishment and variation, to more extreme forms of improvisation where the original models are radically altered (Berliner, 1994). One of the most famous examples of extreme improvisation in modern history is the NASA team of astronauts and ground crew that had to devise a solution to rescue APOLLO 13. Improvisation activities that are closer to interpretation and minor adjustments depend on the models they start with, while extreme improvisation depends more heavily on past experience and memory. Berliner (1994) provides a description of the role experience and knowledge plays in jazz improvisation when he describes good jazz improvisers as having large “vocabularies”, “repertory storehouses”, and a “reservoir of techniques”. Hence, improvisation involves a mix of exploiting previously learned lessons and exploring the contingencies of the current setting. This mix, however, points to a core paradox of improvisation, which is also at the heart of SPI: Too much reliance on previously learned patterns tends to limit the explorative behavior necessary for improvisation; while, on the other hand, too much risk-taking leads to fruitless experimentation and repeated failures. Balancing the exploitation of past lessons and the exploration of new possibilities is, as we shall see, a function of both organizational size and environmental conditions. Improvisation in Software Development Today, the dominant perspective on software development is rooted in the rationalistic paradigm, promoting a product-line approach to software development with a standardized, controllable, and predictable software engineering process. From this perspective, the software literature advocates discipline, and the replacement of routinized human labor with mechanical routines and factory-like automation. As a result, a large part of the SPI community has promoted a rational, “best practice” approach to SPI. The Software Engineering Institute has advocated the use of statistical process control (SPC) techniques, spe- –3– cifically control charts, in recent technical reports and proposed changes for the CMM to explicitly support the use of rigorous statistical techniques. However, software development is not manufacturing. It is not a mechanical process with strong causal models appropriate for a passive improvement approach based on SPC. On the contrary, software development is largely an intellectual and sociological activity, requiring the ability to deal with change above the ability to achieve stability (Ould, 1996). Therefore, it’s time we distance ourselves from the assumptions underlying the rationalistic, linear model of software engineering, and admit that reality for most small software organizations is a non-deterministic, multi-directional flux that involves constant negotiation and renegotiation among and between the social groups shaping the software. This does not mean that we abandon discipline altogether. On the contrary, what is needed is to balance the “odd couple” of discipline and creativity in software development (Glass, 1995). This balance can be challenging, since losing sight of the creative, designintense nature of software work leads to stifling rigidity, while losing sight of the need for discipline leads to chaos. In software, as in jazz, discipline is, in fact, important to enable creativity (Humphrey, 1997). Rigorous practice and mastery of tools and techniques are, in other words, prerequisites to improvise on a theme in the course of action. We see improvisation as an effective way of joining discipline and creativity to further progress in the fields of software development and SPI. A distinct characteristic of software development, as with all improvisational processes, is the fact that the results cannot be specified completely at the outset of the work process. This means that the planned software products can only be determined in outline. Hence, improvisation differs from the rational approach in that there is no detailed plan and, furthermore, in that the planning and execution of an action converge in time. This last point is particularly important since time to market often is what the competition is all about. Improvisation in software development leads to an emphasis on how the developers interpret and make sense of the environment, and on how they make choices in an open situation, where there is more than one possibility. Such choices are made in selecting the aspects we consider relevant for modeling, in making available modes of interaction with the computer, in determining the system’s architecture and in the way we use the technical resources for implementing the system. Moreover, we make choices in anticipating how the computer will be embedded in its use context and in creating facilities and constraints for users and other concerned parties. And finally, we make choices in how we conduct the development process itself. Only a small part of these choices are made explicit in terms of pre-decided plans. More often they are implied by the course of action we take, or as Schön (1983) argues: “our knowing is in our action.” (p. 49, italics in original). Furthermore, each practitioner treats his or her case as unique, and consequently cannot deal with it by applying standard theories or techniques. Hence, the practitioner “must construct an understanding of the situation as he or she finds it.” (Schön, 1983, p. 129). Also, our choices are constrained by our interactions with others. When seen in these terms, the task of software development clearly involves a large portion of improvisation, and it should thus be clear that both so- –4– cial context and technological content are essential to a proper understanding of software development. As in the case of the jazz band, close and sustained interaction between professionals stimulates their creativity in such a way that the team performs better than the individuals could do alone (Humphrey, 1997). Hence, the best teams, whether in jazz or software, are those that are able to honor the individualism of its members and at the same time act as a unit. The foregoing discussion has several important implications for SPI. However, before we dwell on these implications, we should first realize the consequences of blindly adhering to “best practice” models for small software organizations. Current Practices Basically, there are two ways in which a software organization can improve their process capability using “best practice” models such as the CMM (Florac and Carleton, 1999): (1) it can increase the average performance (i.e. the mean of the performance distribution), or (2) it can reduce the variance in performance (i.e. increase predictability), or a combination of both. Increased average performance is a general feature of experiential learning, and it is clearly beneficial for competitive advantage. Reduced variance, however, is not necessarily an advantage. In fact, for most small software companies, competition can turn reduced variance into a major disadvantage. In order to examine the “best practice” approach to improvement and its consequences for competitiveness in small software organizations, we consider a simple model devised by March (1991). The model assumes that survival is based on comparative performance within a group of competing organizations. Furthermore, each single performance is a draw from a performance distribution specific to a particular organization. The mean of the distribution reflects the organization’s ability level and the variance reflects the organization’s reliability. For small software organizations, performance samples are also small. Hence, relative position does not depend on ability alone but is a consequence of ability and reliability (Levinthal and March, 1993). Furthermore, the competitive environment of most small software organizations is such that only the best survive. In such an environment, survival depends on having an extreme performance draw. Thus, improving average ability helps relatively little and increasing reliability (reducing variance) can be detrimental to survival. In the extreme case where the organization faces only one competitor, increases in average performance always pays off, whereas changes in variance have no effect on competitive advantage. However, when there are several competitors, increases in either the mean or the variance have a positive effect. As the number of competitors increases, the contribution of the variance to competitive advantage increases. Ultimately, as the number of competitors goes to infinity, the mean performance becomes irrelevant (March, 1991). The argument behind CMM’s improvement approach is that as software processes are standardized and techniques are learned, the time required to accomplish development –5– Frequency tasks will be reduced, productivity and the quality of task performance will be increased together with the reliability of task performance (Paulk et al., 1995). March’s (1991) model implies that if the increase in reliability comes as a consequence of reducing the left-hand tail of the performance distribution, the likelihood of finishing last among several competitors is reduced, without changing the likelihood of finishing first. However, if process improvement has the effect of reducing the right-hand tail of the distribution, it may easily decrease the chance of being best among the competitors despite increases in average performance. An improvement strategy that simultaneously increases average performance and its reliability is, therefore, not a guarantee of competitive advantage (see Figure 1). The consequences of such a strategy is that it helps in competition to avoid relatively low positions, whereas it has a negative effect in competition where finishing near the top is important. Thus, the price of reliability is a smaller chance of primacy. Failures Successes Performance M1 M2 Figure 1 Impact of ability and reliability on performance. If our main goal is to increase the competitive advantage of small software organizations, it is time to move away from the model-based, “one-size-fits-all” thinking of the 1990s. Instead, we should proceed to improvement strategies that focus on learning from our success to increase the right-hand tail of the performance distributions while at the same time reducing the left-hand tail by learning from our failures. As we have already argued, improvisation is thus, a potential approach for such strategies to succeed. Implications for Software Process Improvement Having discussed the concept of improvisation and the consequences of CMM-based improvement, we now turn to the implications for SPI in small software organizations. There are many challenges for an improvisational approach to SPI to succeed. Two of the most important challenges are, however, (1) to sustain exploration and not fall into the trap of –6– devoting all SPI resources to experiential learning and standardization of development processes, and (2) to value the lessons of failing. Balancing exploitation and exploration Software organizations can engage in two broad kinds of improvement strategies. They can engage in exploitation – the adoption and use of existing knowledge and experiences, and they can engage in exploration – the search for new knowledge, either through imitation or innovation (March, 1991). A basic problem is to engage in enough exploitation to ensure short-term results and, concurrently, to engage in exploration to ensure long-term survival (Levinthal and March, 1993). A software organization that specializes in exploitation will eventually become better and better to use an increasingly obsolete technology, while an organization that specializes in exploration never will realize the advantages of its discoveries. Exploitation Exploration Refinement, routinizing and elaboration of existing ideas, paradigms, technologies, processes, strategies and knowledge. Experimentation with new ideas, paradigms, technologies, processes, strategies and knowledge in order to find alternatives that improve on old ones. Provides incremental returns on knowledge and low risk of failure. Provides uncertain but potentially high returns on knowledge and carries significant risk of failure. Requires personnel who are skilled in existing technologies. Requires personnel who are skilled in emerging or innovative technologies. Can generate short-term improvement results. Often requires a long time horizon to generate improved results. As we have already argued, improvisation requires both exploitation and exploration. Determining what the appropriate balance should be is a complicated dynamic that involves considerations of both organizational size and environmental factors. Since exploitation generally generates clearer, earlier, and closer feedback than exploration, the most common situation is one in which exploitation tends to drive out exploration (Levinthal and March, 1993). To make improvisation possible for organizations operating in increasingly more complex and turbulent environments, it is, therefore of vital importance that they are able to increase exploration while at the same time sustaining exploitation. We studied the balance between exploitation and exploration in a survey of 95 software departments of 55 Norwegian software companies. Specifically, we studied how organizational size and environmental turbulence affected this balance. Effects of organizational size were compared by contrasting large organizations with small organizations. The groups were defined such that large organizations consisted of the upper third (>200 developers) and small organizations of the lower third (<30 developers) of the distribution. Similarly, the effects of environmental turbulence were examined by contrasting the upper and lower third of the operationalized environment distribution. –7– Results showed that small software organizations kept the same level of exploitation both in stable and turbulent environments. However, they engaged in significantly (p<0.05) more exploration in turbulent environments than they did in stable environments. It is important to note that the increased level of exploration did not drive out exploitation. In other words, we found support for the proposition that increased environmental turbulence requires increased levels of improvisation. Similar to the small organizations, large software organizations did not differ significantly in their level of exploitation between stable and turbulent environments. In contrast to the small organizations, however, increased turbulence did not lead to increased levels of exploration. On the contrary, the larger organizations seemed to lower their levels of exploration during turbulent environments. However, this difference was not significant. It is interesting to note that, as there was no difference in the level of exploitation between small and large organizations regardless of the environment, there was a marked difference in the level of exploration (see Figure 2). The results showed that small software organizations engage in significantly (p<0.001) more exploration in turbulent environments than large software organization. EXPLOITATION: EXPLORATION: 19 30 18 29 17 28 16 27 15 26 14 25 Stable ENVIRONMENT Turbulent SW ORGANIZATION: Stable Small (<30) ENVIRONMENT Turbulent Large (>200) Figure 2 Improvement strategy vs. organizational size and environmental turbulence. These results supports the assertion that small software organizations in turbulent environments, require improvement strategies that are more closely aligned with explorative behavior, while at the same time promoting the exploitation of past experiences. As already discussed, this is at the heart of an improvement strategy based on improvisation. Most software managers agree that changes in their competitive environment are fast and increasingly unpredictable. However, managers of large software organizations still rely on learning from experience to prepare for the future rather than exploring new possibilities. They tend to generate the same responses even when the stimuli have changed. They keep doing what they do well, rather than risk failure. There could be many reasons for this. One explanation, which is also a direct consequence of using improvement models such as the CMM, is the institutionalized routines. In stable situations, such routi–8– nization can become an effective way of developing software, but it can also drive out the exploration of new alternative routines. The deeper these routines are grounded in the organizational culture, the more difficult they are to change and more easily they turn into an obstacle to improvement. Improvisation involves, as we have seen, an organizational climate that supports an explorative risk-taking behavior. An inherent part of such risk-taking is failure and, consequently, we should learn to value the benefits of failure in order to reduce the left-hand tail of the performance distribution. Learning through failure Inherent in the rationalistic approach to software development is to consider failure as unacceptable. This is consistent with the goal of promoting stability and short-term performance, as is the case in exploitation. In this situation, success provides an excellent foundation for increased reliability. Hence, success tends to encourage the maintenance of the status quo – “if it ain’t broke, don’t fix it”. However, the absence of failure experiences can result in decreased organizational competence when faced with changing and turbulent environments. Therefore, it is important to note that improvisation requires tolerance for failure, and that failure is an essential prerequisite both for learning and for challenging the status quo. In software development, as in jazz, we must be able to turn unexpected problems and failure into learning opportunities (Abdel-Hamid and Madnick, 1990). Rather than treat failure as unacceptable and stigmatizing, we should distinguish between failures that result from carelessness and failures that are a result of intelligent efforts to experiment outside existing patterns (Barrett, 1998). In this way, we can draw attention to potential problems and stimulate the search for creative and innovative solutions when the environmental factors are changing. The paradox is that you have to experience failure in order to have success. Summary and Conclusions The rationalistic approach to software development and SPI does not satisfy the challenges facing most small software organizations. However, the jazz metaphor teaches us to look beyond routines, formalization, and success to better understand the relationship between action and learning. Consequently, we have suggested that improvisation has the potential to improve the quality of software development, and thus, that improvisation and process improvement are closely aligned. Successful improvisation is difficult because it requires both modes of learning – exploitation and exploration. Therefore, we hope that this essay can trigger a fruitful debate on how small organizations can balance these modes, and better learn to improvise in order to cope with the constantly changing and often unpredictable environment. –9– References ABDEL-HAMID, T.K. AND MADNICK, S.E. (1990) The Elusive Silver Lining: How We Fail to Learn from Software Development Failures, Sloan Management Review, Vol. 32, No. 1, Fall, pp. 39-48. BARRETT, F.J. (1998) Creativity and Improvisation in Jazz and Organizations: Implications for Organizational Learning, Organization Science, Vol. 9, No. 5, pp. 605-622. BERLINER, P.F. (1994) Thinking in Jazz: The Infinite Art of Improvisation, Chicago, IL: University of Chicago Press. CARROLL, L. (1982) Alice’s Adventures in Wonderland; and, Through the Looking-Glass and What Alice Found There, Oxford: Oxford University Press. FLORAC, W.A. AND CARLETON, A.D. (1999) Measuring the Software Process: Statistical Process Control for Software Process Improvement, Reading, Massachusetts: Addison-Wesley. GLASS, R.L. (1995) Software Creativity, Englewood Cliffs, New Jersey: Prentice Hall. HUMPHREY, W.S. (1997) Managing Technical People: Innovation, Teamwork, and the Software Process, Reading, Massachusetts: Addison-Wesley. LEVINTHAL, D.A. AND MARCH, J.G. (1993) The Myopia of Learning, Strategic Management Journal, Vol. 14, pp. 95-112. MARCH, J.G. (1991) Exploration and Exploitation in Organizational Learning, Organization Science, Vol. 2, No. 1, pp. 71-87. OULD, M.A. (1996) CMM and ISO 9001, Software Process – Improvement and Practice, Vol. 2, pp. 281-289. PAULK, M.C., WEBER, C.V., CURTIS, B. AND CHRISSIS, M.B. (1995) The Capability Maturity Model: Guidelines for Improving the Software Process. Reading, Massachusetts: Addison-Wesley. SCHÖN, D.A. (1983) The Reflective Practitioner: How Professionals Think in Action, Basic Book. – 10 –