I should have written this a long time ago. One of the most universal lessons I’ve learned as a consultant is to be careful with terminology and jargon. Context, industry, experience all play a factor in how people will interpret what you say.
At one client in particular, it got so bad that I regularly threatened to create a swear jar that was for ambiguous terms instead of profanity. This was inspired by a long argument about control tables, only to learn that everyone in the room had a different definition of control table.
Examples:
Currently html 5 is a hot term, and the source of a lot of argument. Many people mean a host of technologies when they say html 5, including css 3, etc. So much so that the standards people have gone to using just “html” when referring to specifically html 5.
I regularly think developers misunderstand the term n-tier application (or n-tier architecture), and this is part of a larger problem of sloppy use of “layer” and “tier”. Architects generally are more precise, and use tier to indicate a boundary (process or network), while layer is a component that will run in process. In the .Net world, anything using a remote call (even to a process on the same box) like WCF, SqlServer, MSMQ, etc would be a change of tiers, while multiple DLLs in the same process are just layers. Often times, when discussing a n-tier application, developers will respond as if you are talking about a 3-layer business application with a UI layer, Business Logic Layer, and Data Layer. What’s confusing about this, is that such a 3-Layer architecture in a ASP.Net world is actually part of a 3-tier application, where the html, javascript and css on the client is considered Tier 1. The ASP.Net web/application server is considered Tier 2, and the database server is Tier 3 (even if it is running on the same physical machine because it is out of process). And the 2 layers (UI and Data) that the developers are confusing with tiers, are in fact responsible for managing the different tiers (web content and database interaction).
When I started writing this post, I asked for suggestions on twitter. The first response mentioned agile, which is certainly a bombshell of terminology. It is a methodology with practices in multiple areas of a project. How many teams do you know that say they are agile, by which they mean they don’t have a process (and don’t document)? A work contact of mine regularly describes a group of cowboy coders we are familiar with as Agile because they’re boss came over and yelled requirements at them, and they worked all weekend to implement. Agile is a reaction to the realities that caused that environment, but I doubt that any real Agile practitioner would describe that as an Agile team. And how many teams have started calling they’re morning meetings a scrum without any real implementation of Scrum?
What To Do?
In order to manage this better in my own day to day work, I have made it a point of regularly looking up terms that I feel I understand at a high level, but lack some certainty about it. You don’t need to read entire books or long articles on every topic you come across, but definitions combined with articles or posts that provide some context for use help.
And the next time you feel that terminology could be the issue, just ask the person to step back and clarify what they mean by the term. You don’t have to come of as ignorant of the subject matter, just make a simple statement like, “I think the implication and meaning of the term X is at the heart of what we are talking about, can we take a step back and make sure that we all our talking about the same thing?”
The Really Hard Cases:
I think examples like html 5 and n-tier where one bad definition has almost universally taken hold are the hardest to deal with. Which term do you use? It seems obvious to say that you want to use the correct term, but do you want to spend all of your time explaining that you mean the lesser-used more-accurate definition?
In these cases, I simply try to avoid the terms, or add some kind of specifier to the statement. For example, let’s say I was recommending training on the new and upcoming Web Standards (html 5, css 3, javascript). Rather than say “I’d like our developers to train in html 5”, say “I’d like our developers to train in the html 5 way of doing sites.” In extreme scenarios, you can stretch that out to explicitly say “html 5, css 3, and javascript.”
I could write a book on the number of times I’ve heard people misuse the term Service Oriented Architecture during my time as a consultant. I’ll sum up by saying this, SOA has nothing to do with Web Services. Web Service is merely one of many transports you could choose to implement SOA. But the mere presence of Web Services is no more an indication that you are in a SOA environment than the an engine is evidence that you have a car.
Finally, take care when using terms that people are sensitive about. Telling someone who has made a point of learning and practicing Agile that your team was “basically Agile” because you ran around changing on a whim is offensive to the time and investment that person made in learning
More Examples
Do you feel confident that everyone one your team would define these terms in compatible way? How sure are you that your definition is right?
- Agile
- Unit Test
- Functional Test
- Integration Test
- System Test
- Specification
- Requirement
- Layer
- Tier
- Physical Architecture
- Logical Architecture
- Instrumentation
- Testable Code
- Document
- Entity
- Messaging
- Workflow
- Automated Workflow
- System Workflow
- Document Workflow
- Service
- Pattern
- Framework