Working papers in Information Systems PROGRAMMERS A-VOIDING “COMPLEXITY” Steinar Kristoffersen WP 10/2005 Copyright © with the author(s). The content of this material is to be considered preliminary and are not to be quoted without the author(s)'s permission. Information Systems group University of Oslo Gaustadalléen 23 P.O.Box 1080 Blindern N-0316 Oslo Norway http://www.ifi.uio.no/~systemarbeid Kristoffersen Copyright © with the author(s). The content of this material is to be considered preliminary and are not to be quoted without the author(s)'s permission. Programmers a-voiding “complexity” Steinar Kristoffersen Dept. of informatics University of Oslo P.O. Box 1080 Blindern 0316 Oslo Norway <steinkri@ifi.uio.no> +47 2284 2409 (phone) +47 2285 2401 (fax) Citation: http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen 1. Introduction Information Systems (IS) research on topics such as project management (MacDonell 1994), design (Engels and Lohr 1994), programming (Joung and Smolka 1996), methodologies (Hahn et al. 1997) and use (Buckland and Florian 1991) render the notion of complexity absolutely central. It is used for many different purposes, but most often it is either used to “scope” the work as being concerned with non-trivial issues (Dampney et al. 1993), or it is used as a “strategic” approach, i.e., the problem (whatever that might be) is ostensibly resolved by reducing complexity (Steward 1981). Complexity is idiomatically everywhere in IS research, but the small study that is reported in this paper shows that it may be completely missing as an explicit topic in its own right, in a community of programmers working on what would elsewhere be denoted complex projects (and rightly so). This is particularly puzzling, since so many projects which are the targeted users of the methods developed by IS research, quite consistently are seen to be falling short of expectations (The British Computer Society 2004): “Complexity can be a significant obstacle to successful design and delivery of IT projects. […] Research into methods to analyse and predict the behavior or complex systems could lead to better assessments of the consequences of changing specific requirements during the course of the project (ibid., p. 15).” Elsewhere one might find a broad methodological, or even ontological, resistance to the idea that methods were a good idea in the first place (e.g., Chapter 2 “Krisis” of Ciborra 2002), and that the crisis is caused much more by methods that “tend to disregard the fundamental role of the everyday world of the agents, users, designers, and managers, and the messiness and situatedness of their acting, […] In this way, they key element is neglected: human existence […] (ibid. p. 18).” Does this mean that the beleaguered domains are too “complex” as such, to be managed by methods? Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen Deferring a more elaborate discussion of how the concept of complexity can be defined until bit later in the paper, les us assume, informally, that complexity of a system is made up by some combination of the number of elements within subsystems, the degree of interactivity between subsystems and the uncertainty of the environment. It is then, of course possible to see the task of developing any information system as rather intricate (e.g., such as the illustration from Yetton et al. 2000 shows): “Importantly, the complexity presented in [Figure 1 above] makes a strong case for the argument that appointing a good project manager and following a standard methodology would not begin to resolve the many relationships which need to be managed effectively to deliver high project performance. This helps to explain the relative failure in the IT industry to develop IS project managers who consistently deliver projects on time, to functionality and to budget. The challenge is too complex to resolve by a single intervention (Yetton et al. 2000, p. 285-286).“ In any instance, however, unfortunately this does not help the community of programmers struggling to get by, having to produce sufficient quality code within agreed upon deadlines. Moreover, it is a frail argument on many levels. Within the line of reasoning that one particular approach did not work because the circumstances in question were too complex, then either there are cases (of a simpler nature) in which they could work1, or everything is “too” complex. In the former case, a subset of the original case would probably be simple enough to be dealt with using the 1 Conversely, if the environment is problematically uncertain, then that has to be “scoped” into the method. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen method, which in its turn would reduce the complexity, etc., until the method could successfully be applied on the remainder2, or this strategy is in itself “reflexive” in the sense3 that decomposing the problems leaves the remainder more (and not less) complex4. In the latter case, then either nothing would work (which, clearly it does), or there is somewhere “a way of doing it” (i.e., a method) that works, but it is yet to be explicated. This new “method” is either simply a traditional method thus far undiscovered, or it relies on a different analytical pitch on the work of programmers and the domains of which they are engaged, i.e., an alternative understanding of the notion of “complexity”. This novel theoretical understand of the concept of complexity is still vague, and one might want to continue to try to pin it down analytically. Most certainly, the lack of success on behalf of the methods that we have previously proposed to deal with complexity indicates that a deeper enquiry into that notion is required. However, it seems that it may be exactly because one has departed from an a priori and decontextualized understanding of complexity (from within the system sciences mainly), and then used that as a template for analytical approaches to the work of programmers, that methods today are considered by many to be so problematic (Ciborra 2002). Ciborra’s methodological response to the problem of IS −as having devised “System design methods may be the most diffused tools […], but they work only in part (ibid., p. 13)”− is, perhaps in one sense, provoking: “Let us go back to the basics and encounter the world as it presents itself in our everyday experience. We rely on evidence, intuition and empathy. We listen to managers and we participate in their dealings with puzzles and riddles, and, on the other hand, we do not confer any particular relevance on works like ‘strategy’, ‘processes’, ‘data’, ‘system’ or ‘structured methodology’ (ibid. p. 25).” This is the exact objective of this paper: To look closely at the ways in which issues that usually would be described as complex, are handled by programmers whilst programming. The aim is to “unpack” the concept of complexity. The rationale is that 2 This is exactly the core of the “divide-and-conquer” argument of many methods and only proves that methods can “work”. 3 Cf. Beck (1986) 4 It certainly cannot be both since would imply that that complexity means evasively large yet reductionable, and evasively reflexive and unreductionable. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen if complexity indeed is used (too abstractly) to describe many different concerns, then one should not be surprised that a professional enterprise (such as IS) that is oriented towards resolving complexity, is not consistently successful. There seems to be, simply, something wrong with the concept of complexity. Therefore, this paper plainly raises the question of whether “complexity” is, bluntly put, a “red herring” rather than a first-order attribute of information systems (work) in its own right, or if is it just underspecified and much too general? 2. Using ethnomethodology This is a fieldwork study, carried out through participant observation during a sustained period of more than one year by (in average two days per week), with the author working as a programmer in a related (“simpler”) project in the very same room as the programmers that were the subjects of the study. The documentation provided in this paper is based on transcriptions from mini-disc recordings of ordinary conversations among this community of programmers. The subjects knew about the study and its purposes. They were aware that their conversations might be recorded, but they did not know exactly when. Although ethnomethodologically-inspired studies of work have enjoyed some prominence in CSCW and HCI over the past decade (Bentley et al. 1992; Martin and Sommerville 2004; Suchman 1993), it is worth explicating it a bit further here since this paper is not based on a “quick-and-dirty” ethnography (Rouncefield 1994). It takes as its point of departure the most fundamental of all vehicles for getting work done, namely naturally occurring conversations and thus, conversation analysis (Sachs 1992). It does not purport, however, to cover all aspects of these conversations from an ethnomethodological point of view. The conversation were monitored, recorded and transcribed whilst looking for “instances of complexity”. The ethnomethodological “pitch” of this paper means that, from the outset, abstract concepts (such as complexity) and the relationships between them are not seen as “proceeding” action in such a way that they can, in a stable way, constitute a (social) order that is “given”, and that action (however voluntarily) can be seen as stipulating Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen the behavior of members of that social order. This is also the case for “complexity”. So, this paper assumes that people do not regularly and stably enact (or respond to) principles “of complexity” as if those were imposed upon them. In itself, however, this position does not prevent “complexity” from being part of “a set of ‘commonsense’ entities which are, in practice, being constantly remade in significant ways by members of the social order (Shapiro 1994).” Conversation analysis is particularly useful for the purposes of this paper, inasmuch as it can produce findings that are indisputable aligned with and anchored in observable practices, as a means of rectifying theoretical ideas. It can show instances in which the theoretical concepts are not stable, and equally interesting, it can show the methods by which members of social settings “get by” even if their concepts and conceptualizations of the situation break down. Arguably the most conspicuous genre of ethnomethodological research, conversation analysis is concerned with describing the methods by which the members of a culture engage in social interaction. Its objective is to reveal the patterns by which participants in “working through talk” structurally organize that communication. Conversation analysis pays particular attention to detail, but not the particulars and peculiarities of each and every setting; it is not looking for the exceptional or sensational. Conversation analysis seeks to identify and represent the reproducible patterns of the way we talk, in order to show the roles played by such patterns in the production of order. A conversation analytical research effort involves analyzing a set of samples of talk. The samples are listened to, transcribed, examined and compared in order to reveal their “orderliness” and the ways on which these orderly patterns relate to each other. It proceeds from a detailed account of talk towards more generalizable descriptions, by aligning the stable patterns thus discovered with the policies of the methodology, e.g., such as formulated in (Garfinkel 1967). There is some bias in this, of course, and it will (generally?) draw the researchers attention towards inductively discovering central aspects of “being social”. However, and a bit more defensively, perhaps, for this paper a more “traditional” approach to research is followed: This paper departs from the hypothesis that “complexity” is a useful and much used notion among Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen programmers in ordinary programming community doing “extreme programming.” The objective of the paper is simply to falsify this hypothesis. Returning briefly to the policies of ethnomethodology, the words that people use in naturally occurring talk and contact with other member of a community are indexical, which means that that they are fundamentally contextual and cannot be specified in advance, or in any “theoretical” way. However, in the exact circumstances of their use, such words are instantly useful, and operationalized by the members. This is according to Garfinkel (1967) recognizable as a practical achievement whose qualities make the production of social order possible. Indexicality implicates that the only reasonable approach to learn about a concept is through empirical investigation of its usage in everyday practices, and yet the concept of complexity which IS so often tries to “deploy” as a motivation and scoping of its methods, seem to have maintained its stability and “meaning” through theoretical reflection rather than empirical inspection. This paper addresses this shortcoming, and has therefore come to rely on a method that has the capability to “unpack” and put on display a social setting as it is perceived, accounted for and enacted by those involved in that setting by the bonafide member of the community that is being studied. This is probably reinforcing this method’s appeal to many researchers who are looking for input to theory building. However, it is not without its problems, in this respect. First, ethnomethodology is explicitly not concerned with creating big theories about external “normative” structures that (may or may not) stipulate behavior; rather, it sees such “theories” as part-and-parcel of the production of social order which all members of a community is engaged in through and for the sake of “getting the job done”. Thus, the concept of complexity and its qualities are no more a phenomenon that is “enforced upon programmers” from the outside, than it is an aspect of “the account of programmers work” as and when they work. Therefore, unless programmers “practice” complexity in their work, the ethnomethodological analysis will contribute to our turning away from complexity (as an almost metaphysical construct) and instead force us to focus on the concepts that members of the community themselves are using. Second, it might seem a laborious approach to discovering the commonsensical aspects of Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen ordinary work. This is true, of course, but it is at the same time a fundamental part of conversation analysis: “I take it that a lot of the results I offer, people can see for themselves. […] And they needn’t figure that the results are wrong because they can see them (Sacks 1992, 488)”. It is a central methodological underpinning of this paper that if we (as members of a sufficiently-skilled community of researchers) see things (through the eyes of members that are programmers) as they are instead of as “complex” (if indeed they don’t), then the knowledge about the alternatives will be helpful in analytical terms, a well as when and if new methods are being invented. 3. What is complexity? Complexity is of concern to a wide range of people in IS research. Xia and Lee (2004) describe a framework for measuring the complexity of software development projects. They take as their motivation an assumption that one reason software projects fail are that they prove to be more complex than expected. They maintain that this is an intractable or essential quality of such projects, because they have to deal not only with technological aspects, but also with the wider organizational issues that are beyond their control. In their view complexity can be understood and measured along two dimensions: Organizational vs. technological and structural vs. dynamic (ibid.). Whilst one can to some extent see the logic of making structural (or stable) and dynamic two extremes of a continuous axis, it is much harder to understand how the dichotomy between organizational and technological is anything but rather arbitrary5. Certainly, there are alternative interpretations of the relationship between technology and organizational issues, for instance looking at the entire organization (of work) as a socio-technical relationship (Bostrom and Heinen 1977a; b) or an actor-network (Law 1992) of elements that through their being considered as having agency constitute a hybrid of technology and society (Latour 1993). 5 E.g., why not differentiate between organization and processes, or organization and individuals, and, for that matter, what is the distinction between organization and essentially structural aspects of any community? Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen The view of Xia and Lee is on the other hand clearly representative for some parts of IS, since they base their summary on a systematic review of the field’s work on complexity. It communicates a rather strong positivist attitude, however; complexity is a result of not being able to control the environment. On the flip-side, complexity is also the result of (having to respond to) a changing “ecosystem” of organizations, politics, requirements and technology. One interesting point that they identify is that increased competition leaves less margin for error; organizations are now probably more aware of problems relating to poor project performance. This means that complexity, in some sense, also can be taken as relative to the consequences of not coping with it. Sometimes complexity becomes a reflexive attribute of technology itself: “The rise of information system complexity, however, is driven by the incredible capabilities and opportunities computing offers us (Schneberger and McLean 2003). The paper of Schneberger and McLean is mainly concerned with the complexity imposed upon the architecture from the technology itself, and they point to the “complexity cross” between simplifying components and taking on a larger number (consequently) of interrelating component (ibid). Complexity is thus understood as a function of the number of attributes in each component, and the number of components. The argument shows that at some point the gain of simplification by reducing attributes is cancelled out by the increasing number of components that are then needed to contain these attributes. It is easily dismissed, e.g., by (routinely, one might say, in IS and object-oriented design and -programming) suggesting that one can aggregate related components into larger modules and thus hide some of the complexity behind cleverly constructed interfaces. First, it simply reverses the process. Second, it is, in itself, reflexive, since “the greater the number of modules, the greater the number of interfaces among them (ibid., p. 219-220)”. This might seem, one might have to admit, a theoretical argument, since empirically and experientially problems are sometimes easier to solve when broken down into smaller pieces. It is the stance of this paper that this is irrelevant, mainly because the concern here is to find out how the communities of programming handle such issues (and if that is different from how we conceive of their handling these issues), rather than making an ontological argument. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen There have been other studies of programming and programmers as well. Departing from a subjective interpretation of project complexity, Seaman and Basili (1997) found that increasing complexity led to fewer defects being reported, which is interesting, perhaps, inasmuch as they indicate that reduced exposure to errors (which surely are there, even in a proportionally larger number than in less complex projects) is partly due to lack of global overview. It seems that errors become recognized as such only when they are embedded (conceptually) into a larger whole, and therefore programmers working on larger (“more complex”) projects do not realize that are maintaining an anomaly until later in the process. This does not help us in coming to terms with “complexity” as such. However, it does explain why the “cure” suggested by some has been to improve the architectural aspects of IS design. The BCS report Challenges of Complex IT Projects (2004) is particularly illuminating in this respect. It repeatedly makes the recommendation that the system architect should be taken as a vital role in the implementation of complex IT–systems. Unfortunately the definition of complexity given in the report is that it is “multi-dimensional, encompassing scale, diversity, heterogeneity, etc. (ibid, p. 15),” which does not really explicate the notion of complexity further. It (together with the previous literature surveyed here) does however elucidate “complexity” as a concept that covers many different aspects of information systems implementations. Let us therefore look at the observable handling of allegedly “complex” issues, as documented in en empirical investigation of talk among a community of “extreme programmers. 4. Fieldwork The research background of this paper is a company called Branova. It is a software development and consultancy company. Their business idea is to provide software solutions for the airline industry. The core competence of Branova is integrating “ticketless” traveling and loyalty solutions with backend legacy systems, supporting industry standards and processes. The company’s employees have several years of experience in product development and software engineering from leading airline companies. Past experience among Branova’s staff as well as consultants has proven Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen itself and their solutions are used throughout by one midsized company. It is now marketed globally. Airline ticketing and loyalty solutions are, fundamentally, systems for creating and maintaining, distributing, marketing and selling all sorts of airline tickets in every imaginable way. It has, moreover, become a way for airline companies to reduce their operational cost and increase customer loyalty by introducing new business concepts. There has been increased competition about smaller market shares for airline companies after “9/11”; many companies have had to shut down and the survivors have been through radical transformations with regards to their product portfolio. Portfolio transformations, tweaking and redesigning their offering to the market, and changing their market profile is now the order of the day. Airline products are intractably “complex” for a number of reasons, and the continuous and rapid changes to that they undergo are another source of “complexity”. The notion of tickets as “too complex to compare” in terms of pricing is well known, but of course this is dwarfed entirely by considering also the associated deployment of materials and crew, as well as the strategic and tactical implications that the airline company has too take into account on their side: “Using PC spreadsheets and calculators, analysts were taking days to forecast the impact of a single flight change. Modelling an entirely new schedule was out of the question. With deregulation, the complexity of airline schedules began to increase exponentially along with demand, and deleting one flight would affect hundreds of other connections. Executives wanted to be able to respond to industry changes that were occurring on a daily basis from competition, regulation or economic shifts (American Airlines/Sabre6).” One specific example of such new products, designed to leverage the airline companies competitive edge as other companies were launching new (primarily “oneway” products), can briefly be described as follows: • A one-way pricing scheme in which different products (fare classes) can be combined on out- and inbound flight in a return trip. • Introducing a fee for changing the fare class (that this company did not have previously), instead of restricting change to be either “up” (paying for the 6 http://www.cio.com/archive/020199_sabre.html Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen amendment) or “down” (taking a “cheaper” seat in an otherwise fully-booked passage, as a way getting on an earlier flight). • Variable fares for the same product, i.e., different booking classes within the same product. • Children’s discounts available for all classes, however, senior fares (which used to be the same) and discounts for people traveling together removed. • In addition, there are some products that have been contracted in advance with the customer. They have different discounts according to the amount of business that this customer is contributing. • There are Internet-only products, and− • There are products open to all channels, except that they are not yet available. • Existing (already booked and sold) product have to be supported (of course). Orthogonally to these basic structures, each product/fare class-combination has rules that regulate various aspects, for instance: • There are strict rules about which tickets can be changed into another after it has been ticketed (although some of these rules are clearly incorrectly spec-ed in the documentation), again, unless, they are changed after 12 hours before departure, when no reissues can take place at the airport and fixed amounts apply instead of negotiated fares. • If cancellation happens less than 2 days before departure, they shall charge 25%, otherwise no invoicing ought to take place, unless the ticket was changed to this class from a stricter one, in which case the original rule set apply. • Etc7. The point is that a large software system has to be modified in order to accommodate for these changes. The suite of modules comprise (roughly): • A Oracle RDBMS accessed in various ways (“batch-wise” SQL as well as JDBC). • An Internet Application Server, supporting. • Webservices, J2EE (“Enterprise Java Beans”), etc., for remote access to the database. • A separate system for trading airline tickets with travel agencies. 7 The exact nature of these rules and changes are of no importance to the analysis of this paper and they have been changed slight in order to comply with a NDA that governs the research described in this paper. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen • The international linking of flights between airline companies through AMADEUS • A separate system for booking flight and buying tickets on the Internet (figure 2) • Etc. within an architecture looking something like illustrated in figure 3 The particular direction of the fieldwork of this setting thus became: When such a substance is being changed regularly and significantly, how then do programmers in this community “work” and talk their way through such work? If and how is “complexity” and operational term for this community? 5. Excerpts from the fieldwork This paper now turns towards analyzing the conversation between programmers in this setting, looking not only for if and how they explicitly use the term “complexity”, but also for ways in which they identify “complexity” in a different way—as intricate, obscure, unfortunate, difficult, involved, complicated, multi-layered, may-faceted, unclear, etc. It is useful tracking these down, because they represent alternative concerns (rather than “complexity”) that could guide the work of programmers (and thus IS researchers), and because, in looking at how they get presented, one might find the underlying themes and actions that on behalf of the members of this particular community are constitutive of what we might call “complexity”. Such themes are valuable since they “unpack” the core concerns and “sense making” that Figure 3 The system architecture Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf takes place in the group. In the next instance, conceptualization, problem solving and methodological thinking (in IS) can build on these alternative or constitutive themes rather than “complexity”. The following excerpt8 shows a discussion relating to the reorganization of text in various classes, i.e., the refactoring of code into smaller, more manageable modules in order to make these classes more maintainable: 1: Can (.) you have to make a little bit smaller [], little bit smaller classes, not so big classes, perhaps split it a little, that will make it easier 2: [Smaller] How do you think that I am going to achive that. Ehh. (..) Yes. Ehh. It is not going to be be smaller. It is still going to be 21 pages of text. Maybe that is a little much, right? It depends what you are comparing it to. It provokes a rather harshly made remark, perhaps innocently phrased, but with an emphasis on that which makes it critical. 1: [Hmm?] More? I hope that was a joke, [if it] was 10 files of 50 lines each that would be easier that one of 500 2: [Yes, but, yes but] there are some reasons for that,…, first this The tension is “defused“ rapidly, and the first speaker “backs off”. 1: [Okay, that] is okay. You don’t have to,… However, the second speaker keeps on “making excuses”. 2: It is really a flow and it should really be partitioned, but I am not allowed to do that bookinghandling and flowhandling, I need to that in advance and the saleshandling we have to do elsewhere It ends up becoming an account of the architecture that is currently in place, and how the obtainable factoring is related to the overall organizational requirements of this particular part of the system. This is certainly not an “alignment” of the IT system to the requirements, since the architecture stays put; on the other hand the architecture is not random, either. Code is designed for the purpose of “being good code”, and then the justification is reframed in terms of a requirement specification afterwards. This closes this part of the argument as well. 8 The subjects are not native English speakers, and the translation of the excerpts reflects that. The objective has not been to write correct “English”, but make it correct “enough” whilst keeping the authentic and original “flavour” of the exchanges. Kristoffersen The second talker then switches topic, and starts talking about deploying the code (these are EJB (Enterprise Java Beans) that are compiled and tested locally, and then deployed to a shared application server for more extensive testing in the group). 1: (Coughing) Is it okay by you that I do deployment in half an hour’s time? 2: Yes, eh, but (sighs) then you must test this class here, then, you are on some cases now, right. 1: Yes, but I won’t be able to do that properly, it is only the EPL9 it does not matter if that is out The warning about a new deployment brings to the attention of both parties the need for further testing, which in its next turn allows them to draw a clear boundary between the work that is relevant right now with regards to the ongoing changes, and that which is not. It is a “rescoping” taking place that also, in the next instance, indicates which modules are not finished; it describes their status as “unknown”. It is, in a sense, “activating slack”, in other words, making it clear that although it was scheduled to be done already, it makes no harm that it is not. 2: The consequence if that merge there is that we don’t really what is happening Saying that “we don’t really know what happens” dissociates the code from any particular person and person’s responsibility, since it does not say that the code is not finished, or badly written, just that, in a sense, we don’t know exactly what it does. Interestingly also, and there are many examples, this is usually coupled with giving “it”, i.e., the code, agency of its own so that with no explicit disregard for the author it is legitimate to not know exactly how to solve the problems at hand, for now. 1: I gather there are not that many of us right now doing EPL-testing so it probably does not matter if,… (coughing) The following excerpt show similar patterns of talk: 1: I was busy with that production problem that we had in Malmö last week and I had to do something, (ehh), build a cache and something, so that it wouldn’t,… 2: Ok, right. 1: That is why no-show fee was a little bit shoddy, and when I go in there to look now, and there’s a bit more to do now than I though, (ehh), we never got time to sync together, and he is using a booking class per journey, for instance and I mean what is that, I mean, it is per trip, right? So 2: Did you get that reply that I sent to you? 1: You mean that “super-duper”? 9 Batchwise processing of booking requests. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen 2: (Ehh), (he, he), no, you , but if you do not have a fee then you cannot go inn and charge, 1: Well, I didn’t know what was necessary to get it to run, but I found out that there was no value put in there at all, and the only thing working was B’s test, that since there was nothing in the database,…, the VAT as test, so it wasn’t, and the only thing that I wanted to find out was that the flow would go through, and it did, and surely down there, in there, there were tax-codes, and suddenly it throws it “down”, and then we run that VAT, so it wasn’t finished at all, right, so it was just to see, to see if the invoicing was taking place, and the machinery working, and then to look at the results afterwards, right, and it was just nonsense, it was saying sort of “test data” here and “test data” there and nothing like, so I have to talk to W tomorrow, because it is not exactly, W was wondering if B had not spec-ed anything and I was thinking that perhaps it as W who should have spec-ed it, (tj, he, he). This is where we see again the code referred to as a “it” that does something, i.e., “it throws it ‘down’” and “it was saying”, etc, so it is in a sense being “anthropomorphized”. Moreover, the talker is claiming slack by circumscribing as important “if the invoicing was taking place, and the machinery working, and then to look at the results afterwards”, in other words, starting to work on getting the results right later. 2: And there’s actually exactly the same problem here in production, first, two things, first there’s that as always f***-all Oracle-date that he could not handle properly so he had to test on the time,[ 1: [Trunk, f*** 2: : and that means he did not find any prices, and that was the one error, (.), the price was correct but he just did not find it, just that day, and number two error was that when he didn’t find the price he did not fail, he just invoiced then nil, and so their biggest customer got a free ticket, (.) 1: [(ehh), well, well, 2: [(tji!), look at that, it was invoiced a naught 1: [yes, I saw the reply 2: [it is a disaster 1: [yes, well, I saw the answer but I didn’t understand was it was about, even 2: [yes, yes, (he, he) 1: [I was wondering have they put in a data that it should give naught 2: Yes, but that is another thing, I mean if it is naught on your data in, then it should be invoiced naught, bongo, then it should be invoiced naught, but if you do not have any data, he, he, 1: [yes] 2: so you can invoice them a thousand anyway (he, he) 1: Yes, but I got NULL, but I really don’t understand, and I didn’t understand the code here, because we did not synch, sort of, before he went on vacation, Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen because he was sitting the whole of the previous week, right, implementing that production s***. and I was asking W and,… By the previous taker, the anthropomorphizing of code is even more obvious, because he is referring to it as a “he”, which is becoming clear when the talker in saying“h e did not fail, he just invoiced then nil” clearly refers to a runtime-occurrence. There are, in other words, two “hims” in this excerpt; one is the programmer that has gone on vacation and one is the server software that invoices customers (even, alas, if “he” cannot find the correct trip). 1: Yes, but there must be some kind of exception if you cannot find the price,… 2: Well, but the way it is now, we will not, if we go to invoicing, now, we will check if there are any invoice data there and if there is no invoice data there then there is nothing to invoice (.) Again, the “we” is code, but is examined analytically and “defensibly”. It now seems to refer to us as in “the programmer and his code”. 1. N:o, but, what do then you mean then by invoice data? 2: Yes, so far we say that if you have not added any taxes, then that is not a price 1: [Mmm, but 2: proximally, that is not invoice, sort of,… 1: [but then you have to put it out there as an error, jupp, (snaps his fingers). 2: No, no, no, no, no, no no, no, no 1: [Yes, because the rule says, that it should be something, so therefore it 2: [yes 1: should either be one or nothing, because the rule is saying that there should be a fee, and you cannot find a few then you must take it out 2: Yes, at least it should not be invoiced, but 1: [no, it should absolutely not be invoiced, you should mark it as an error and take it out 2: Out as an error? Out to where? 1: Just like any other error 2: There, then, did we did agree to take it down to EPL-processing, so 1: [No 2: [Yes, we agreed to make the EPL-processing such that we find 1: In EPL-processing should also put it out as error, or let it be on the queue The talk about rules and how to understand them is a particularly telling example of rules qua requirements’ specification being re-examined and re-formulated into matching with what the program is already doing. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen There are two possible outcomes: One is that the requirements are still open enough to allow the code to be kept. This does not mean that it is “acceptable” within an open requirement for the code to do anything. Instead, the rules have to be interpreted and formulated “within” the specifications so as to match the code. In the next instance, this interpretation of the code can be tested against the customer’s rules until they are accepted. The other is that the code definitely must be rewritten. The discussion continues. 1: Yes, for instance 2: Yes, yes, yes, yes 1: At least it should not be a done deal 2: In EPL processing this will be a no-show (2) di-di, it is a no-show. The EPL-processing has run a long time ago! 1: But how are we going to see this, then? 2: A little red blink on the screen,…, he, he 1: Whose screen??? This is a server-side service we’re talking about So, the final part of this excerpt confirms that the specification at this point were (to put it mildly) open enough to allow “incorrect” rules to be implemented within. In these small excerpts we have seen examples of setting of/”claiming” slack, anthropomorphizing the products, e.g., by attributing (offsetting or relocating) agency and transferring “eidos” to code, and justification of existing design to match the organizational requirements. There is still a lot more to be learnt from these excerpts, and the analysis is still only in its preliminary stages. Systematically though, from all the hours of observation, complexity as a term is really never used in this community of programmers. The question then becomes, what does that mean? 6. Discussion Talk is perhaps the most central element of any social activity, and it is not just the content that counts, it is the manner of talk. Social interaction includes non-work oriented talk as well, of course, but this paper has been concerned with talk as work. This paper has not in an inductive fashion made this into an extremely broad concern. Neither was it the intention to “fill” the existing concept of complexity with various interpretations. Given that the point of departure is that the definition of the concept is Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen rather weak, that could have been rather a tautological examination of (even more) very different interpretations of “complexity. Instead, this paper has identified themes that can be described as “epistopics” (Lynch 1993). Epistopics represent constitutive starting points of a program directed towards combining “ethnomethodology’s treatment of ordinary practical actions (ibid. p. 299)” with the interests of its “contents”, which can be found in the sociology of science. These pragmatical constructs are “the discursive themes that so often come up in discussions of scientific and practical reasoning (ibid. p. 299)” and in programming activities such epistopics could plausibly be planning, examining, design to meet specifications, etc. However, epistopics are not exactly the same across instances. Epistopics do not contribute to an agenda of identifying stable concepts and developing theories of the relationship between such concepts; instead they are topical “headings”, words that may bear family resemblances10 across instances; “they allow us to see them as similar (Tapper 1999, p. 449)”, but for which the underlying practices are not necessarily governed by the same structures. “Complexity (management)” is the “mother-of-all” epistopics, of course, in IS research. This paper has identified and exemplified three explications of recurring espistopic themes in the talk within a community of “extreme” programmers: Planning, as “Claming back slack”. Code inspection, as “Transferring agency and ‘eidos’ to code”. Design as “Justifying or adjusting a design to match perceived requirements” . Planning and estimating is of course at the very core of how IS deals with complexity. Finding out what to do, and when to do it in order to set and meet deadlines is, after all, the externalization of success versus all the stakeholders. This is of course not an easy task, and plans are probably often sketchy. Plans are useful resources for programmers, but they can hardly be expected to be exhaustive or entirely consistent. Plans are not the whole story, and even if they were people are not “programmable” by plans (Ciborra 2002; Suchman 1987). Therefore, plans have “slack”. But “slack” 10 In a Wittgensteinian sense. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen is not just a breathing space, a vacation, or a sabbatical for the project members that happen to be “there”. It is “real-estate” that can be claimed, and this is an important part of the achievement that lies in making the plan work in practice. The integral role of talk in practical laboratory sessions has been pointed to elsewhere (Lynch 1985). It is a tool-rich and very physical” environment and it is claimed that utterances often therefore are bound to objects and processes that are tangible in nature. The coding practices of programmers are poles apart from this. Coding involves working with abstract classes, ideas and concepts, rules and requirements that may (more often than not) even be written down anywhere. This is perhaps also the reason why code is so often given agency, by programmers talking about it as “it” or “him” doing things on its own, and not only that: Code does things in certain characteristic ways, that sometimes reflect back on the community or individual programmers in terms of its “eidos”. This is one way of making software “less soft” and thus, more manageable. Lynch challenges researchers of social settings to “follow the epistopics” and “investigate each case in accordance with a unique adequacy requirement (Lynch 1993, p. 302)”. This is exactly what happens when programmers make their preferred solution “good enough” within the remainder of “interpretational space” that surround pertaining requirements. Either is stands its test (the rationale for making it was that it was successfully “overlaps” with the customer requirements), or the requirement is iteratively narrowed down to close that space and force the responsible programmer to redesign the code. How can we then use these findings to better get to grips with the notion of complexity? Well, in particular, IS researchers should pay attention to the noticeable absence of explicit references being made to the work of programmers, by programmers talking amongst themselves, as complex, complicated, intractable, etc. Moreover, as a mundane way of dealing with phenomena that we, as IS researchers (and programmers “externalizing” their work, as well) would describe as complex issues, the epistopics above represent at least a complement to the “big” tactics of IS methods: Generalization, modularization, decomposition, etc.; approaches that are so much at the core of most modeling methods and programming languages (Andersen Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen and Dahlke 1990). These “tactics” are still valid, of course, but they should be seen as offering a set of epistopic themes that in each and every instance then will take on different forms. This paper is a continuation to understanding these forms and, through that, it has contributed to “unpacking” the notion of complexity that these epistopics are an aid to manage effectively. Arguably, resolving issues within such epistopic themes is rather more about displaying an orientation toward “the relevantly accountable details (Coulter 1994, p. 690)” as “conventionally constructed so as to respect the assignable purposes of their prospective recipients (ibid., same page). The world is, in a sense, generally complex, and there are of course many situations in which talking about complexity as an externalized characteristic of situations is warranted and relevant. However, for programmers as well as others, complexity may be simply an elliptical expression that can be a result of the number of elements, their interrelationship and dynamics. It may make project unfathomable, when the goals are unclear or changing. This paper does not disagree with that. However, it is not supported by the fieldwork presented here that pertaining issues are perceived, examined or resolved as if they were indeed “complex”, and consequently, perhaps, one should not be surprised when methods that aim to reduce complexity does not work all that well? References Anderson J. A., and C. E. Dahlke (1990: Controlling complexity in Ada design representation, Proceedings of the Ada-Europe international conference on Ada : experiences and prospects: experiences and prospects, p.83-96, January 1990, Dublin, Ireland Beck, U. (1986) Risk society: towards a new modernity, London: Sage. Bentley, R. (1992) , J. A. Hughes , D. Randall , T. Rodden , P. Sawyer , D. Shapiro , I. Sommerville, Ethnographically-informed systems design for air traffic control, Proceedings of the 1992 ACM conference on Computer-supported cooperative work, p.123-129, November 01-04, Toronto, Ontario, Canada Bostrom, R.P. & Heinen, J.S. (1977). MIS Problems & Failures: A Socio-Technical Perspective, Part I: The Causes. MIS Quarterly, 1(3), 17-32. Bostrom, R.P. & Heinen, J.S. (1977). MIS Problems & Failures: A Socio-Technical Perspective, Part II: The Application of Socio-Technical Theory. MIS Quarterly, 1(4), 11-28. The British Computer Society (2004). “The Challenges of Complex IT Projects”, ISBN: 1903496-15-2 Buckland, M.K. & D. Florian (1991). Expertise, task complexity, and the role of intelligent information systems. Journal of the American Society for Information Science 42:635-643. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf Kristoffersen Ciborra, C (2002) The Labyrinths of Information - Challenging the Wisdom of Systems Oxford University Press, Oxford 2002 (ISBN: 0-19-924152-X) Coulter, Jeff (1994). "Is Contextualisation Necessarily Interpretive?" Journal of Pragmatics, Vol. 21, 1994. Dampney, C.N.G., (1993). M. Johnson and P. Deuble, Taming large complex information systems, in D. Green and T. Bossomaier (eds) Complex Systems, IOS Press, 210--222. Engels, Gregor and Perdita Lohr (1994). Visual Specification of Complex Database Actions. East/West Database Workshop, pp. 303-314 Hahn, Hyoungmee, Jungpil Hahn and Jinwoo Kim (1997). A Cognitive Engineering Study on the Development of an Object-Oriented Process Modeling Formalism. Proceedings of the Thirtieth Annual Hawaii International Conference on System Science, 199-209, (1997) Joung, Y-J. and S. A. Smolka, A comprehensive study of the complexity of multiparty interaction, Journal of the ACM, vol. 43, no. 1, pp.75-115, 1996. Latour, B. (1993). We Have Never Been Modern. Brighton, Harvester Wheatsheaf. Law, J. (1992). Notes on the Theory of the Actor-Network: Ordering, Strategy and Heterogeneity. Systems Practice 5: 379-393. Lynch, Michael (1985). Art and Artefact in Laboratory Science: A Study of Shop Work and Shop Talk in a Research Laboratory. London: Routledge and Kegan Paul. Lynch, Michael (1993). Scientific Practice and Ordinary Action: Ethnomethodology and Social Studies of Science. New York: Cambridge University Press, MacDonell, Stephen G. (1994). Comparative review of functional complexity assessment for effort estimation, Software Engineering Journal 9(3): 107-116 Martin, D. and Sommerville, I. (2004). Patterns of cooperative interaction: Linking ethnomethodology and design, ACM Transactions on Computer-Human Interaction (TOCHI), Volume 11 , Issue 1, , Pages: 59 – 89, ISSN:1073-0516 Rouncefield, Mark, John A. Hughes , Tom Rodden , Stephen Viller (1994). Working with “constant interruption”: CSCW and the small office, Proceedings of the 1994 ACM conference on Computer supported cooperative work, p.275-286, October 22-26, Chapel Hill, North Carolina, United States Sacks, H. (1992) Lectures on Conversation, vol. 1. Oxford: Blackwell. Schneberger, S. L. ad McLean, E. (2003). The complexity cross – Implications for practice. Communications of the ACM, 46(9), pp. 216-225. Seaman, C. B. and Basili, V. (1997). An empirical study of communication in code inspections. Proceedings of ICSE, Boston, MA, USA, pp. 96-106. Steward, D. V. (1981). The design Structure System: A Method for Managing the Design of Complex Systems, IEEE Transaction on Engineering Management, vol. EM-28, no. 3, August, pp. 71-74. Suchman, L. (1987). Plans and Situated Actions, Cambridge University Press, Cambridge, UK, Suchman, L. (1993). Do categories have politics? The language/action perspective reconsidered. In G. De Michelis, C. Simone, and K. Schmidt, (Eds.) Proceedings of ECSCW '93 The Third European Conference on Computer Supported Cooperative Work (September 13-17, Milan, Italy), Kluwer, Amsterdam, Netherlands, pp. 1-14. Tapper, J (1999). Topics and manner of talk in undergraduate practical laboratories. International Journal of Science Education, 21 (4), pp. 447-464. Xia, W. and Lee, G. (2004). Grasping the complexity. Communications of the ACM, 47(5), pp. 69-74. Yetton, Philip, Martin, Andrew, Sharma, Rajeev & Johnston, Kim. (2000) A model of information systems development project performance. Information Systems Journal 10 (4), 263-289. Number 10, 2005 http://www.ifi.uio.no/forskning/grupper/is/wp/102005.pdf