Search code examples
agilecomplexity-theory

How to make an Agile methodology work when developing long-term complex systems?


My team is building a product that has a lot of components that rely on each other. For example, whenever we add a new type of data to the system, we also have to add logging code to track the changes that use that data type. Or, when we add a new UI screen, we have to make sure that its strings are externalized so they can be translated. These things slow down almost every task we do, and sometimes one of the the steps gets forgotten.

The traditional way to handle this problem is to add required checklists and documentation and things like that. How do Agile methodologies handle it?


Solution

  • The design you describe sounds like it might be a little too tightly-coupled. A renewed focus on enterprise patterns (such as Inversion of Control, programming to interfaces, etc) could help a lot.

    If you are doing pair programming, you should be checking each other's work, making sure all of the i's are dotted and the t's are crossed.

    If you are doing Test Driven Development, your tests should not be passing until all requirements for that particular portion of the development effort are satisfied.

    If you are developing a large, complex system, you need experienced developers who understand the design and development process. You may also need a hands-on (read:coding) architect who can oversee the whole process.

    Oh, and checklists (despite their traditional nature) are good too.