JH Rainwater "C贸mo pastar gatos": en el otro lado del desarrollo



Continuamos compartiendo extractos del manual para aquellos que se est谩n preparando para dirigir el equipo de desarrollo. En la parte anterior, hablamos de todo lo ajeno, que est谩 al acecho del l铆der t茅cnico en la nueva posici贸n, pero ahora volvemos a las cosas familiares y amigos, en realidad la programaci贸n. Aqu铆, el desarrollador de ayer puede sentir su elemento, pero no tiene que relajarse: el 谩rea de responsabilidad est谩 creciendo y cambiando. En Cat, presentamos una breve descripci贸n de todas las nuevas responsabilidades y consejos de adaptaci贸n que Rainwater trae en su libro.

La diferencia fundamental radica en dos matices. En primer lugar, el plomo entra mucho antes en el proceso y no se cierra hasta el final victorioso. En segundo lugar, mientras el desarrollador se enfoca en la tarea estrecha que se le asigna, su jefe revisa el producto en su totalidad, sin olvidar entrar en detalles cuando la situaci贸n lo requiere. Vayamos juntos con el autor en orden y tratemos de describir el papel del l铆der del equipo en cada etapa de la creaci贸n de la aplicaci贸n.

Definici贸n de requisitos y especificaciones.


Un buen techlide comienza a funcionar con el producto incluso cuando est谩 en estado perinatal, es decir, en forma de una idea general, solicitud o lista de funciones. Sin embargo, aqu铆 debe aclarar de inmediato: Rainwater cree firmemente que el desarrollador no debe participar en el trabajo de un comercializador o gerente de producto, o m谩s bien, debe evitar este escenario con todas sus fuerzas. No es que fuera imposible o reprensible para el "t茅cnico" comprender las realidades del mercado y los requisitos comerciales, pero combinar estos dos roles es muy dif铆cil. Entre otras cosas, existe un mayor riesgo de que el desarrollador interno gane y las caracter铆sticas del producto se adaptar谩n a los intereses del equipo programador, en lugar del usuario final. Es mucho m谩s f谩cil y seguro trabajar cuando la visi贸n general del producto en t茅rminos de su funcionalidad ya est谩 preparada y probada para su viabilidad por personas conocedoras.

Para la combinaci贸n de los dos roles, los desarrolladores que en nuestra clasificaci贸n a menudo pertenecen a la raza de los vaqueros a menudo abogan: anhelan los tiempos de "garaje" cuando peque帽os equipos fabricaban todo el producto desde y hacia y no hab铆a necesidad de interacci贸n externa. El autor tiene prisa por disipar todas las ilusiones sobre este puntaje: en condiciones modernas, la interacci贸n entre grupos t茅cnicos y no t茅cnicos deber铆a ocurrir regularmente, durante todo el ciclo de vida de la aplicaci贸n. Las primeras reuniones se llevan a cabo para la preparaci贸n conjunta de especificaciones. El gerente de desarrollo (o uno de los principales desarrolladores) se familiariza con la descripci贸n del producto, excluye todo lo que le parece injustificado o poco realista desde un punto de vista t茅cnico y toma el plan final para traducirlo al lenguaje de la tecnolog铆a. Luego, los grupos se re煤nen de vez en cuando para "verificar el reloj" y asegurarse de que la implementaci贸n no se desv铆e demasiado del plan original.

La frecuencia recomendada de tales reuniones es aproximadamente una vez a la semana, aunque, por supuesto, debe realizar ajustes en el ritmo general de desarrollo y las caracter铆sticas de la organizaci贸n de procesos para una empresa en particular.

Tambi茅n se necesitar谩n reuniones regulares por otra raz贸n: es probable que los intentos de desviarse del curso original provengan no solo del lado del desarrollo. La mayor铆a de las aplicaciones, para seguir siendo competitivas, est谩n en constante crecimiento con herramientas y capacidades adicionales. Por lo tanto, el proceso de considerar, evaluar y abandonar las ideas puede repetirse hasta el infinito, solo en una escala menor que para las especificaciones primarias. Es extremadamente importante para Tehlid mantenerse al tanto de los planes para el desarrollo del producto; esto no solo le da margen de maniobra desde el punto de vista organizacional (asignaci贸n de responsabilidades, determinaci贸n de t茅rminos), sino que tambi茅n le permite calcular de antemano las consecuencias para el sistema en general, su armon铆a y sostenibilidad

