Programmers often use figurative metaphors to help others understand their novel designs. Research by cognitive linguists, such as George Lakoff, shows that metaphors are more fundamental to the way we think: the only way we can conceive of and communicate about abstract concepts is to relate them, by metaphor, to our physical selves. And you don't get much more abstract than software! We usually do not notice the metaphors we are using when describing software. However, careless use of metaphor can hinder how we design software, communicate about software design and organise ourselves to collaborate on software development. If we cannot avoid metaphor we must use it to our advantage and avoid its pitfalls. I'll share some of my own experiences of using metaphor in software systems and teams, both successful and unsuccessful.
Presented at the Agile Turkey Summit 2019.