Cuando un desarrollador de software dice que una tarea no se puede hacer técnicamente, ¿qué haces?

Algunas tareas son técnicamente inviables. Por ejemplo…

En los años 90 hubo un proyecto basado en CD donde el gerente del proyecto solicitó a los programadores que encendieran la computadora cuando se insertó el disco. En aquellos días, las unidades de CD no podían funcionar a menos que el sistema ya estuviera encendido. Entonces la característica era “técnicamente inviable”.

¿Fue una tarea imposible? En realidad no. Muchos dispositivos ópticos modernos responden adecuadamente cuando presiona el botón de expulsión o inserta un disco. Esto se debe a que están “siempre encendidos” (aunque en un estado de baja potencia).

Para ofrecer esa funcionalidad en los años 90 habría requerido el desarrollo y la implementación de hardware de baja potencia para cada sistema que contenga una unidad óptica. Si bien dicha característica habría sido teóricamente posible, habría requerido millones de dólares para desarrollarse, miles de millones se gastarían en actualizaciones de hardware y la implementación tomaría varios años o más.

Entonces, ¿qué debe hacer un gerente cuando un desarrollador dice que una tarea no es factible?

Comprenda las limitaciones de los problemas y busque alternativas.

  • Pregúntele al desarrollador por qué la tarea no es factible.
    • ¿Podría resolverse el problema con más tiempo / dinero / recursos ? (La mayoría de los problemas pueden, aunque debe solicitar una estimación aproximada de cuánto más se necesitaría).
    • ¿El problema está demasiado limitado o en desacuerdo con otros objetivos del proyecto?
    • ¿Es la solicitud incompatible con las primitivas subyacentes ? (Como con el ejemplo de CD anterior).
    • ¿El problema está fuera de la experiencia de dominio del equipo que trabaja en el proyecto? Por ejemplo, ¿se requeriría una solución de hardware, pero el equipo está formado solo por ingenieros de software?
    • ¿Hay restricciones operativas ? (Por ejemplo, “Podríamos migrar la base de datos, pero requeriría desconectar el sitio durante dos días”).
  • Discutir alternativas.
    • ¿Se puede reducir la función?
    • ¿Podrían modificarse o reducirse otras funciones para acomodar esta función?
    • ¿Se podría construir una característica diferente? En el caso del ejemplo de CD, habría sido simple iniciar automáticamente el CD cuando se inserta en una computadora con alimentación . (autorun.inf FTW)
  • Obtenga una segunda opinión.
    • Es posible que el desarrollador no tenga los antecedentes o la experiencia para proporcionar información precisa.
    • A veces puede ser útil intercambiar ideas de otros ingenieros. Hacer que algunos de los mejores ingenieros de su equipo se sienten en una habitación y hagan una lluvia de ideas juntos podría generar soluciones / alternativas mucho mejores que las que cualquier desarrollador pueda ofrecer.

Da un paso atrás.

  • La mayoría de las veces, los desarrolladores asocian una gran cantidad de tiempo y esfuerzo a “no se puede hacer”.
  • Normalmente, casi no hay cosas en el software que no se puedan hacer, “con suficiente tiempo, dinero y recursos”.
  • Además, algunos desarrolladores tienen una forma idealista o la “mejor” de hacer algo, y si eso parece inviable, entonces “no se puede hacer” es realmente “no se puede hacer así”. Normalmente hay otras formas (quizás menos óptimas) de hacer las cosas.
  • Los desarrolladores (especialmente aquellos que han estado con el proyecto por un tiempo) normalmente tienen el ecosistema y las tecnologías y las limitaciones trazadas en sus cerebros, y cada pregunta pasa por ese mapa en sus cerebros, y la respuesta es diferente a la respuesta de una pregunta objetiva neutral .
  • Y, por supuesto, todos estamos limitados por nuestro conocimiento de lo que sabemos y lo que no sabemos. Por lo tanto, definitivamente existe la posibilidad de que existan varias formas, y el desarrollador simplemente no lo sabe. Las tecnologías y las soluciones evolucionan todo el tiempo, y mientras escribo esto.

Entonces, antes de que la conversación se acalore, dé un paso adelante y comprenda los detalles de la respuesta. El contexto y el pensamiento subyacente.

