sábado, 27 de abril de 2013

Spotify: la ingeniería IT en el siglo XXI

Llevo un tiempo estudiando cómo diseñan el futuro de la IT y en especial la parte que afecta directamente a la ingeniería de sistemas. Recientemente me he centrado en el análisis de Spotify por ser una de las start-ups mas importantes del momento y que curiosamente no tiene su sede central en California sino en Europa, concretamente en Estocolmo. Antes de comentar su método de funcionamiento interno me gustaría hablar un poco de cómo funcionan las empresas tradicionales. Y creedme que las conozco bien porque llevo bastantes años trabajando en una de ellas.

En una empresa de IT tradicional existe una fuerte jerarquización. Internamente tenemos directores generales, directores de departamento, jefes de area, responsables de unidad, jefes de proyecto, técnicos, etc. La comunicación entre las diferentes partes de la empresa en la mayoría de los casos es de abajo a arriba. Unido a la alta jerarquización hace que la comunicación sea poco fluida y muy susceptible de sufrir ruidos en las retransmisiones. En los procesos de aprobaciones tambien se debe seguir esta estructura rígida y las fases pueden extenderse incluso fuera de la empresa implicando validaciones de aun mas alto nivel (Consejerías/Organismos). Como os podeis imaginar, este desarrollo hace que sea especialmente lento el tramite de cualquier solicitud. Es algo que diariamente SUFRO (en mayúsculas)  en los procesos de compras, por ejemplo. Pero pasa con muchos otros procedimientos. Esto convierte a la empresa en un dinosaurio con graves problemas de adaptación a los cambios y que se mueve a paso muy muy lento. El trabajo interno y responsabilidades suele estar diluido a nivel de Unidad. Esta unidad es responsable de proveer un determinado servicio (ya sea interno o externo). Cuando alguien necesita algo que provee otra unidad debe realizar una solicitud que impilar seguir el flujo interno de aprobaciones tedioso anteriormente comentado. En definitiva llegamos a un escenario en el que las solicitudes, y su gestión (aprobaciones, pasos de una jerarquia a otra, etc), consumen un tiempo significativo del trabajo, ya bien sea por la gestión directa o por lo tiempos que la solicitud se lleva en transito de un estado (unidad, o area) a otro. Esto unido a un extraño proteccionismo que algunas unidades/areas infieren sobre determinados elementos llevan a crear lo que yo llamo reinos de taifas donde el sultán aplica un estricto control al flujo de información y lo protege como si de un reino se tratara.

Una vez puestos en antecedentes veamos cómo se estructura la IT en una empresa actual como Spotify.


En Spotify no existe una jerarquización fuerte. Son conscientes que el mudo IT se mueve rápido, muy rápido, y la organización debe estar preparada para responder de forma eficaz a esos cambios. Además es una empresa que se encuentra actualmente en un periodo de fuerte expansión. No se pueden permitir el lujo de consumir tiempo en estructuras rígidas que, en muchas ocasiones, aportan poco o nada al desarrollo del producto que es el foco del negocio.

Con esta filosofía Spotify se organiza internamente en lo que ellos denominan squads (escuadrones). Estos escuadrones debe ser completamente autónomos, es decir, su trabajo no debe depender del que hagan otros. Incluso si entre varios escuadrones hay dependencias siempre existe una forma en la que un escuadrón pueda moverse independientemente. Esta estratégia en la definición del grupo es clave para asegurar la agilidad que requieren. Si un escuadrón necesita infraestructuras para probar un nuevo servicio, o hacer un desarrollo, la toman directamente de una plataforma de autoprovisión. En su filosofía está el hacer uso de metodologías Agile pensando en la mejor forma para resolver un problema y buscando simplicidad: pienso, hago una pequeña prueba, evalúo,  ajusto y si se adapta a lo que se requiere se incluye como solución en la empresa. Conceptos básicos que llevan en las ingenierías con mas solera (aeronautica, construcción) aplicándose con éxito hace tiempo.

Compartir la información es clave. No existen reinos de taifa, como en las empresas tradicionales, sino que toda la información está compartida para toda la empresa. Por ejemplo, el código que se genera está centralizado en un servidor GIT al que todo el mundo tiene acceso. Cualquiera puede aportar cambios a cualquier parte y esto asegura que el producto siempre se mueva hacia delante. Hacen uso de tecnologías de software libre siempre que es posible y casi no utilizan software propietario. Promueven el talento dentro de la empresa y la movilidad entre los escuadrones de forma que cada una de las personas pueda sentirse valioso y aplicar su conocimiento y experiencia en aquellas partes donde cree que es mas necesaria. Internamente promueven la realización de hackdays en los que la gente se relaciona y puede probar ideas un poco mas locas. Son conscientes que potenciar el talento y favorecer su desarrollo es clave para el éxito.

El cliente de Spotify es el producto core de la empresa. Para su desarrollo se divide éste en particiones de características del que luego uno, o varios escuadrones, desarrollarán:


Divide y vencerás, es la estrategia que siguen muchas de las grandes empresas hoy en día y es que para conseguir el éxito es imprescindible pensar a lo grande. Al igual que los escuadrones las particiones de características se hacen de forma que no existan dependencias entre ellas (o de existir que sean de bajo acoplamiento). Esto asegura que ante el fallo de una característica el resto funcionen con normalidad.

Esta filosofía de trabajo y forma de organización requiere que la provisión de infraestructuras sea muy ágil. En Spotify se organizan de forma que los escuadrones tengan mecanismos de autoprovisión disponibles bien en datacenter propios, cuando el servicio requiere una baja latencia y una alta confiabilidad, o externos tipo AWS. La decisión dependerá de los requisitos del servicio (criticidad, localización geográfica, etc). Muchos de estos tendrán como denominador común la necesidad de comunicación entre diferentes localizaciones y una capacidad de almacenamiento potencialmente alta. Hacer uso de tecnologías tipo ZeroMQ o Cassandra se tornan claves en el desarrollo de la característica. Cada escuadrón monitoriza los servicios de los que son responsables para poder detectar cuellos de botella y realizar nuevas provisiones, cuando sean requeridas. Spotify está trabajando en un mecanismo que permita la provisión automática (sin intervención humana) de infraestructuras cuando estas sean requeridas, pero por ahora esta tarea depende de los hackers:


En conclusión la cultura de Spotify se fundamente en:

  1. Mejora continua: incluyendo nuevas características  promoviendo el talento de los ingenieros dentro de los escuadrones, etc.
  2. Desarrollo interactivo: cada escuadrón es autonomo para desarrollar lo que crea adecuado, generalmente bajo el modelo de Demo and release.
  3. Simplicidad: Un concepto heredado de las ingenierías mas tradicionales reduciendo los problemas mediante aproximaciones de divide y vencerás y generando partes independientes que se integren entre sí.
  4. Confianza: en sus escuadrones lo que reduce, e incluso en algunos puntos elimina, las necesidades de jerarquias de aprobación.
  5. Liderazgo de servicio: En la que los gestores se encargan principalmente de potenciar el talento mas que en dictar soluciones, resolver problemas entre escuadrones que no puedan ser resueltos por ellos mismos (en escasas ocasiones) y el coaching de los ingenieros.
Bienvenidos a la IT del siglo XXI.

No hay comentarios: