¿Debería una empresa de software tener un equipo dedicado para la investigación y / o bibliotecas de servicios públicos?

15

Trabajo en una empresa que hace aplicaciones web para varios bancos y algunas tiendas electrónicas más pequeñas. Empleamos a unos 20 desarrolladores y tenemos 4-5 proyectos en desarrollo en cualquier momento. Nuestros equipos de desarrollo no interactúan mucho y muchos de los mismos problemas se hacen de diversas maneras (de bueno a malo).

Me preguntaba si sería una buena idea para una empresa tener un equipo de programadores que investiguen los marcos actuales y mejoren continuamente una biblioteca común de funciones y un marco común para construir proyectos actuales y futuros de manera mucho más rápida y eficiente.

¿Qué tan grande debe ser un equipo como este?

¿También debería tener miembros permanentes que capaciten a otros o debería rotar a las personas?

Actualización: Estaba pensando en un proyecto común en el que las personas pueden trabajar por diversión que podría despertar cierto interés. Parece que cuando las personas tienen presiones laborales, las soluciones que se les ocurren no son las mejores.

Liviu T.
fuente
Varias empresas para las que trabajo tenían menos de una persona que se encargaba de administrar las bibliotecas de servicios públicos, donde cada desarrollador podía sugerir contribuciones. La mayoría de los gerentes trabajaban a tiempo parcial.
umlcat

Respuestas:

19

Un punto importante es que es imposible desarrollar un buen marco en total aislamiento. Los buenos marcos crecen orgánicamente : cuando un programador se da cuenta de que necesita alguna funcionalidad específica, la agrega al marco y, por lo tanto, el marco crece poco a poco, en lugar de diseñar un "marco perfecto" por adelantado, que nunca funciona, porque el arquitecto no puede ser consciente de todos los casos de uso que finalmente aparecen.

Por supuesto, el crecimiento orgánico del marco tiene el inconveniente de que su integridad interna podría no ser demasiado buena, y se convierte en espagueti. Si su equipo mantiene una buena comunicación interna, es posible que pueda combinar lo mejor de ambos mundos: un equipo de arquitectos separado que mantenga la integridad del marco, pero que desarrolle las necesidades reales de los usuarios finales (desarrolladores).

Joonas Pulakka
fuente
2
+1 para cultivo ecológico. Estas cosas son muy difíciles de imponer a los equipos.
Jon Hopkins el
Estoy de acuerdo con el marco orgánico, eso es lo que estaba pensando en realidad :) gracias por articularlo.
Liviu T.
+1. Siempre puede refactorizar el marco, pero diseñarlo desde el principio también puede hacer que se usen cosas porque están allí, incluso si no son la herramienta adecuada para el trabajo.
Larry Coleman
Construya el marco para las necesidades reales, no las falsas.
Tulains Córdova
9

Mi sentimiento es no.

Lo que sospecho que encontrarías si hicieras esto es que, en lugar de tener equipos individuales produciendo bibliotecas que nadie fuera de ese equipo usó, tendrías un equipo especializado produciendo bibliotecas que nadie fuera del equipo usó (y hacerlo a un costo adicional considerable).

Hay varios problemas con el tipo de equipo que describe, pero para mí lo principal es que no aborda el problema que realmente tiene.

El problema que tiene no es quién produce las bibliotecas (por el sonido de las cosas, ya tiene muchas soluciones a estos problemas, entonces, ¿cómo va a ayudar uno más?), Es que los equipos no están hablando e interactuando.

Hay buenas razones por las que los equipos no reutilizan el código de los demás (por ejemplo, que los problemas, aunque superficialmente similares, son sutilmente diferentes, o que el tiempo del proyecto simplemente no permite la dependencia adicional de desarrollar algo juntos), pero debe mira cómo puedes hacer que interactúen cuando sea posible.

Sugeriría:

  • rotar equipos entre proyectos
  • organizar almuerzos entre equipos y grupos de discusión
  • después de las revisiones del proyecto sobre cómo se resolvieron los problemas (atendidos por los otros equipos)
  • configurar un área del código delineado wiki que pueda ser reutilizable (y con quién hablar al respecto)
  • piense en incentivar la buena reutilización; en realidad, realmente pague a las personas más por hacerlo. Si la reutilización de un componente ahorra 5 días y $ 2000 en costos, ¿por qué no dar $ 200 de lo que ahora es una ganancia adicional para el equipo por una noche al final del proyecto (cuando haya validado que el ahorro fue genuino)

Sospecho que un equipo de bibliotecas estaría sobrecargado sin ningún beneficio.

En términos de ser un proyecto común en el que los desarrolladores trabajan por diversión, ninguna empresa debe confiar en que los programadores trabajen en las cosas a su debido tiempo. Eso es solo horas extras no pagadas y, en cualquier caso, no es confiable, ya que es probable que haya grandes períodos en los que nadie quiera trabajar en las cosas.