Pregúntales:

  • ¿Quiere decir que no se puede hacer dentro de nuestros plazos de entrega actuales?
  • ¿Crees que no se puede hacer con las tecnologías actuales que utilizamos?
  • ¿Crees que no se puede hacer debido a nuestra arquitectura existente?
  • ¿Crees que no se puede hacer porque nuestros sistemas son sistemas heredados?
  • ¿Crees que necesita más recursos?
  • Obtenga una segunda opinión, si la respuesta a todo lo anterior es No.

Además de todas las muy buenas respuestas dadas que explican la diferencia entre imposible e inviable, he estado en el extremo receptor de la eufemización aquí. Y es una gran frustración trabajar con alguien que cree que los ingenieros siempre tienen excusas o no entienden el problema.

Me han pedido que implemente soluciones a problemas para los que existen pruebas de imposibilidad. Mis ejemplos particulares giran en torno a sistemas distribuidos y garantías de coherencia a la luz de interrupciones de la comunicación, o varias compensaciones por latencia y consistencia (existe este problema llamado “velocidad de la luz”).

A veces, cuando un ingeniero te dice que algo es imposible, realmente lo es, dado el estado actual de la física. Llamarlo “simplemente un problema de implementación técnica” no hace que desaparezca. Simplemente estás molestando al equipo de ingeniería. Incluso darles más dinero o tiempo no ayudará. Y la solución real puede ser trabajar con el cliente para comprender los límites de las opciones actuales y comprender las implicaciones comerciales.

Sí, son posibles muchas más cosas con más recursos, personal, dinero, tiempo, comprensión y habilidad. En algunos casos, incluso los problemas irresolubles se pueden aproximar a través de la heurística que los soluciona en su mayoría, lo suficientemente bueno para el problema comercial en cuestión. Confía en mí, entiendo todo eso bastante bien.

Pero sí, a veces, los problemas son imposibles de resolver dadas las limitaciones. Que alguien más le esté diciendo al cliente que tiene una solución perfecta no lo hace realmente posible o factible. Mienten y explotan la limitada experiencia técnica del cliente.

Entonces, si un ingeniero trae palabras como “prueba de imposibilidad”, “constante fundamental de acuerdo con las leyes de física actualmente entendidas”, “50 puntos de Knuth”, “NP completo”, etc., escuche. Es por eso que fuimos a la universidad, leímos esos libros y documentos, y por qué nos tiene en el personal y no solo en las ventas 😉

Depende mucho de quién es usted y de su comprensión del dominio del problema y de las tecnologías involucradas.

Si tienes experiencia en ingeniería, por ejemplo, eres el CTO o el gerente de proyecto, entonces ya debes saber si algo es factible o no, y deberías haber contratado a alguien que pueda realizar la tarea.

Ahora podría ser que el desarrollador se ha topado con un obstáculo que hace que sea difícil o imposible hacer algo; en cuyo caso, debe estar en condiciones de preguntar por qué, pedir alternativas, contribuir a encontrar soluciones y tal vez darse cuenta de que necesita que alguien más haga el trabajo.

O podría ser que realmente resulta no ser factible, en cuyo caso hay que tomar decisiones comerciales.

Si no tiene conocimientos técnicos, entonces necesita encontrar a alguien (un asesor, un inversor, un consultor) que pueda hacer todas las preguntas correctas, evaluar las respuestas y encontrar alternativas.

  1. La tarea en cuestión suele ser un medio para implementar una solución a un problema. Si el problema es bien conocido, busque otras formas de resolver el mismo problema.
    Como ejemplo del diseño del automóvil, generalmente se desea un motor de 5 litros y 8 cilindros porque los clientes quieren que el automóvil sea rápido. Una solución alternativa es usar un motor más pequeño, pero eliminar mucho peso del automóvil. Una tercera solución es usar un tipo diferente de motor, como un motor eléctrico, con mucho torque.
  2. Si el problema no se comprende bien, haga una lluvia de ideas para qué problema la tarea propuesta es una solución. Si el problema no está bien motivado, es decir, si no puede pensar en una razón sólida por la que es necesario resolver el problema, entonces ya está. No hagas la tarea.
    Un ejemplo de Star Trek, la construcción de un dispositivo de imágenes de múltiples longitudes de onda (un tri-corder). Este dispositivo se ve genial en concepto, pero ¿qué puedes hacer realmente con él en el mundo real? Hay un par de cosas; es una cámara de televisión y una radiografía portátil, pero ¿con qué frecuencia necesita ver huesos?
  3. Si el problema necesita ser resuelto, busque otras formas de resolverlo.
    Un ejemplo de la exploración espacial: si la tarea es viajar más rápido que la luz, el problema podría ser explorar otros sistemas planetarios. Otras formas de resolver este problema incluyen naves multigeneracionales, animación suspendida y envío de una sonda robot para explorar.

