One of the principal values of Agile Software Development is the priority given to working software. In other words, agile development teams value working code over documentation, complex architectures, and other extraneous artifacts. This does not mean that Agile teams disregard these artifacts, it only means that they value working software as more important.
The value of working software translates into many design and development practices; however, none may provide a more significant productivity boost than the practice of "Simple Design." Whether you work in an agile or more traditional environment, consider using simple design to boost your team's output.
Simple design refers to the practice of designing software components in a way that meets only the requirements set forward by the business. The practice encourages architectures that postpone the design and development of features until they are needed. By using this design technique, teams often are able to avoid bloat and spend critical cycles on developing business-critical features.
Eliminating code bloat increases productivity in many ways. First and foremost, it means that team members are developing features that are actually needed instead of features that they assume will be needed in the future. Secondly, simple code is easier to maintain. Bloat, especially bloat that includes complex designs, increases the potential for bugs, increases the maintenance associated with the feature, and reduces a team's ability to easily add additional features. Finally, complex architectures often can be a source for performance bottlenecks. Simple design often eliminates performance tuning cycles and allows the team to focus implementing new features rather than tuning existing code.
A critical part of implementing simple design on any team is recognizing that the simplicity of a given design is often relative to the situation. A team's skill set, a project's functional requirements, and other factors all contribute to determining the simplicity of a design. What is simple for a team of C++ engineers developing embedded software may be significantly different from what is considered simple for a team of Java developers implementing a web application.
A renewed focus on simple design can have a significant impact on a team's productivity. Remembering to design and develop software that meets the requirements but does not introduce unneeded complexity will provide a team with more time to focus on developing new features and also may lead to fewer bugs and ultimately higher quality software.
About the Author
David DeWolf is the chief technical architect and founder of Three Pillar Software, Inc. He works with mid-sized and Fortune 1000 companies to establish corporate standards that promote best practices and agile development. David has over eight years of commercial software development experience and is a member of the Apache Software Foundation's Struts, Tiles, and Portals projects. David actively participates in the Java Community Process as a member of the Java Portlet Specification Expert Group and is the author of various online publications.