When developing and delivering large, complex systems it can be all too easy to only focus on features and overlook software qualities specific those related to software architecture. Being agile, with its focus on extensive testing and frequent integration, has shown that it can make it easier to deal with issues related to evolving the architectures, specifically when trying keeping the system working while making significant improvements when adding functionality. However, time has shown that various Agile practices are not sufficient to prevent or eliminate Technical Debt which can ultimately affect reliability. It is important to recognize what is core to the architecture and the problem at hand when evolving an architecture. If there is not enough attention on the architecture and code base, ultimately technical debt will creep in to the point where it can become hard to delivery quickly and with confidence.
Two important principle that can help teams deliver more quickly and with confidence is to focus on code quality and delivery size. Small frequently delivery with constant attention to a good code base is crucial to being able to sustain faster delivery with confidence. Often teams evolve to continuous delivery with some limited success, however issues arise when there is not good validation through tests and constant attention to the code quality. Practices that can help keep the code clean or from getting muddier include: Testing, Divide & Conquer, Gentrification, Quarantine, Refactoring, and Craftsmanship. This talk will examine techniques such as Continuous Integration, Continuous Inspection, Continuous Delivery as well as other techniques to pay good attention to code quality allowing teams to delivery more quickly and with confidence.