Antes de aceptar que una nueva funci贸n funcione, debe hacerse una serie de preguntas:

  • 驴Qu茅 impacto tendr谩 el cambio propuesto en la arquitectura del sistema a corto y largo plazo?
  • 驴C贸mo afectar谩 el cambio propuesto a la infraestructura de red en la que se llevar谩 a cabo?
  • 驴C贸mo afectar谩 el cambio propuesto la capacidad del usuario para interactuar de manera efectiva y productiva con este producto?
  • 驴Qu茅 impacto tendr谩 el cambio propuesto en las acciones de los empleados que tienen que trabajar estrechamente con 茅l, para implementar, para acompa帽ar?

Tales reflexiones ayudar谩n a identificar las trampas y establecer direcciones generales para el di谩logo con otros grupos.

Dise帽o


Cuando los requisitos son aprobados y bendecidos por todos los participantes en el proceso, llega el momento de lo que Rainwater llama coordinaci贸n de las decisiones arquitect贸nicas y de dise帽o. En otras palabras, la gu铆a t茅cnica necesita describir el sistema que realizar谩 las funciones especificadas en la etapa de especificaciones, y reflexionar sobre los componentes responsables de los procedimientos espec铆ficos. Es cr铆tico actuar en este orden:
Arquitectura primero, luego componentes.

El autor enfatiza esto muchas veces, porque muchos desarrolladores que no est谩n familiarizados con el arte del dise帽o del producto caen en esta trampa. Parece l贸gico tomar una lista de requisitos, prescribir los componentes necesarios para cada uno y considerar el producto como una combinaci贸n simple de ellos. Pero en realidad, este enfoque mecanicista da lugar a monstruos r铆gidos y aleatoriamente organizados que absorben todos los jugos de los desarrolladores involucrados en el apoyo al proyecto. Para evitar esto, debe ir hacia otro lado, de lo general a lo particular. Ya tiene una visi贸n funcional com煤n del producto con una perspectiva de desarrollo: debe "reflejarlo" en su visi贸n t茅cnica general con una perspectiva de desarrollo, es decir, arquitectura.

Arquitectura del edificio

Si recurrimos a una met谩fora trillada, la arquitectura es el esqueleto del producto, sobre el cual se construye la carne de las decisiones privadas sobre la implementaci贸n de los procedimientos. Revivimos un poco esta met谩fora, agregando una aclaraci贸n: el esqueleto debe afilarse para que crezcan nuevas extremidades. Los dos requisitos principales para la arquitectura son una organizaci贸n l贸gica clara de componentes y flexibilidad que agregar谩 nuevos a medida que el proyecto crezca.

Quiz谩s esta etapa en el desarrollo pueda llamarse la m谩s responsable: los expertos dicen que es precisamente el descuido de los problemas de arquitectura lo que a menudo conduce al colapso de los proyectos. Entre las causas comunes de falla, nombran:
  • Falta de pensamiento, organizaci贸n descuidada (o su completa ausencia).
  • Excesiva rigidez y sencillez del sistema, evitando su expansi贸n de acuerdo con las necesidades comerciales.
  • Excesiva interconectividad de componentes, falta de flexibilidad en la configuraci贸n.
  • Complejidad excesiva en los niveles superiores, lo que dificulta la modificaci贸n de los componentes b谩sicos.

En consecuencia, la tarea de construir arquitectura debe abordarse con toda seriedad, sin ahorrar recursos. Recuerde que est谩 sentando las bases con las que tiene que trabajar hasta el final: debe resistir todos los cambios que esperan el proyecto en el futuro. Este proceso es en gran parte creativo y visionario, pero los m茅todos est谩ndar de estructuraci贸n son 煤tiles para equilibrar el sistema. Por ejemplo, dibuje un diagrama de bloques con un conjunto completo de conexiones o incluso implemente un dise帽o simple (un conjunto de componentes de bajo nivel con ap茅ndices y valores de retorno) para asegurarse de que la arquitectura funcione en una proyecci贸n vertical. Es muy conveniente hacer esto 煤ltimo antes de comenzar el desarrollo de componentes reales de pleno derecho: eliminar errores con elementos de "juguete" es mucho m谩s f谩cil e indoloro.

Al final del trabajo en esta etapa, debe estar listo para responder las siguientes preguntas:

  • 驴C贸mo interactuar谩 el usuario con el sistema?
  • 驴Qu茅 componentes deben ensamblarse para garantizar el funcionamiento del sistema?
  • 驴Cu谩l ser谩 el mecanismo para la interacci贸n de componentes que asegure el funcionamiento del sistema?
  • 驴Qu茅 tecnolog铆as son las m谩s adecuadas para crear esta aplicaci贸n?
  • 驴C贸mo se supone que debe entregar el sistema al cliente?

Planificaci贸n de componentes

Cuando se desarrolla el marco general, es hora de profundizar en particular e implantar los componentes actualmente relevantes en la estructura org谩nica. La principal dificultad aqu铆 es resistir la medida necesaria de conexi贸n. Por un lado, los componentes no deben considerarse como contenedores estrictamente aislados para conjuntos espec铆ficos de operaciones, sino como un sistema de 贸rganos, cada uno de los cuales se comunica con los dem谩s, pero realiza sus funciones. Al mismo tiempo, se debe evitar una fuerte interdependencia entre las regiones, como resultado de lo cual la modificaci贸n de un componente conducir谩 a una cadena completa de cambios, o incluso mal funcionamiento, en todo el sistema.

La pila de tecnolog铆a se describi贸 en la 煤ltima etapa, ahora debe comprenderla en detalle. En la elecci贸n del idioma, las bibliotecas y, adem谩s, tiene sentido ser guiado no solo por motivos profesionales, sino tambi茅n estrictamente pragm谩ticos. Digamos, 驴tendr谩 suficiente personal competente para soportar sistemas construidos sobre la base de tecnolog铆as avanzadas, raras o complejas? Y viceversa, si da preferencia a las tecnolog铆as m谩s antiguas, 驴qu茅 tan prometedor es? 驴Permanecer谩n funcionando durante todo el ciclo de vida, comenzar谩n a surgir problemas de compatibilidad? Todos los problemas relacionados con las soluciones de hardware, la creaci贸n, la configuraci贸n y el mantenimiento de la infraestructura deben considerarse con el mismo cuidado.

Desarrollo y control de calidad.


Entonces, la planificaci贸n finalmente se completa y el proyecto comienza a funcionar: comienza el desarrollo real de la aplicaci贸n. El papel del l铆der t茅cnico en este proceso consiste principalmente en el monitoreo, para que todo vaya de acuerdo con los t茅rminos y est谩ndares; 茅l est谩 directamente involucrado en la creaci贸n de c贸digo, por regla general, solo en situaciones de fuerza mayor. En su mayor parte, el jefe realiza las funciones de un c贸digo policial, es decir, realiza revisiones cr铆ticas peri贸dicas del c贸digo para asegurarse de que no contradicen el marco arquitect贸nico y los principios b谩sicos de programaci贸n.

Durante las inspecciones, un l铆der t茅cnico puede encontrar diferentes tipos de errores. El agua de lluvia enfoca al lector en dos variedades:

  • Violaci贸n de normas . Esto incluye estilo, nombres, comentarios: en general, todo lo que ayuda a un tercero a comprender lo que est谩 sucediendo en el c贸digo, as铆 como la negligencia en el esp铆ritu de varios puntos de salida u operadores de GoTo odiados. Es necesario asegurarse de que todos los participantes en el proceso de desarrollo hablen el mismo idioma; esto hace que el c贸digo sea transparente y le permite desentra帽ar r谩pidamente movimientos err贸neos. Los nombres de par谩metros y variables deben indicar claramente su contenido, los comentarios deben ayudar a rastrear el c贸digo de los pensamientos de un desarrollador, justificar sus decisiones. Por cierto, si alguien del equipo se niega obstinadamente a comentar sobre el c贸digo, vale la pena considerar por qu茅. A menudo, esto es solo pereza o una peculiaridad de pensamiento, pero en algunos casos puede ser un s铆ntoma de que el empleado mismo no comprende realmente lo que est谩 haciendo: confundido o simplemente copiando partes del c贸digo de otra persona por una buena raz贸n. Tambi茅n es necesario monitorear cuidadosamente a aquellos que regularmente descuidan el manejo de errores: la incapacidad para identificar las fuentes de errores es una falla grave para el desarrollador.
  • La conectividad d茅bil y la fuerte interdependencia son dos 谩reas de perturbaci贸n que pueden considerarse juntas, ya que la presencia de una implica la presencia de la otra. Aqu铆, de hecho, todo depende del grado de ramificaci贸n y su tipo. Con un alto grado de ramificaci贸n en t茅rminos de salida, el funcionamiento del procedimiento implica el acceso a muchos otros procedimientos, lo que, por supuesto, no es deseable. La ramificaci贸n en la entrada, por el contrario, tiene un efecto positivo, ya que indica una encapsulaci贸n estricta. Si tiene dudas al analizar el c贸digo para estos par谩metros, ser铆a bueno dibujar un diagrama de bloques con una jerarqu铆a marcada de objetos. Revela de inmediato todo lo que necesita saber: 驴es posible rastrear el pedigr铆 del objeto, hay l贸gica en la disposici贸n de las flechas o todo parece desordenado?

Si la polic铆a del c贸digo detect贸 violaciones en estas y otras 谩reas, el procedimiento de arresto se ve as铆: el c贸digo se env铆a de regreso al desarrollador con los comentarios necesarios, el trabajo en el componente correspondiente se suspende hasta que se arreglen los defectos. Es altamente deseable que el desarrollador maneje esto 茅l mismo, aunque con consejos: si hace todo por 茅l, el componente de tutor铆a de la inspecci贸n del c贸digo se pierde.

No posponga la revisi贸n hasta mejores tiempos. En primer lugar, puede volver con fuerza en el futuro y requerir muchos m谩s recursos para solucionar toda la bola de nieve de los problemas. En segundo lugar, la teor铆a de las ventanas rotas tambi茅n funciona en la programaci贸n: el c贸digo desordenado y confuso genera a煤n m谩s c贸digo desordenado y confuso, simplemente porque parece v谩lido.

Finalmente, hablando del control de calidad, uno no puede dejar de referirse al problema del notorio factor humano. Rainwater recomienda que el gerente tome una posici贸n intermedia. Alg煤n grado de resistencia a la interferencia con el c贸digo es natural y benigno. Una completa disposici贸n a seguir las instrucciones de otra persona y aceptar la opini贸n de otra persona deber铆a incluso alertarlo; a menudo esto significa que al desarrollador, de hecho, no le importa lo que publica. Pero, por otro lado, la incapacidad de percibir cr铆ticas s贸lidas dificulta tanto el crecimiento profesional como el trabajo en equipo. En consecuencia, el deslizamiento tecnol贸gico tendr谩 que crecer la piel m谩s gruesa y no tener miedo de insistir en s铆 misma, sin tener una reacci贸n negativa a su coraz贸n.

Prueba


Aqu铆, es importante que el l铆der tenga en cuenta dos reglas b谩sicas: se deben realizar pruebas y organizar su conducta es su responsabilidad. Si la compa帽铆a tiene un departamento de pruebas que est谩 naturalmente involucrado en los procesos, entonces no habr谩 problemas con esto. Si no, tendr谩 que asignar un recurso de sus propias reservas para este asunto.
En el segundo escenario, seg煤n el autor, hay ciertas ventajas: la prueba es una habilidad 煤til para el desarrollador. Es especialmente 煤til atraer a los reci茅n llegados a estas tareas, para que puedan adquirir calificaciones r谩pidamente. Al principio, puede realizar tareas de prueba hasta la mitad de su tiempo de trabajo.

De lo contrario, para garantizar una buena calidad de inspecci贸n, es necesario asegurarse de que el producto no se cocine todo el tiempo en el mismo grupo; idealmente, debe probarse "al costado". Si una empresa tiene varios equipos de desarrollo, puede tener sentido acordar con otros l铆deres para crear un grupo mixto.

Source: https://habr.com/ru/post/480098/


All Articles