I usually make it a habit to spell out abbreviation the first time I use them and include the abbreviation in parentheses, like Transport Layer Security (TLS). Later, after the first introduction I can safely assume people know it, like TLS.
Even for technical documents, if you expect your target audience to be familiar with the domain, nobody remembers every abbreviation every time. It also helps new readers to quickly familiarize themselves with the material (and might even help a few understand more than they would have done without expanded abbreviations).
What I have trouble with is the spelled out versions. Every time I see some stupid newspaper article that says "HyperText Markup Language" or whatever, it takes my brain two or three seconds to process it and go "oh, duh, HTML".
- for the readers who already know the abbreviation, it's a waste of space and time
- for readers who don't, the words won't tell them much either - Transport Layer Security tells you about nothing about what TLS really is - besides, for those who are really interested, they can always look it up on Wikipedia (that way, they will actually understand it).
And "Transport Layer" should ring a bell to anyone familiar with the OSI model (for example, a student that has taken an introductory course on network protocols).
And yet in every scientific paper I have read they still spell out the abbreviations the first time. And these are written by experts in the field. Why? Because it removes ambiguity and makes it completely clear what you are talking about. What if in 20-30 years the acronyms change or fall out of favour? It happens all the time.
Even for technical documents, if you expect your target audience to be familiar with the domain, nobody remembers every abbreviation every time. It also helps new readers to quickly familiarize themselves with the material (and might even help a few understand more than they would have done without expanded abbreviations).