Хотя "термины важны и не важны", неправильный выбор термина иногда приводит к неправильному выбору понятия, выбору неправильного инструмента и реализации не того, что нужно.
Поскольку я занимаюсь системным программированием (это не та "система", тут речь о низкоуровневом программировании), в условиях, когда "нельзя просто взять более мощный компьютер", мне часто приходится разбираться с "реальными" программными конструкциями, которые возникли в коде, когда "прикладные" программисты пытались решить какие-то свои "прикладные" задачи. Они мыслят в терминах предметной области, а вот особенности языка, а временами и аппаратуры, иногда упускают из вида.
Один из примеров - случай с "кольцевым буфером", который я воспринимал как конкретный термин, а именно очередь, куда с одной стороны объекты помещаются, а с другой извлекаются в том же порядке. Разработчикам, которые написали этот код, на самом деле требовалось некоторое конечное хранилище с замещением. Проблема заключалась в том, что реализация этого буфера строилась на основе исходного термина, который не соответствовал реальному сценарию использования этого буфера.
Буфер был реализован и задействован в продукте. Подсистемы, работающие с данными, мешали друг другу, поэтому понадобилось вводить блокировки, чтобы упорядочить доступ к буферу. Система блокировок получилась сложной и регулярно всплывали проблемы, которые требовали доработок и исправлений.
Поскольку речь идет о некоторой низкоуровневой штуке, то и заинтересованных ролей тут немного - по сути только другие разработчики, которые должны в это хранилище класть и забирать данные. Требование к хранилищу естественное - в хранилище должно найтись то, что они хотят, причем обращение к хранилищу не должно надолго блокироваться другими частями кода. С точки зрения работы буфера содержание этих данных не имеет значения, только отметка о времени записи.
Из разговоров с разработчиками стало понятно, что некоторые данные нужны "только сейчас" в то время как какие-то другие будут нужны в течение последующих десяти секунд (в данных условиях это очень долго), поэтому удалять их нельзя. Причем о том, требуется ли данный блок данных хранить длительное время, известно сразу при получении этого блока. Следовательно, нет смысла обращаться со всеми блоками одинаково. Если присвоить им "срок жизни", то исходя из этого можно определять, когда та или иная ячейка буфера может быть переиспользована.
Как только появились слова "срок жизни", то появилось и понятие "буфер с устареванием" и после этого архитектура этого буфера "сложилась сама".