Emergent Design in Agile Software Development
Emergent design is a consistent topic in agile software development, as a result of the methodology's focus on delivering small pieces of working code with business value. With emergent design, a development organization starts delivering functionality and lets the design emerge. Development will take a piece of functionality A and implement it using best practices and proper test coverage and then move on to delivering functionality B. Once B is built, or while it is being built, the organization will look at what A and B have in common and refactor out the commonality, allowing the design to emerge. This process continues as the organization continually delivers functionality. At the end of an agile or scrum release cycle, development is left with the smallest set of the design needed, as opposed to the design that could have been anticipated in advance. The end result is a smaller code base, which naturally has less room for defects and a lower cost of maintenance.
As emergent design is heavily dependent upon refactoring, practicing emergent design without a comfortable set of unit tests is considered an irresponsible practice.
Read more about this topic: Emergent Design
Famous quotes containing the words design and/or development:
“Teaching is the perpetual end and office of all things. Teaching, instruction is the main design that shines through the sky and earth.”
—Ralph Waldo Emerson (18031882)
“The experience of a sense of guilt for wrong-doing is necessary for the development of self-control. The guilt feelings will later serve as a warning signal which the child can produce himself when an impulse to repeat the naughty act comes over him. When the child can produce his on warning signals, independent of the actual presence of the adult, he is on the way to developing a conscience.”
—Selma H. Fraiberg (20th century)