In my experience as a designer on complex software projects, I have come to realize that all people involved on a product team (developers, designers, and stakeholders) need to share certain universal values which influence the design of a software product.
These values are:
Collaboration vs. process and protocol
Making the product work vs. defining how the product works
In short, the quality of design is a reflection of the quality of communication. Likewise, progress is measured by how much effort results in working software delivered to the customer.
Improving communication between designers and developers is as simple as placing designers side-by-side with the whole development team. The positive side-effect of doing this is a reduction in time to report issues and request changes.
Other positive side-effects of co-locating designers with the whole team might be:
Experimentation with novel and useful features
Fast and simple solutions to complex problems
Improvement of the overall customer experience
It seems counter-intuitive, but product design is not the conscious act of generating designs. Instead, it is rapid and continuous learning. Learning about how customers use the product, and pivoting in response to that feedback throughout every software development phase.
Customer feedback can be obtained through frequent usability testing with working software, and informal customer interviews that reveal underlying customer motivations and needs. By sharing information with the whole team through rich communication channels such as workshops and retrospectives, the learning is naturally integrated back into the software development cycle.
Design is an evolutionary and collaborative activity. When people embrace this fact, cool and interesting things happen.
Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.