As engineers, we constantly grapple with the challenge of creating solutions that are efficient, scalable, and maintainable. A key aspect that can make or break our projects is the ability to establish a common understanding among team members. In any team, individuals possess varying mental models, skills, and experiences, leading them to arrive at different abstractions. These divergent abstractions may introduce misunderstandings and hinder effective collaboration. Abstraction serves as a bridge that enables team members to navigate the diverse mental models that shape their perceptions of concepts.
Each team member arrives to a different abstraction (A, B, C, D) from entirely different angles.
The goal is to get everyone to arrive to a common abstract understanding (△). Use that to drive the conversation and problem solving, then approach the concrete solution (E) from the same starting point.
Example
Software architect working with a team of four on a complex problem. The four people think about the problem and the solution in different ways:
(A) Component model diagram in LucidChart
(B) Class model diagram using UML
(C) Pseudo code
(D) JavaScript playground on codepen.io
Led by the architect, eventually the team arrives to a common, abstract view (△) – a one-pager annotated diagram using C4 in Mermaid.
Team builds a web app (E) on the MEVN stack, arriving to the concrete implementation.
Conclusion
The ultimate goal of achieving a common abstract understanding is not to suppress individual creativity or to homogenize approaches. It creates a harmonious collaboration environment where everyone’s insights are valued and leveraged. Additionally, it fosters a sense of collective ownership and responsibility for the project. Rather than working in isolation, team members become invested in the overall success of the solution. It promotes clarity in requirements interpretation, reducing the likelihood of misunderstandings and rework.
As a result, the team’s productivity improves.