Para dar más detalles, estoy interesado en saber qué piensa la gente que necesita implementar mientras aún es un proyecto de un solo hombre (control de la fuente del equipo, documentación, compilaciones, etc.) y qué cosas no es necesario hacer hasta ese punto cuando llegue la segunda persona en el proyecto.
Cualquier persona con experiencia en moverse a través de este escenario, apreciará sus ideas.
Respuestas:
Lo que he aprendido (Intenté un orden diferente. Me equivoqué. Este es el orden en que las cosas se vuelven relevantes).
Ponga todo en el control del código fuente. Use algo a lo que todos tengan acceso y comience ahora mismo . Sin excepciones. Sin demoras No hay excusas.
Cree un área de control de calidad / prueba que esté totalmente separada de su entorno personal de "trabajo" o "desarrollo". Al menos una identificación de usuario separada. Idealmente en una VM separada.
Completamente separado No hay superposición posible con su entorno de trabajo actual.
Deje de probar más allá de la prueba unitaria en su propio entorno de trabajo. Prueba de código y unidad que haces "como a ti mismo". Todas las demás pruebas (integración, rendimiento, lo que sea) que realice en la VM separada. Nunca pruebes como tú mismo. Siempre pruebe como un usuario de control de calidad separado. Idealmente en una VM separada.
"Es bueno para mí", es algo malo tener que decirle a los miembros de su equipo. Muy mal. Debes descubrir qué están haciendo mal. Varias veces al día.
Planea escribir todo. Utilice una herramienta de marcado de texto sin formato (RST o Markdown o algo así) para que toda la documentación sea de texto sin formato en el repositorio de control de versiones. Una herramienta puede crear páginas HTML (es decir, Docutils para RST) o PDF o lo que parezca mejor. No utilice formatos de documentos propietarios (es decir, MS-Word). Es posible que no jueguen bien con algunos sistemas de control de código fuente.
Las primeras cosas que necesita escribir son las siguientes.
Cómo crear un entorno de desarrollo laboral. En caso de duda, cree una máquina virtual y realice toda la operación en esa máquina virtual. Asegúrese de que los pasos realmente funcionen y que la documentación sea clara . Líneas reales escritas en la línea de comando real tipo de claridad.
Cómo ejecutar el conjunto de pruebas unitarias. De nuevo. Asegúrese de que las instrucciones funcionen y no requieran pensar. "Escriba esto:" "Confirme que:" tipo de cosas. No es que los miembros de tu equipo sean estúpidos. Es que no recuerdas lo que estás asumiendo a menos que lo anotes todo.
Cómo ejecutar el conjunto de pruebas de integración.
No pierda mucho tiempo describiendo la arquitectura o los principios de diseño. Primero debes poner a alguien en funcionamiento. Puedes explicar cosas más tarde.
Las siguientes cosas para documentar son las historias de los usuarios. Y los casos de prueba que respaldan esas historias. Y los accesorios de datos necesarios para los casos de prueba que admiten esas historias de usuarios.
Estarás compartiendo esto. Va bajo control del código fuente.
Eventualmente, puede documentar las otras 4 vistas.
La vista lógica es algo útil para documentar. Las imágenes son aceptables aquí. Esto tiende a evolucionar rápidamente, así que no pierdas tiempo capturando la información heredada. Encuentre una forma de cooperar con los miembros de su equipo.
La vista del proceso a menudo es útil. Depende de la aplicación general qué tan importante es esto.
La vista de desarrollo (módulos, bibliotecas, marcos, etc.) a menudo se describe de manera informal. Una imagen puede ayudar, pero es notoriamente difícil hacerla lo suficientemente completa como para que alguien pueda levantar un documento y hacer cara o cruz. Incluso los proyectos públicos de larga data tienen documentación de biblioteca que simplemente se ignora. (Lo que lleva a muchas preguntas de desbordamiento de pila).
Además de ser aceptable para ser informal, esto tiende a cambiar rápidamente.
Información de implementación. Servidores Direcciones IP. Credenciales de base de datos. Todas esas cosas deben ser escritas. Finalmente.
fuente
Herramientas y metodología.
¿Qué se necesita para colaborar con éxito y ser productivo?
Gestión / trabajo en equipo
... o cualquier otra cosa en el nivel interpersonal
Referencias de libros
Voy a enumerar algunos de los libros comúnmente mencionados que he hecho leído y creo que vale la pena leer, para una descripción más detallada o más libros es posible que desee echa un vistazo a algunas de las preguntas acerca de cómo solicitar tan exactamente para que, al igual esta o esta pregunta
Vale la pena leer esos libros con respecto a los equipos, organizaciones y proyectos de programación:
Ninguna de esas son guías prácticas de cómo implementar la metodología X (excepto la estimación de software, este libro le ayuda a elegir un proceso de estimación apropiado). Por supuesto, los libros más centrados en la programación misma como Code Complete también son muy enriquecedores.
fuente
Hablaré de la experiencia, pero tenga en cuenta que cada persona es diferente. Estas cosas no son universales.
Una cosa es dejarlo ir personalmente. Este proyecto es algo con lo que vivió y vivió durante 18 meses; naturalmente, desearía que cada cambio sea como lo haría. Dele un amortiguador para que un colega cometa errores, aprenda. Crea un espacio para que sean útiles. Y tenga en cuenta que podría no suceder de inmediato. También sería genial si hay algo, una parte del código que pueden sentir que tienen éxito en mejorar o crear, que se siente como un éxito en un corto período de tiempo. La paciencia y la tolerancia tienen una buena tasa de pago aquí. No intentes microgestión, y si quieres criticar, decir "estás equivocado", asegúrate de tener un mérito, puedes probarlo, no es una pelea "religiosa".
Otra cuestión clave es encontrar a la persona adecuada para usted. Idealmente, es mejor encontrar a alguien más inteligente que usted. Es subjetivo y relativo, pero si siente que una persona tiene algunos conocimientos y habilidades que no tiene, es lo mejor. Será una colaboración mutuamente gratificante.
Hay dos formas de hacerlo: el colega será un lastre, y terminarás rehaciendo lo que él o ella hizo, o las habilidades de dos de ustedes se multiplicarán, no solo sumarán, y realmente apreciarán trabajar juntos.
Sobre un tema de "código limpio, rápido y reutilizable": sugiero en una entrevista que pida escribir un pequeño micro-kernel / service manager y / o ejecutor de trabajo. Vea cómo se especifican y configuran los componentes conectables. No tiene que estar terminado, es un pensamiento que cuenta. Y también aprenderá rápidamente que las personas que saben cómo hacerlo querrán dinero decente ;-) ¡Buena suerte!
fuente
Mi opinión: Comience con documentar la arquitectura de su proyecto interno para alguien ... que no lo sepa. Intente explicar qué suposiciones existen y cuándo / dónde se desvió de las prácticas comunes y por qué.
Automatización de compilación: gran idea, puedo agregar automatización de configuración para una máquina de desarrollo. Lo más fácil es construir cuanto más será (por lo tanto, una implementación de prueba más / más rápida).
Otra idea (me ayudó mucho una vez): pedirle al nuevo desarrollador que haga algunas tareas de limpieza a pequeña escala en diferentes áreas de su base de código, para que se acostumbre a las herramientas de diseño, etc. Una buena idea es eliminar áreas oscuras que podrían agregar confusión más adelante (ejemplo: si usó emmm python para dos líneas de un script de shell en algún lugar y su proyecto se basa en Java, solicite que esas dos líneas se reescriban en Java para que el desarrollador # 3 necesite saber menos para trabajar)
fuente
Me enfocaría en automatizar todo lo que requiera trabajo manual, por lo que puede ser arruinado por una persona sin experiencia . Que, según su breve comentario anterior, incluye lo siguiente:
Si no haces esto, o estarás encadenado para hacer estas tareas para siempre, o (algunos) los nuevos tipos inevitablemente arruinarán algo tarde o temprano.
La otra tarea importante es, como señaló @dimitris, la documentación. @S. Lott agregó muchos más detalles sobre esto, así que solo +1 a él en lugar de repetir :-)
fuente
Aquí hay algunos pensamientos, en parte basados en la experiencia personal:
Documenta tu proyecto. Las especificaciones de diseño, diagramas, manuales y comentarios ayudarán al nuevo empleado a ponerse al día. Explicar un sistema complejo solo verbalmente puede resultar lento y frustrante. La documentación es frecuentemente descuidada en proyectos individuales Asegúrate de que el tuyo sea una excepción.
Al principio, concéntrese en el código API / core-level usted mismo, mientras le da al nuevo empleado algún trabajo de "capa de aplicación" o corrección de errores para familiarizarlos gradualmente con el código. En general, empezar con más fácil , sin embargo, significativos y así premiar tareas .
La comunicación es importante Responda a las preguntas, comentarios e ideas del nuevo empleado. Explica por qué piensas que una idea no es buena si lo haces. Un par de ojos nuevos pueden detectar un margen de mejora sorprendentemente bien. Si su nuevo empleado es decente, puede revisar por pares su código y eventualmente participar en decisiones arquitectónicas. Discuta, intercambie ideas entre sí. Ese es uno de los mayores beneficios de tener un compañero de trabajo en su proyecto.
Defina responsabilidades claramente , una vez que sepa qué tipo de tareas está haciendo su nuevo miembro del equipo. Establezca prácticas de documentación y convenciones de codificación para mantener las cosas fluidas.
Use un sistema de control de revisión . Mantener un diseño de archivo fuente lógico y disciplina de construcción .
En cuanto a la entrevista, no soy un gran admirador de las pruebas de codificación artificial ni de las preguntas capciosas, a menos que desee probar la capacidad duradera del candidato. Incluso los solucionadores de problemas más inteligentes pueden encerrarse en tal situación. Las cualidades que buscará, entre otras, son: honestidad , capacidad profesional , conocimiento / visión tecnológica , entusiasmo y compatibilidad mutua . El ambiente de trabajo puede significar mucho; No es aconsejable elegir un compañero de equipo que no le guste. Haga sus preguntas correctamente y haga una discusión informal para obtener una buena imagen de su candidato. ¡Buena suerte!
fuente
Tecnología
Si está trayendo a alguien más como desarrollador, hay tres cosas clave que recomendaría tener en funcionamiento antes de que comiencen.
Si estas tres cosas están funcionando correctamente, eliminará aproximadamente el 75% del problema común que ocurre cuando contrata a un nuevo miembro del equipo. El objetivo de estas piezas de tecnología es tomar mucho de lo que está sucediendo solo en su cabeza y sacarlo donde el miembro de su equipo pueda interactuar con él.
El control de origen asegura que ambos estén trabajando en lo mismo. El seguimiento de problemas le ayuda a realizar un seguimiento de lo que debe hacerse y le facilitará saber en qué están trabajando y logrando. La integración y las pruebas continuas ayudarán a garantizar que tenga un proceso de compilación repetible y que las nuevas mejoras no rompan otras partes del código.
Programador pragmático tiene algunos libros bastante buenos sobre esto. Aquí hay algunos que recomendaría. Tienen otros títulos similares basados en el lenguaje de programación que está utilizando o qué control de versión desea utilizar:
http://www.pragprog.com/titles/tpp/the-pragmatic-programmer http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git http: //www.pragprog. com / títulos / auto / pragmatic-project-automation
Personal
Muchas veces las dificultades que enfrentará son menos en el aspecto técnico de las cosas y más en el aprendizaje para dejar de lado. Puede ser difícil otorgarle a otra persona el control sobre los aspectos del proyecto, especialmente si está acostumbrado a hacerlo todo usted mismo y a tomar cada decisión. Se ahorrará algo de dolor si puede encontrar un área donde pueda hacer que la nueva persona trabaje con una cantidad razonable de libertad al principio para que pueda desarrollar una base de confianza. Si contrata a una buena persona, lo principal que probablemente aprenderá es cómo confiar en la otra persona para que haga un buen trabajo, incluso si todas sus decisiones individuales no son las mismas que usted hubiera tomado.
Desea darle a su nuevo empleado la libertad de resolver problemas de la manera que funcione para ellos mientras mantiene las salvaguardas en su lugar para que pueda detectar los problemas desde el principio.
fuente
Estos puntos son los más importantes en mi opinión:
Y por último, pero no menos importante: obtenga un sistema de control de versiones. Subversion está bien. Pero asegúrese de no agregar esos archivos Eclipse (o lo que sea) que sean específicos del usuario y, por lo tanto, cambien constantemente. Te hacen perder horas. No dude en preguntar en Stackoverflow si tiene problemas con él.
fuente