Una vez que comience a razonar hacia atrás al problema para el cual una tarea inviable propuesta es una solución, casi no hay problema que sea imposible de resolver, incluso si la solución propuesta no funciona.

Un diseño de producto realmente bueno comienza con una lista de problemas para resolver, no con una lista de características.

Si el desarrollador es realmente competente, le crees. Por ejemplo, si la tarea deseada es clasificar un millón de registros en menos de un milisegundo en una PC convencional, es probable que sea imposible. Hay muchas cosas que no se pueden hacer con las computadoras e incluso hay una rama de la informática llamada teoría de la computabilidad que estudia qué cosas son fáciles o difíciles o imposibles de calcular. Un concepto es la idea de un problema NP-completo que solo se puede resolver probando todas las posibilidades. En algunos casos, eso hace que sea imposible hacer el cálculo debido a la gran cantidad de posibilidades.

No tiraría su trasero por la puerta, pero dejaría bastante claro que no les creo.

He estado escribiendo software durante más de 30 años, no existe tal cosa como “No se puede hacer”, existe * SIN EMBARGO * el concepto de tiempo que se tarda en realizar la tarea.

Si se diera la vuelta y dijera “Ok, se puede hacer, pero me llevará 10 años y un equipo de I + D a tiempo completo … “Entonces él está siendo honesto.

Decir que no se puede hacer sin dudarlo, demuestra que él / ella ni siquiera está dispuesto a pensar en una tarea, a pensarlo y luego decir que no se puede hacer, muestra que carecen del conocimiento para formar una solución a la solicitud

Sugiero lo siguiente.

  1. La pregunta que hace, ¿es razonable?
  2. La respuesta del desarrollador de software a su pregunta, ¿suena razonable?
  3. ¿Entiendes lo que te dice el desarrollador de software?
  4. ¿TIENES las habilidades técnicas y la inteligencia para hacer la pregunta?
  5. Quizás no entiendes el problema y, por lo tanto, ¿la respuesta?

Sin ver la pregunta y su respuesta, esta es una completa pérdida de tiempo.

Comprenda que el programador tiene en cuenta cosas como “tiempo y presupuesto razonables” y luego usa taquigrafía. Cada solicitud que llega a través de un programador viene con suposiciones. Si recibo una solicitud que dice que la empresa desea que se muestre tal o cual campo en tal o cual sitio web por razones xyz, yo, como profesional y, a menudo, con la ayuda de un equipo, tengo que tomar una decisión informada sobre cuánto valor agregue esa mejora crearía. Si mi análisis muestra que la única forma de facilitar la solicitud es en realidad una reescritura completa y el objetivo es ahorrarse 5 minutos cada mes, entonces la respuesta podría ser que no se puede hacer.

Otras veces, literalmente, me han pedido que haga lo imposible. Se me ha pedido que presente o use datos dentro de los cálculos a los que no teníamos y no podíamos tener acceso. A veces los datos simplemente no existen o los datos disponibles no son lo suficientemente precisos para el uso automatizado. Hasta que una (mejor) fuente de datos esté disponible, la tarea no puede realizarse.

Si tiene curiosidad sobre por qué, la mejor pregunta de seguimiento que puedo sugerir sería: “¿No se puede hacer a un precio razonable o a cualquier precio?” Eso permitirá que el programador vuelva a evaluar, con nuevos parámetros y restricciones, y Es posible que puedan ayudarlo a comprender por qué creen que lo que está pidiendo es irrazonable o imposible.

