¿Escribir software en ausencia de requisitos es una habilidad para poseer o una situación que debo evitar?


44

Me parece que algunos desarrolladores de software son muy expertos en esto, y muchas veces son elogiados por su capacidad de ofrecer un concepto de trabajo con requisitos abstractos. Francamente, esto me vuelve loco, y no me gusta "inventarlo" sobre la marcha. Solía ​​pensar que esto era problemático, pero comencé a sentir un cambio, y me pregunto si necesito ajustar mi proceso de pensamiento (y programación) cuando me dan muy poca dirección. ¿Debo comenzar a adquirir esta habilidad como una habilidad, o apegarme a la idea de que la recolección de requisitos y las reglas comerciales son la primera prioridad?


2
Una situación a evitar. Lo único es que no puedes. Y me quejé de eso hace unas semanas ...
Yannis

64
Es a la vez, algo así como operar un extintor de incendios.
Ben Brocka

3
Si no planifica, planea fracasar. Estos proyectos construidos sin requisitos pueden o no cumplir con las expectativas del cliente cuando salen de la tienda, pero casi seguramente esconden una multitud de pecados que significan que cuando los requisitos cambian (y siempre lo hacen) un mundo de dolor espera a la persona que tiene que hacerlo. hacer los cambios necesarios Los programadores que escriben sin requisitos formales no deben ser elogiados, deben ser reprendidos por no estar preparados para el mantenimiento futuro a largo plazo del proyecto
GordonM


55
A veces, el cliente no sabe lo que quiere. Quieren que realices "experimentos" para determinar lo que quieren. Una vez escribí un sistema de comisiones donde el único requisito era pagar comisiones. El porcentaje y los elementos para pagar la comisión se determinarían según la experiencia con el sistema de comisión experimental.
Gilbert Le Blanc

Respuestas:


80

La habilidad no es escribir software sin requisitos. Es, en cambio, obtener requisitos del propietario del proyecto, independientemente de si hay una documentación de requisitos formal o no.

Definir los requisitos es definitivamente su primera prioridad, pero no necesariamente necesita tener todas las necesidades del cliente anotadas por adelantado. El riesgo es, por supuesto, que podría perderse alguna información vital que inutilice la arquitectura de su sistema si no ha logrado tener el tipo correcto de conversaciones con su cliente, sin embargo, no es inusual definir un producto e incluso obtener gran parte del desarrollo fuera del camino, mientras que difiere las principales decisiones de arquitectura del sistema hasta el último momento posible. Este es un enfoque de desarrollo optimizado que tiene como objetivo garantizar que no se comprometa con una arquitectura potencialmente incompatible demasiado pronto en el desarrollo de su producto hasta que tenga información más sólida. En las situaciones que el OP ha descrito en su pregunta,

Sí, a veces es necesario mirar un poco con la bola de cristal para llegar al corazón de lo que realmente está pidiendo el cliente, que es donde los picos de creación de prototipos y la lenta, y sí a veces dolorosa, requiere un aumento gradual de los requisitos. que realmente desarrolla buenas habilidades de relación con el cliente, y también la paciencia para darse cuenta de que con cualquier idea de software compleja, al principio, el cliente a menudo no sabe mucho más que usted sobre lo que el software realmente necesita hacer. Muy a menudo, el cliente lo llama temprano para depender de su experiencia para definir sus requisitos, ya que el cliente no siempre tiene la experiencia o el conocimiento necesarios del proceso de desarrollo de software.


22
"La habilidad no es escribir software sin requisitos. En su lugar, es obtener requisitos del propietario del proyecto, independientemente de si hay una documentación formal de requisitos o no". Esto también es algo en lo que he estado pensando mucho. Es casi como ser un buen detective, o saber cómo entrevistar a alguien y hacer las preguntas correctas. En esta situación, encuentro la pregunta: "¿Puedes decirme qué quieres hacer?" funciona mucho mejor que "¿Puedes decirme cómo debería funcionar?"

55
@BrianReindel A veces empiezo con una combinación de Mapa mental / Árbol binario de los pensamientos del cliente. Pregunto "¿Cuál es la idea?", Luego uso la asociación de palabras para ver lo que cada idea trae a la mente del cliente. A partir de ahí, construyo una imagen de lo que piensa el cliente, y empiezo a definir los requisitos a partir de ahí. Cada requisito evoca preguntas que deben hacerse. Por lo general, las preguntas "Por qué" me dan una mejor respuesta que las preguntas "Qué / Cómo", ya que le dan al cliente la oportunidad de pensar más allá de lo básico. Básicamente es un arte en el uso de la psicología para lograr que el cliente revele necesidades.
S.Robins

3
Parte de la habilidad es conocer el orden en el que se hacen las cosas y evitar "perfeccionar" las cosas que de todos modos se desgarrarán. De esa manera, puede reunirse con el cliente / gerente / lo que sea, mostrarles lo que tiene hasta ahora y ajustarlo a medida que avanza. Primero debe saber cómo dar los grandes pasos en la dirección general correcta.
David Schwartz

44
Una forma de obtener requisitos es darles algo básico y ver de qué partes se quejan. Por ejemplo, cree un prototipo en papel ( amazon.co.uk/… ) y ejecute las interacciones con ellos.
deworde

35

Esto es muy ambiguo ...

Dos cosas que puedo decir:

  1. Hay muchas personas técnicas muy talentosas cuyas carreras se detienen porque esperan los requisitos perfectos. O juegan el "Lo siento, no puedo hacerlo, no estaba en los requisitos". La realidad es que la escritura de requisitos es muy difícil. La precisión requerida para los buenos requisitos es diferente a cualquier cosa que la mayoría de los empresarios haya creado. Hay un puente entre la tecnología y el negocio, y las personas que hacen que los demás lleguen al 100% del camino para conocerlos generalmente pierden.

  2. Hay personas de software que aprenden los dominios como buenos o mejores que sus clientes. Estas personas valen su peso en oro, incluso si no son 100% los mejores desarrolladores. He visto a personas de software anticipar las necesidades cuantitativas de marketing de los mejores gerentes de marca del país. No eran los mejores para codificar todas las soluciones, pero eran héroes porque podían cruzar el puente.

Sin embargo, la vida no se trata de negros y blancos. Si dibujas un cuadro estrecho a tu alrededor, te limitarás. Por otro lado, una organización que descarta lo que se necesita para crear tecnología también es limitada. Tendrás que ver en qué parte del gris prefieres estar.


12

Los requisitos son los pasos en el viaje, una visión es la dirección

Para muchas aplicaciones, una especificación técnica altamente detallada es demasiado inicial, ya que una discusión rápida podría hacer que su documento cuidadosamente escrito sea inútil. En cambio, comience con una visión. Si todos entienden el panorama general, los requisitos pueden cumplirse en el camino a través de discusiones.

Como desarrollador, debe aprender a utilizar estas discusiones para rastrear los requisitos . Esto significa hacerle al cliente preguntas importantes que lo hagan pensar acerca de cómo su decisión de hoy encaja en la visión general. Cuanto antes tengan lugar estas discusiones más detalladas, más rápida se solidificará la visión general en un diseño coherente.

Debe realizar un seguimiento del resultado de estas discusiones en algún tipo de rastreador de problemas para que otros puedan comentarlas si se perdieron la discusión original. Y para que tenga un registro que usted u otros miembros de su equipo puedan consultar si necesita aclaraciones.

Por lo tanto, aprenda a codificar contra la visión, pero esté listo para rastrear esos requisitos cuando llegue el momento.


+1 para "Los requisitos son los pasos en el viaje, una visión es la dirección"
usuario

10

Steve Jobs cree que los clientes no pueden describir exactamente cómo quieren que sean los productos futuros, por lo que es su trabajo entregarlos. Entonces, a menos que entregue software personalizado todo el tiempo, olvide las especificaciones formales y comience creando prototipos y dejando que los clientes jueguen con ellos y le digan lo que piensan. Tienes que poner a la persona adecuada haciendo los prototipos, y necesitan ayuda. Lo digo por experiencia: soy el mono de prototipos que ama crear interfaces intuitivas y me uní a alguien en un producto que entiende lo que los clientes quieren y puede explicar las cosas en papel o usando Excel.

Ninguno de los dos somos genios, pero pensamos igual: casi se puede decir que tenemos química y hemos tenido un gran impacto sobre qué cosas se están construyendo y cómo. Ahora, solo un equipo de mediano a grande puede permitirse tener un prototipo y un no codificador que desarrolle productos exclusivamente, pero vale la pena. La creación de prototipos es la etapa más barata en el desarrollo de software, por lo que solo tiene sentido obtener la interfaz de usuario y el comportamiento aparente correcto. No he leído Code Complete pero creo que hay algo así escrito en ese libro.

