How design patterns taught me the art of effective brainstorming!

Over the last 4 months or so, I have been very lucky to spend a good amount of time working with newer developers in my team. The time spent was primarily around chalking down different approaches to solve a design problem and coming up with the best solution possible. Like every other problem in the “real” world, there are several potential design approaches which can lead to an effective solution.
The beauty of a good design brainstorming discussion is to go over all the possibilities, no matter how trivial the idea might seem at the onset! A couple of years back , one of my mentors taught me an in-valuable lesson which I still carry around — “In a brainstorming session, a leader/facilitator should take sides of the minority ( the introverts & the quiet ones ) and challenge the majority ( team members who are vocal about their ideas and more often than not … are correct ). It not only imparts confidence in the subdued personalities of the group but also the challenges imposed by the leader to the majority class, brings about a clarity in the thought process of the collective group.”
It takes a lot of self awareness to master the art of facilitating a brainstorming discussion. It might sound counter-intuitive but in reality , YOU don’t really have to know ANYTHING in order to solve a complex problem. YES!!! As I practice the above trait steadily, I also wanted to share my experiences and make an attempt to distill these thoughts for the developer community that I am part of…
As a developer, I go back to stuff — Design Patterns, that help me understand the “softer” aspects of leading highly productive teams , teams that compete with themselves for excellence. Here is my attempt to connect the dots …
Abstract Design Pattern:
Technical Intent : A hierarchy that encapsulates: many possible “platforms”, and the construction of a suite of “products”.
It is absolutely important for the facilitator of the discussion to give an equal opportunity to everyone to put forth their thoughts. Typically in discussions, while solving a complex problem , a group gets romanticized by an idea and gets attached to one way of thinking. Successful “brainstormers” resist the idea of committing to one lane early in the discussion just like Abstract Factory pattern!
Iterator Design Pattern:
Technical Intent : Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
A good team always consists of members with complimentary strengths. It reaches the pinnacle of productivity by harnessing the collective intelligence. A good facilitator must ensure that all participants get an equal face time at the discussion table while making sure that there are no passengers! Going round the table to get perspectives of people is a great way to keep the discussion going in the right direction. When you add conflicting perspectives, the resulting solution that emerges is ALWAYS better than the one group started with.
Decorator Design Pattern:
Technical Intent: Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
Once the discussion is over, a summary of the discussion and the action items provides the next step. The key for the facilitator is not to take the podium/limelight here. A decision made post brainstorming should remain .. one of the team and by the team. Members of the group who are typically quiet ( and hence better listeners ! ) must be asked to assign action items to other group members. This makes everyone involved in the discussion to be a stakeholder and committed to the teams problems.
One must embrace that “Confusion is the root to clarity for everything” . Innovative and highly effective teams find their own way in tackling the most complex problems, Innovation demands a lot of execution, how you execute is directly proportional to the culture of your team. Culture can sometimes be a deterrent or it could be a source of competitive advantage.
Through effective brainstorming , “A Team” figures out things that they are saying YES to and more importantly are confident about things they are saying NO to!