Como muchos otros aquí han dicho, debería significar que la tecnología para lograrlo aún no existe o es teóricamente imposible.

He encontrado muy pocos problemas reales que me pidieron que resolviera qué encajaba en esa segunda categoría, e incluso cuando encajaban en esa segunda categoría, a veces he encontrado formas creativas de evitar la teoría.

Por ejemplo, cuando hacía un trabajo universitario hace casi 50 años, el profesor me dijo que lo mejor que podía hacer en cualquier algoritmo de clasificación era O (n log n) y que en ese momento, incluso podía escribir una prueba matemática de ese hecho. . Un año o dos después, me enfrenté al problema de ordenar muchas direcciones postales por código postal. Primer pensamiento: use uno de esos algoritmos de clasificación de burbujas. Pensándolo bien: sabía algo sobre mis datos (todos los enteros de 5 dígitos) y terminé leyendo la lista 2 veces (cada vez que creaba listas vinculadas a medida que avanzaba y tenía una matriz de 100 enteros para los punteros raíz de mi lista vinculada). Este algoritmo para la clasificación nunca comparó nada con nada más, por lo que la teoría no se aplicó y pude ordenar mi lista de correo en tiempo O (n), mucho mejor de lo que la teoría declarada podría hacerse.

Haga más preguntas para ver si el desarrollador tiene razón o no.

Hay una gran diferencia entre “No puedo hacerlo” y “No se puede hacer”.

Pida una explicación de por qué no se puede hacer la tarea, y vea si tiene el tono de verdad.

Algunos problemas realmente son casi imposibles, digamos que desea usar la cámara de seguridad en la tienda para contar cuántos neoyorquinos entran a su tienda, probablemente sea imposible.

Sin embargo, algunos problemas pueden parecer muy difíciles pero pueden no serlo.

Obtenga una explicación del desarrollador y vea si está convencido de ello.

Como veterano de 30 años en desarrollo de software, diría que, para mí, pocas cosas son realmente imposibles . Muchos desarrolladores carecen de la confianza o la creatividad para visualizar una posible solución. Para algunos de nosotros, ese no es el caso.

En mi experiencia, todo es posible si se le da suficiente tiempo, dinero y recursos. Entonces, cuando un desarrollador de software responde a su solicitud diciendo “Lo que me está pidiendo que haga es imposible”, eso probablemente debería traducirse como “Lo que me está pidiendo que haga es algo que creo que no puedo hacer en el contexto de sus recursos y limitaciones de tiempo y / o dinero “.

Claramente, si impone límites de tiempo, dinero o recursos, el cumplimiento de su solicitud puede ser completamente imposible, dadas esas limitaciones. Por ejemplo, considere la pregunta: “Si una mujer puede tener un bebé en 10 meses, ¿por qué no pueden 10 mujeres tener un bebé en un mes?”

Entonces, si su desarrollador dice que algo es imposible, le sugiero que reformule la pregunta y pregunte si sería posible con más dinero, tiempo y / o recursos adicionales. Es probable que reciba una respuesta completamente diferente. Sin embargo, no estoy diciendo que te va a gustar la respuesta.

Sí, hay límites para lo que el software puede hacer.

Si alguien dice que algo es imposible, podría ser:

  • Realmente estás pidiendo algo que el software no puede hacer
  • Los desarrolladores no entienden el problema, por lo tanto, no saben cómo resolverlo.
  • Están diciendo que el tiempo requerido para la solución es excelente y posiblemente no se puede estimar O es imposible con el tiempo y el presupuesto permitidos
  • No quieren hacerlo, por lo que afirman que es imposible.

Una cosa que debe preguntarse es: ¿puede encontrar una solución al problema que le está dando a su (s) desarrollador (es)?