Es bueno tener especificaciones, pero nunca son perfectas. Existe un teorema sobre eso. No puede probar que la especificación está completa y no puede probar que la herramienta no tiene errores o que se detendrá :)

Sin embargo, las compañías de software envían software todo el tiempo a pesar de estas imperfecciones en el proceso. La especificación nunca será perfecta. La especificación también es NO NATURAL y obsoleta. Una especificación para un prototipo es como una tabla de logaritmos para un solo gráfico: una especificación es esencialmente un folleto aburrido destinado a ser impreso, mientras que en su lugar podría interactuar con una herramienta / gráfico. Visite http://www.i-programmer.info/news/112-theory/3900-a-better-way-to-program.html para obtener inspiración.

Ahora, la especificación es buena si debe tener un contrato para cubrirse el trasero. Pero una especificación aún debe venir después de un prototipo, no antes. Es su trabajo descubrir cómo hacer que los prototipos sean baratos.


+1 para que la especificación nunca sea perfecta, pero -1 para que la especificación no sea natural y esté desactualizada. Piense en los requisitos como una lista de características que un cliente desea, y una Especificación es la lista de comportamientos que definen lo que el cliente necesita. Esencialmente un tipo de contrato que define cómo funciona el sistema, en lugar de qué es el sistema. El diseño inicial y la especificación grandes son problemáticos, pero como todos los problemas grandes, es más fácil de hacer cuando se desglosa para hacerse un poco a la vez. La creación de prototipos tampoco suele ser rentable si no tiene idea de QUÉ prototipar. Aquí es donde las especificaciones ofrecen un punto de partida ...
S.Robins

... sin embargo, las especificaciones no necesariamente deben escribirse en piedra. Los prototipos (esencialmente problemas de picos) son más valiosos cuando envían nueva información a la especificación y cuando la especificación puede cambiar para acomodar las cosas que aprendió del prototipo. Sin la especificación, se arriesga simplemente inventando cosas a medida que avanza, lo que no siempre es lo mejor para el cliente. Los clientes esperan que usted satisfaga sus necesidades, y se arriesga menos fricción cuando puede proporcionar evidencia de que ha aceptado algo, incluso aunque solo sea tentativamente.
S.Robins

@S. Robins, un médico (cliente) podría decir algo tan simple como "Quiero ver un árbol genealógico con el riesgo estimado de cáncer correspondiente para cada miembro de la familia". Dado que hay muchas maneras diferentes de presentar esta información y preocuparse por las familias numerosas que abarcan varias páginas, creo que sería absurdo comenzar a documentar esto como una especificación de inmediato. Entendimos lo que dijo el médico, pero queremos ser más precisos. Un prototipo interactivo que muestra números aleatorios y nombres que un documento puede decir sí o no es más natural que una especificación incompleta de 30 páginas que intenta describir lo mismo.
Trabajo

1
Entiendo de dónde vienes, sin embargo, lo que sugieres suele ser un enfoque costoso. Obviamente no estoy sugiriendo que el prototipo sea un producto completo, pero cualquier cosa que construyas donde haya interactividad requerirá tiempo para desarrollarse. Una opción menos costosa es pararse en una pizarra, esbozar algunas ideas y hacer preguntas específicas para ayudarlo a reducir sus criterios. Tampoco estoy abogando por crear una gran especificación. Los documentos de esquema, o incluso las plantillas de código de prueba, producidas de forma iterativa y según sea necesario, generalmente son más simples y más baratos que la creación de prototipos primero.
S.Robins

3

A menudo he descubierto que en algunas situaciones necesito actuar como analista de negocios, descubriendo exactamente cómo funciona actualmente el negocio, cómo las personas piensan que funciona (a menudo cosas muy diferentes) y cómo les gustaría que funcionara.

He tenido éxito al ser siempre claro acerca de las decisiones que me veo obligado a tomar para construir el software. Explico mi razonamiento, escribo documentación sobre lo que he descubierto, hago gráficos y los distribuyo a todos, etc.

Probablemente no causará una muy buena impresión al negarse a hacer cualquier trabajo hasta que se entreguen los requisitos completos. Pero al reunir los requisitos de buena calidad usted mismo (sin necesariamente llamar la atención sobre el hecho), alcanzará el mismo objetivo del software de calidad.

Y sí, como han dicho otros comentaristas, siempre cree el software asumiendo que cambiará. El cambio es la única constante en la que puede confiar. Siempre cree su software lo suficientemente flexible y modular para que no sea doloroso actualizarlo cuando de repente aparezcan nuevos requisitos.


3

