Page 67 -
P. 67

52     BERENTE  AND  LYYTINEN
                    Both modern and traditional practices focus on iteration as reactive fixes or improvements based
                    on new information, or uncovered problems. Many modern methods, however, also anticipate
                    the need for and inevitability of new information, and proactively seek it. Thus, the difference is
                    not the presence of iteration, but, rather, the timing and visibility of it. With earlier visibility of
                    iteration needs, designers invite user input and thus relinquish a certain amount of control over
                    iteration decisions. Because this visibility is staged earlier, its granularity with regard to founda-
                    tional details and assumptions of the system development is also greater. Fundamentally, “iterative
                    development” is not necessarily more iterative. But it is likely to be more open, and the control
                    over iterations is shared and at a much more detailed level.
                      Consider the code as an iterating artifact, for example. All application software iterates over
                    its life even if its design methodology is the systems development life-cycle model (Davis, 1974).
                    Each version of a software system can be considered an iteration. As bugs are fixed or enhance-
                    ments added to code—even if consistent with the linear life-cycle method—any new instantiation
                    of code can be considered an iteration. When all or some portions of the code are compiled, the
                    result is an iteration of compiled code. Anytime a designer replaces or adds to any part of working
                    code, he has iterated over that code.
                      In the traditional life-cycle method, however, the user is not highly involved beyond listing
                    requirements. Management is not aware of each subsequent iteration, but sees only the code that
                    is presented at key milestones. The bricolage of everyday workarounds, failures, and changes is
                    neatly hidden from everyone except the designer himself—as are micro-level assumptions and
                    decisions that can have disproportionately large impacts on path-dependent future designs. As sys-
                    tems development has become more “iterative,” the veil hiding this practice has been progressively
                    lifted. Prototyping invited other developers, users, and managers into discussions at a more granular
                    level of detail sooner during development. When participating in this activity, those parties adopted
                    more control over the process. Risk analysis (Boehm, 1988; Lyytinen, Mathiassen, and Ropponen,
                    1998) that focuses on continued risk mitigation—rather than overly detailed requirements that
                    draw no real distinction of risks—exposes the key requirements of design to scrutiny outside of
                    developers. Pair programming (Beck, 2002) opens ongoing moment-by-moment deliberations
                    of an individual developer to observation and demands a dialogue with a fellow developer. This
                    observation indicates that the key contingency for distinguishing the level of iteration between
                    development practices is not whether one engages in evolutionary prototyping or not. Observations
                    such as the following indicate that a focus on iteration as such may be misplaced:
                      •  user involvement is a more important determinant of project outcomes than presence of
                        iterative development (Lichter, Schneider-Hufschmidt, and Zullighoven, 1994);
                      •  the success of any development, iterative or not, depends more on developer experience than
                        anything else (Boehm, 2002); and
                      •  for “iterative development” to succeed, the complementary practices such as co-location,
                        pair programming, and so on are essential (Beck, 2002).
                      Therefore, it is not the presence of iteration that primarily determines the outcomes of systems
                    analysis and design activity. Rather, these outcomes are determined by the activities that the types
                    and forms of iterations can enable and constrain. The black box of iteration should be opened
                    to understand structures and affordances of prescribed iterations and complementary processes,
                    and their effect on design process and its outcomes. Rather than asking whether an organization
                    should adopt “iterative development,” it is more applicable for organizations to ask what level of
                    granularity, visibility, and control over changes and decisions about design objects and processes
                    is appropriate at different times, and for different purposes of the design.
   62   63   64   65   66   67   68   69   70   71   72