Sí, debe codificar contra interfaces en lugar de implementaciones conocidas, y sí, debe crear interfaces primero en lugar de hacerlas emerger de su propio código.
Las razones de ambas recomendaciones son en gran medida las mismas: la programación de computadoras se basa principalmente en factores humanos. Muchos encuentran esto sorprendente, pero considere: hay un número casi infinito de formas diferentes para resolver el mismo problema de computación que funciona igualmente bien. Casi todos son completamente imposibles de entender para cualquiera que no los haya escrito (o, de hecho, al autor poco tiempo después).
De ello se deduce que una buena ingeniería de software es en gran medida acerca de cómo lograr el efecto deseado (cálculo correcto con eficiencia razonable) de una manera que permita trabajar con el código fuente más adelante. Las interfaces y las API son una parte crucial de esa disciplina: le permiten pensar en un problema en un nivel de descripción a la vez. Esto es mucho más fácil que pensar en las reglas de coherencia de negocios y acerca de las implementaciones de listas vinculadas al mismo tiempo, y, por lo tanto, imponer tal separación de preocupaciones es mejor que permitir que el programador cliente para utilizar su código de la manera que más le guste.
Esto es difícil de creer para muchos programadores de cowboy, quienes están convencidos de que entienden todo lo que escriben, son mucho mejores que los pensadores promedio y pueden manejar toda la complejidad que da a los programadores "menos" problemas. No ser consciente de los propios límites cognitivos es un fenómeno extremadamente común: esta es la razón por la cual las mejores prácticas en la organización de códigos son tan importantes (y, por lo tanto, a menudo ignoradas).
Para repetir, las interfaces y las barreras API son en gran medida buenas , incluso cuando solo cooperas contigo mismo. En cuanto a las bibliotecas externas, si traen consigo una API bien pensada, no veo ningún problema en usarla, ya que no se tiene que cambiar esa biblioteca por otra. De lo contrario, un contenedor o una capa anticorrupción puede ser una muy buena idea.