Así es como me he acercado a esta área mientras llevaba el papel de wanna be sysadmin / devops. La mayoría de los siguientes serán solo principios generales que trato de seguir y no específicos del Chef.
Terminé yendo con Puppet porque descubrí que había más recursos en ese momento y me sentí más fácil de recoger.
Miré los diversos módulos precompilados disponibles para cosas como apache, php5, etc. Muchos de ellos parecían hacer mucho más de lo que necesitaba y no estaban tan familiarizados con la plataforma que no confiaba en lo que estaba sucediendo. Decidí que sería más simple para mí identificar lo que necesitaba hacer en cada tipo de nodo.
Comencé el proceso aprovisionando el entorno de desarrollo local del equipo (vargrant + caja virtual). Para cada servicio / componente creé un módulo: php5, apache2, redis, mysql, etc.
Una vez que el entorno de desarrollo era estable / funcionaba, comencé a desarrollar el entorno de control de calidad. Definí tipos de nodos genéricos para servidores web, redis, barnices, etc. que reutilizaron los mismos módulos que dev. Una vez hecho esto, la puesta en escena y la producción necesitaban cambios mínimos para comenzar a funcionar.
Mientras revisa y escribe sus recetas / plantillas, debe considerar cómo podría reutilizarse / generalizarse. No codifique cosas como rutas o usuarios / grupos que puedan cambiar entre distribuciones / proyectos / entornos. Dado que está buscando un enfoque generalizado, supongo que un gran obstáculo tratará con las diferencias entre las distribuciones * nix.
Lo más importante, mantener es simple. Automatice / estandarice las partes más importantes / lentas del medio ambiente. Iterar, evolucionar.