Si está diciendo que sería gente trabajando en el tiempo de la compañía entre proyectos, entonces tal vez pueda funcionar, pero todavía no creo que sea el verdadero problema. Aún necesita saber cómo va a lograr que la gente use las bibliotecas. Como dije, ya tiene soluciones a estos problemas que se están desarrollando en cada proyecto, su problema es por qué no se comparten.

Jon Hopkins
fuente
3

Ese es el trabajo de un arquitecto .

Las principales responsabilidades de un arquitecto de software incluyen:

  • Limitar las opciones disponibles durante el desarrollo eligiendo una forma estándar de perseguir el desarrollo de aplicaciones
  • crear, definir o elegir un marco de aplicación para la aplicación
  • Reconocer la posible reutilización en la organización o en la aplicación al observar y comprender el entorno del sistema más amplio
  • Crear el diseño del componente Tener conocimiento de otras aplicaciones en la organización

Lea más sobre: ​​- Arquitecto de software - Arquitecto de soluciones - Arquitecto empresarial .

Amir Rezaei
fuente
¿Debería haber un arquitecto de software para cada proyecto, solo un par que maneje múltiples proyectos o uno por empresa?
Liviu T.
Eso depende de cuán grandes sean los proyectos. Comience con un Enterprise Architect si necesita más ayuda para contratar más. Un arquitecto empresarial tiene el pensamiento estratégico en todos los proyectos. Por favor, lea más sobre los tipos de arquitectos. Es posible que necesite una mezcla de arquitectos. en.wikipedia.org/wiki/Software_architect
Amir Rezaei
3

El dicho " Comer tu propia comida para perros " aborda este problema. Si su codificador estrella de rock da a luz una biblioteca que nunca usó en la práctica, ¿cómo puede decir que es una buena?

Las principales razones para desarrollar funcionalidades en el marco son

1.Es útil para el desarrollador
2. Hay algunos casos en los que ha sido útil
3. Podría ser útil para otros

Cuando haya alcanzado el 2, la funcionalidad ya está allí, ¿cómo puede pasarla a otra persona?

Eric
fuente
3

Llegué un poco tarde al juego, pero sentí que nadie estaba abordando esto:

Sus equipos individuales que resuelven diferentes problemas de diferentes maneras definitivamente se beneficiarían de la funcionalidad compartida, y hay una variedad de maneras de lograrlo de una manera que no dedique a un solo equipo a desarrollarlo, pero he visto mucho de lugares que lo hacen.

En la mayoría de los casos, veo esto como un "núcleo" de su línea de productos, y a veces hay un equipo encargado de mantenerlo, dirigido por (como sugirió Amir) un arquitecto. Por lo general, así es como podría encontrar formas de aprovechar o crear un marco que siga los estándares más estrictos que establezca en su organización, pero que proporcione solo las funcionalidades más básicas que pueden o no necesitar extenderse a las aplicaciones completas. que ofrecen sus equipos de productos individuales. Esto le permite tener la ventaja de "alimentar a los perros" con su código central al implementarlo en cada lugar individual en el que lo use, y luego también diversificarse a diferentes productos que pueden tener implementaciones completamente diferentes. Esto permite que todos sus equipos contribuyan a las bibliotecas principales, pero no se atasquen con la funcionalidad que solo ellos necesitan.

NateDSaint
fuente
2

Creo que NO ES UNA BUENA IDEA , porque para que las bibliotecas sean útiles tienen que ayudarte a resolver problemas reales de proyectos, y solo puedes conocerlos, bueno ... trabajando en proyectos reales.

De lo contrario, puede terminar con una biblioteca "teóricamente" muy buena.

Miguel Veloso
fuente
1

En la única compañía en la que trabajé que realmente tenía algo similar, no parecía funcionar bien. La gente del equipo interno se le ocurrió una idea ingeniosa y se le ocurrió un prototipo que funcionó principalmente, luego se fue por la pared y se esperaba que lo convirtiéramos en un producto.

Lo que esperaría que sucediera es que el grupo de herramientas terminaría con su propio pequeño programa, produciendo funciones que en realidad no eran tan útiles, pero que saturaban la API y se usaban lo suficiente para que no pudieran ser fácilmente remoto. No documentarían adecuadamente.

Si el grupo de herramientas estaba suficientemente bajo un arquitecto de sistemas que estaba en contacto continuo con las personas que realmente usaban las herramientas, podría funcionar. Si el grupo de herramientas girara con frecuencia (lo que dificultaría hacer mucha investigación exterior) podría funcionar. Sin embargo, me daría miedo perder el contacto con las personas que realizan el trabajo remunerado.

David Thornley
fuente
Creo que el enfoque ideal es que el equipo de biblioteca / herramientas sea reactivo y responda a las solicitudes de herramientas de los equipos; o ser proactivo en preguntar qué necesitan los otros equipos. no pueden crear nuevas herramientas / bibliotecas de forma aislada sin comentarios de los usuarios (otros equipos de desarrolladores)
Rudolf Olah
0

¿Cuánto tiempo va a dedicar a debatir si usar o no el marco será un beneficio en todos los casos? ¿Se demora un proyecto al esperar que se actualice el marco? En algún momento se debe requerir el uso del marco para justificar su existencia.

JeffO
fuente