The latest in Zendesk’s excellent “Software Art Thou?” meetup series saw the UK’s Kevlin Henney addressing a packed house (of over 100) in Melbourne on the evening of 7th March.
Kevlin is an independent consultant, speaker, writer and trainer. His development interests are in patterns, programming, practice and process. He is co-author of A Pattern Language for Distributed Computing and On Patterns and Pattern Languages, two volumes in the Pattern-Oriented Software Architecture series. He is also editor of 97 Things Every Programmer Should Know and 97 Things Every Java Programmer Should Know.
The talk was advertised as follows:
“It’s just semantics.” How many conversations about philosophy, politics and programming are derailed by this thought-stopping comment?
Semantics is all about meaning. If there is one thing we struggle with and need to get better at, it is the search for and clarification of meaning. The world in which a software system lives is filled with meaning. The structure, concepts and names that inform the code, its changes and the mental models held by developers and others business roles are expressions of meaning. The very act of development is an exercise in meaning — its discovery, its formulation, its communication. Paradigms, processes and practices are anchored in different ways of thinking about and arriving at meaning.
But just because we are immersed in concepts of meaning from an early age, and just because the daily work of software development is about wrangling meaning, and just because it’s just semantics, that doesn’t mean we’re necessarily good at it. It takes effort and insight. Let’s talk about what we mean.
Kevlin’s talk was titled “What do you mean?” which he quickly modified to “WTF do you mean?”. He kicked off by talking about abstraction and this quote from Dijkstra:
The purpose of abstraction is not to be vague but to create a new semantic level in which one can be absolutely precise
He pointed out that when we’re criticized for trying to be precise with language with statements such as “It’s just semantics”, we need to remember that this literally means”It’s just meaning” so why wouldn’t we seek that?!
Turning specifically to software development, Kevlin argued that code, tests, scripts, etc. are all “code”, literally the codification of knowledge. Software development, to him, is a process of knowledge acquisition through learning, communication and social negotiation. Software architecture is a model of participation with design comprising synthesis and analysis (which are opposites of each other).
An Ernest Hemingway quote came next:
The only kind of writing is rewriting
Kevlin argued that software development is the production of variation, it’s not manufacturing – kudos to him for this messaging, it’s still all too common to see this ill-placed manufacturing/factory model placed on software development and it leads to nonsense like “Quality Assurance” when we really should be talking about testing. He also made the good point that what we do is straddling natural and programming languages.
Kevlin said that the domain (whatever it is) always looks very different from the inside and that:
Your customer doesn’t mean what they say
They use their terms and context, they leave out significant details (what they don’t say), they make assumptions, and actually don’t know what they want in the first place (it’s just a property of humans)!
As an argument for iterative development and the idea of slowing down to become faster, he quoted Neil Gaiman:
You learn from finishing things
There is a big difference between speed and velocity, with the latter being overloaded by the agile community. He claimed speed often leads to us “building the wrong thing brilliantly” rather than going slower in the right direction.
He made another excellent point as he was close to finishing up around our modern fascination with “prioritizing by business value”, with the suggestion we say “estimated business value” as this judgement of value is itself prone to error.
This was a very professionally-delivered talk, serious in nature but delivered with anecdotes and some dry British humour along the way, supported by a very nice slide deck.
Zendesk always put on a great meetup and this was no exception. Their space is large and airy with excellent audio visual facilities plus they lay on a lot of finger food and a well-stocked (and varied) bar service. The quality of their presenters is also always top notch and, although I wasn’t familiar with Kevlin and his work, this was a really engaging (even after talking non-stop for seventy minutes!) and interesting talk on a topic that gets scant treatment in the software development industry – and also in testing, specifically. Many of us in the context-driven testing community are often accused of playing semantic games but, as Kevlin ably demonstrated, conveying meaning is critically important and genuinely difficult to do well.