Page 78 -
P. 78

3.1   Agile methods  61


                                       5.  Many organizations, especially large companies, have spent years changing
                                          their culture so that processes are defined and followed. It is difficult for them to
                                          move to a working model in which processes are informal and defined by devel-
                                          opment teams.

                                         Another non-technical problem—that is a general problem with incremental
                                       development and delivery—occurs when the system customer uses an outside organ-
                                       ization for system development. The software requirements document is usually part
                                       of the contract between the customer and the supplier. Because incremental specifi-
                                       cation is inherent in agile methods, writing contracts for this type of development
                                       may be difficult.
                                         Consequently, agile methods have to rely on contracts in which the customer pays
                                       for the time required for system development rather than the development of a spe-
                                       cific set of requirements. So long as all goes well, this benefits both the customer and
                                       the developer. However, if problems arise then there may be difficult disputes over
                                       who is to blame and who should pay for the extra time and resources required to
                                       resolve the problems.
                                         Most books and papers that describe agile methods and experiences with agile
                                       methods  talk  about  the  use  of  these  methods  for  new  systems  development.
                                       However, as I explain in Chapter 9, a huge amount of software engineering effort
                                       goes into the maintenance and evolution of existing software systems. There are only
                                       a small number of experience reports on using agile methods for software mainte-
                                       nance (Poole and Huisman, 2001). There are two questions that should be consid-
                                       ered when considering agile methods and maintenance:


                                       1.  Are systems that are developed using an agile approach maintainable, given the
                                          emphasis in the development process of minimizing formal documentation?

                                       2.  Can agile methods be used effectively for evolving a system in response to cus-
                                          tomer change requests?

                                         Formal documentation is supposed to describe the system and so make it easier
                                       for people changing the system to understand. In practice, however, formal docu-
                                       mentation is often not kept up to date and so does not accurately reflect the program
                                       code. For this reason, agile methods enthusiasts argue that it is a waste of time to
                                       write this documentation and that the key to implementing maintainable software is
                                       to produce high-quality, readable code. Agile practices therefore emphasize the
                                       importance of writing well-structured code and investing effort in code improve-
                                       ment. Therefore, the lack of documentation should not be a problem in maintaining
                                       systems developed using an agile approach.
                                         However, my experience of system maintenance suggests that the key document
                                       is the system requirements document, which tells the software engineer what the
                                       system is supposed to do. Without such knowledge, it is difficult to assess the impact
                                       of proposed system changes. Many agile methods collect requirements informally
                                       and incrementally and do not create a coherent requirements document. In this
   73   74   75   76   77   78   79   80   81   82   83