------------------- Being precise 2020-02-06 ------------------- One of the most important skills: being precise with language Most tech literate people will have experienced the following: A friend or family member asks you for help, their internet connection does not work. They describe it as "my internet is broken". But what does this mean? Does a specific website not work? Do they get 500 errors? Some proxy error? Does the computer have networking at all? Are DNS lookups borked? Of course one would not expect a user to describe any technical details, but the generic "it's broken" does not help at all. A bit more detail could be provided by any user. My experience is, they simply have not learned the relevant skill. Which is to be precise in wording and description. I think most people never had to learn this skill as they do not need it very often. Human language (with exceptions, i am sure) is full of implicit meaning and ambiguity. Many things only make sense or are useful in context. In contrast, engineering disciplines rely on exact phrasing, so no ambiguity is left and no interpretation is possible. If it's describing a software feature or designing an electrical circuit, precision is key. My perspective is software, where lack of clarity can mean implementing the wrong feature or, as I have often experienced, waste of time. Often a project manager writes a feature request as pages and pages of definition. Which in itself is a good thing, and a huge step up from the horrifying "development by hollering" where everything is ad-hoc and nothing really is thought through. Despite the verbosity of such documents, I many times find myself picking apart almost every paragraph and coming back to the author with as many questions. This is not meant as a bashing exercise, and I do not expect a product manager to excel in this skill. Even as they have the expertise in the domain in question, or at least should have, they do not necessarily realise the ramifications of some of the details. Which means that as the engineers, we have to be even more vigilant in finding all the ambiguities and clear them up. Being precise is useful in all kinds of different things. The one already discussed is asking the right questions the right way. To be precise in this area means expressing a question in a way that the person answering knows what exactly you want an answer for. "What do you mean with this sentence?" becomes "I think you mean x, but based on the rest of this document, this could also mean y or z. Which one do you refer to?" Since asking the right questions is itself an important skill, being precise with them is pretty damn important. Describing problems is the other big one. We have all seen the bug reports of the form "it's borked", like in my example above. Since we are engineers we should strive to do better. Never spare the time or effort to research, double-check and cross-check your problem. Narrowing down the space with negative tests and the process of elimination brings us pretty close to describe the problem in sufficient, precise detail, and, again, ask a good question. Doesn't really matter if it's an issue on some bug tracker or the request for help from a colleague in the office. Or simply writing documentation. I find myself regularly rewriting and rearranging documentation for the work I do. Describing the test cases I came up with, technical docs or information for users and colleagues. It takes considerable effort to make them as precise and useful as possible. Of course this means that writing such documentation with care is time consuming, and in my experience underestimated all the time. Terminology is another factor that gets often overlooked. Every domain has it's own set of special terms, often with more than one meaning. Or two words mean the same, but only in a special context. Being precise here means always use the exact right word, even if another would mean the same in this context, but not in another. Reducing inconsistences is vital. Explain the specific meaning of a word in the current context if it can have more than one. Be careful with the language your non-technical users or clients use. I write software for a big multi-national corporation. What one department calls something, another calls it differently. Or they use the same words, but for different things. Always disambiguate. This skill can always be improved on, and as I continue to learn I'll try to become better at it. If you have a junior under you wing, try to educate them on this. It'll make both your lifes better.