Aquí hay algunas opciones:

  1. Si puede encontrar a alguien que afirme que se puede hacer, pídale que diseñe y realice una prueba de prueba de concepto. El diseño y los resultados deben ser revisados ​​por el desarrollador, quien dijo que no se podía hacer.
  2. Si se dispone de una mayor experiencia de un consultor externo, tal vez esa sea una opción.
  3. Vuelva a pensar el diseño y vea si puede encontrar una manera de evitar el problema técnico por completo.
  4. Si nada más funciona, regrese a las partes interesadas del proyecto y revise los requisitos para eliminar la necesidad de la tarea.
  • Asegúrese de que ambos estén de acuerdo en cuál es la pregunta. Pueden estar respondiendo una pregunta diferente a la que crees que estás haciendo.
  • Descubra por qué no se puede hacer, tal vez pueda modificar la solicitud en algo que sea factible.
  • Averigüe si pueden proponer alguna otra solución que logre un resultado aceptable.
  • Obtenga una segunda opinión, tal vez haya una manera, y el desarrollador no lo haya pensado.

Pídale al técnico que le explique en detalle por qué no es factible. Si no comprende la explicación, obtenga una segunda opinión.

Hay tareas que realmente no son factibles. Pero muchas veces (¡no siempre!) Hay una solución técnica.

A veces los técnicos dicen que algo no es factible porque son flojos. A veces, el problema no es técnico, podría tener algo que ver con la política o las reglas bajo las cuales opera la tecnología. Necesita el técnico para explicar cuál es el problema.

Usted descubre un camino alternativo que lo ayudará a alcanzar su objetivo y, de hecho, será factible.

A menudo, cuando los desarrolladores de software dicen que no se puede hacer algo, lo han pensado y tratado de encontrar una manera, pero algunas cosas simplemente no se pueden hacer.

Casi todo es posible con la tecnología, pero eso no lo hace factible. Lo que quiero decir es que siempre hay un costo y hay que decidir si el costo de superar el problema es razonable.

Eso puede ser lo que el programador está tratando de decir. O puede que él no sepa de una manera. O puede necesitar un poco de tiempo para investigar y pensar en ello.

Intente reformular el problema para estimular la resolución creativa de problemas:

“Imagine que Elon Musk vendrá para reclutar algunos desarrolladores para una startup. Él identificó esta tarea en particular. Quiere ver cuán expertos somos para enfrentar problemas difíciles y no está interesado en soluciones poco prácticas. Estamos hablando en términos de costos comerciales razonables.

Díganos cómo abordaría y superaría el problema “.

Eso es un replanteo dramático. Por supuesto, hay otros menos dramáticos que podrían haber precedido a este, pero no sé cuál es su problema.

Si nada de esto funciona, es posible que necesite una segunda opinión.

Por lo general, solo significa que su solicitud va en contra de la tecnología que está utilizando.

Entonces, incluso si decide hacerlo, el resultado será escamoso y apenas funcionará, a expensas de tiempo y dinero.

Significa que no es técnicamente factible con la tecnología que utiliza y los recursos que tiene. ¡Realmente significa lo que significa!

More Interesting

¿Quién hace la prueba de humo? Desarrolladores o probadores?

¿Qué tan alta es la barrera de entrada para Apache Spark para tareas que no son de aprendizaje automático?

Cómo conseguir un trabajo como desarrollador o ingeniero de software en Goldman Sachs en Bangalore o India

El desarrollo de software requiere mucho pensamiento y enfoque claros. ¿Cómo se logra ese nivel de pensamiento? Muchas veces pienso demasiado.

¿Hay algún estudiante que sea programador profesional o desarrollador de software sin una computadora o computadora portátil?

¿Qué calificaciones necesita un desarrollador de iOS?

¿Dónde debería centrarme más: desarrollo web, diseño gráfico, aplicaciones de Android, aplicaciones de iOS, juegos o análisis de datos?

¿Cuál es la mejor empresa de desarrollo de software en Alwar Rajasthan?

¿Debería unirme a una empresa de desarrollo de software que declare contractualmente la propiedad sobre la propiedad intelectual que podría producir en mi propio tiempo?

¿Cuál es la diferencia entre el ingeniero de I + D y el desarrollador de software?

¿Los desarrolladores de Xamarin tienen demanda en la industria del software en India?

La ruta para ser un buen ingeniero de software

¿Qué tan fácil en Estados Unidos para un desarrollador de software una vez terminado para encontrar un nuevo trabajo?

¿Cómo se puede obtener un trabajo de desarrollador de software después de cumplir, digamos, 20 años de prisión?

¿Cómo deben lidiar los programadores con el código fuente contaminado?