Si quieres trabajar como desarrollador de software en una startup, es una habilidad que debes poseer.

Si desea trabajar en una empresa de consultoría, es una situación que debe evitar a toda costa. Esto se debe a que a su empresa se le paga de acuerdo con lo bien que implemente las especificaciones / requisitos y no con lo bien que resolvió el problema del cliente.

Si está buscando diversión en su tiempo libre, entonces es su decisión. Si no se siente calificado para hacer la llamada para sus proyectos de tiempo libre, intente un par en cada sentido y vea qué funciona. Además, no es necesariamente una cosa única para todos, algunos proyectos requieren uno u otro tipo de enfoque. Por lo general, si elige el incorrecto en uno de estos proyectos, lo resolverá bastante rápido.


2

Un poco de ambos. Necesita satisfacer a sus clientes, lo que significa que necesita saber lo que quieren. Por otro lado, los clientes son notoriamente malos en comunicar lo que realmente quieren.

Por lo tanto, desea evitar escenarios en los que no sabe qué quieren los clientes, pero inevitablemente se encontrará con un escenario en el que los requisitos son "blandos" en el mejor de los casos y engañosos en el peor. Un buen programador del mundo real requiere adaptabilidad.


2

No es posible escribir un programa sin requisitos. Incluso el 'Hello World' tiene el requisito: producir resultados. Entonces, creo que está preguntando acerca de los requisitos formales, en forma de una gran pila de algo similar a UML. Y con respecto a eso, he conocido a 2 tipos de personas:

1) Personas que necesitan requisitos formales. Necesitan que se les diga exactamente qué hacer y, en el mejor de los casos, cómo hacerlo. Aman las oraciones como El procedimiento A tomando el argumento B dará como resultado C , y las odian: el programa debería hacer que el trabajo de nuestro departamento sea más efectivo . Suelen ser animales corporativos.

2) Las personas que son opuestas a 1. Odian que se les diga qué hacer y cómo hacerlo, les encanta que les digan lo que se debe lograr. Les gusta hablar con el cliente, analizar lo que dicen y luego desarrollar su propia solución. Por lo general, son autónomos y no se ajustan bien a la corporación.

No diré cuál de esos es mejor. Ambos tienen sus pros y contras. Son simples adecuados para las otras condiciones.


0

NO puede desarrollar software operativo sin conocer los Requisitos; pero, puede tener una buena puñalada para desarrollar lo que su experiencia le dice que es probable que los Requisitosser. El desarrollo ágil utiliza una combinación de técnicas "intuitivas", incluida la regla 80:20 y el "descubrimiento" de requisitos mediante creación de prototipos. En otras palabras, un equipo de desarrollo experimentado adivina lo que se necesita y produce un prototipo del software. La regla 80:20 dice que serán 80% correctos. Las partes interesadas del proyecto luego revisan el prototipo tangible. Sus comentarios comienzan a llenar el vacío del 20% en nuestra comprensión de los Requisitos. Entonces, en efecto, Agile no se trata de escribir software sin ningún requisito, más bien se trata de usar su experiencia previa para decir: "¿Quieres algo como esto?" Lo cual, en el 80% de los casos, le permitirá avanzar y confirmar lo que realmente se necesita más rápido que avanzar a través de los procesos tradicionales de Requisitos.


Ágil no se trata de intuición, se trata de comunicación. Entregar software de trabajo a menudo para recibir comentarios a menudo es alentar la comunicación y valorar la entrega de las cosas que el cliente necesita. Sí, la experiencia entra en juego, pero es más probable que desarrolle lo que el cliente necesita si primero pregunta qué requiere el cliente. La llamada regla 80:20 realmente no se aplica a menos que esté muy familiarizado con el dominio comercial del cliente, e incluso entonces tomaría esa 'estadística' con una gran cucharada de sal.
S.Robins

-2

¿Quién dijo que Agile estaba escribiendo código en ausencia de requisitos? Sé que el Manifiesto ha sido interpretado de esta manera por algunos ... pero eso no lo hace correcto.


1
Hola Trent, aunque estoy de acuerdo con tu comentario en principio (y también estoy cansado de ver cómo la gente usa Agile como una excusa para arruinar el proceso de desarrollo y llamarlo "ser ágil"), esta respuesta realmente no aborda los OP pregunta, que no se trata de Agile, sino que se pregunta si escribir software sin requisitos es una habilidad para desarrollar. ¿Quizás había pensado agregar esto como un comentario a la respuesta de otra persona?
S.Robins
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.