¿Cómo tratar los errores que los usuarios pensaban que eran una característica?


15

Pregunta :

¿Cuál es la forma correcta de abordar un error que un usuario final pensó que era una característica?

Elaboración :

Supongo que si un gran porcentaje de usuarios lo esperara como una característica, ¿debería dejarse "sin fijar" o "arreglado" para que sea más estable? Sin embargo, ¿qué pasa si un porcentaje muy pequeño de usuarios espera que sea una característica ... digamos 0.1% o 1%, y este error debe ser solucionado?

Teóricamente, dado que esta es una corrección de error menor, puede calificar como PATCH según lo considerado por el control de versiones semántico: xyZ Sin embargo, dado que rompe la compatibilidad con versiones anteriores (incluso solo para algunos usuarios) debería ser un aumento MAYOR: ¿Correcto Xyz? ¿Podría calificar como un PARCHE (ya que no fue pensado como una característica) siempre que esté documentado?

EDITAR: en este caso específico, es un error en una API de una biblioteca utilizada internamente que usan otros desarrolladores.


8
¿No son todas las características de errores? ;)
Lawrence Aiello

2
proporciona un interruptor en la nueva versión que está desactivada de manera predeterminada, y cuando se activa, ¿emulará el comportamiento anterior? sucede todo el tiempo sin noticias,
sigue


A veces, una característica no es más que un error como lo describe el departamento de marketing.
Dan Pichelman

Se actualizó la publicación original para aclarar que es un error en una biblioteca utilizada internamente; Creo que este es un caso diferente a un error en un producto vendido a los clientes, ya que no afecta el flujo de trabajo o la usabilidad.
robodude666

Respuestas:


7

Supongo que si un gran porcentaje de usuarios lo esperara como una característica, ¿debería dejarse "sin fijar" o "arreglado" para que sea más estable?

¿El error agrega valor? Si es así, es más una característica. A veces, un "error" puede terminar como una "característica" de valor agregado.

Es difícil responder realmente de manera concluyente porque cada situación será diferente.

En este caso específico, es un error en una API de una biblioteca utilizada internamente que usan otros desarrolladores.

En este caso, incluiría una solución como parte de su próximo cambio importante con respecto a la compatibilidad con versiones anteriores. Usted no puede realmente hacer esto de forma consistente en la mayoría de los entornos y es probable que haya un horario / plazo para ello.

Como desarrollador, lo último que quiero tratar es una API que tenga un comportamiento incorrecto o inconsistente. Los errores se consideran esto.

Como mínimo, cree internamente algún tipo de documento / wiki de "errores conocidos con la versión actual" para asegurarse de que todos sus usuarios internos sepan que la funcionalidad es similar a un error. Esperemos que tenga suficientes pruebas que cubran las áreas donde las personas están usando la función de error como una característica para que pueda ver dónde / cuándo se rompen las cosas cuando / si corrige el error.


10

Recomiendo hacerlo más estable. Los usuarios son la fuente canónica de lo que hace su software. Si lo quieren y han llegado a confiar en él, lo pensaría dos veces antes de tirarlo.

Un buen ejemplo de esto es la mecánica de "Esquí" en el videojuego "Tribus". Originalmente un error en la forma en que el motor de física manejaba el salto en una colina, terminó siendo una de las mecánicas principales del juego. Puedes leer un poco más al respecto aquí , si tienes curiosidad.



2
Otro gran ejemplo de videojuego es la capacidad de cancelar movimientos en otros movimientos en las versiones anteriores de Street Fighter ( en.wikipedia.org/wiki/… ). Originalmente un error, ha ascendido a ser una "característica".
Michael

8

Dado que el error está en una biblioteca, aquí hay otro enfoque que puede tomar:

  1. Haga un clon de la función de biblioteca errónea. En muchos casos, las personas simplemente agregan un 2al nombre de la función en estos casos, pero, si tiene otros cambios que le gustaría aplicar a la interfaz de esa función, también podría darle un nombre completamente diferente.

  2. Solucione el error solo en el clon (e implemente todos los demás cambios de interfaz que desee mientras lo hace).

  3. Declarar la función original como obsoleta.

  4. Elimine la función original en alguna próxima versión principal.

Este enfoque es especialmente útil para funciones cuya interfaz está fundamentalmente rota: no se rompe el código de usuario de inmediato, pero se le advierte a quien confía en el código roto para hacer la transición al uso del código fijo. E incluso si las personas no prestan atención a la advertencia, realmente no pueden culparlo una vez que realmente elimina la función rota.


1
En este caso particular, la función "rota" podría vivir indefinidamente ya que proporciona un comportamiento fundamentalmente diferente (y valioso).
RubberDuck

¿Cómo funciona mejor este clon que una nueva versión principal que usa el control de versiones semántico?
Kat

@ Mike Evita romper todo el código heredado que se basa en el error. Dependiendo de cuánto de este código existe, esto puede ser una gran ventaja. Si rompe el código de usuario de una manera que las personas encuentran difícil de corregir, es posible que su nueva versión de biblioteca no se use en absoluto. Todo lo bueno de tu nueva versión se ignora solo porque el umbral de adopción es demasiado alto; Has encadenado a tus usuarios a la versión anterior. Si continúa proporcionando la "función", las personas pueden cambiar de inmediato. Y, dependiendo de su comunicación de la desaprobación, también comenzarán a evitar la función desaprobada.
cmaster - reinstalar a monica el

4

En este caso específico, es un error en una API de una biblioteca utilizada internamente que usan otros desarrolladores.

Si esos otros desarrolladores pensaron que el comportamiento era una característica, es probable que lo hayan usado y hayan desarrollado software de trabajo sobre él. La corrección del error probablemente romperá su código existente, y te culparán por esto. Esto hace que arreglar el error sea una compensación, y debes considerar

  • ¿Es realmente importante corregir el error, por ejemplo, porque existe un alto riesgo de permitir que los usuarios de su API bloqueen sus aplicaciones en caso de que el error no se solucione? ¿O se trata solo de la coherencia de la API?

  • ¿O es más importante mantener estable el software existente y su biblioteca compatible con versiones anteriores?

La respuesta a la pregunta no siempre es simple, debe tener en cuenta el número de posibles usuarios de su API, la cantidad potencial de trabajo que tendrán que cambiar su software, la cantidad de software que se romperá si cambia su API , pero también los riesgos de lo que podría suceder si no arregla la API.

El hecho de que documente el cambio de corrección de errores en una "lista de cambios importantes en su próxima versión principal" no hace felices a sus clientes; si lo hace, debería haber al menos algún razonamiento a prueba de balas por el que no podía dejar que la API funcionara. Fue antes. A menudo, mantener la compatibilidad con versiones anteriores es más importante que corregir un error. Así que corríjalo solo si puede estimar el impacto en su base de usuarios y su software y está seguro de que no va a producir esfuerzos irrazonables para ellos cuando intenten actualizar a su última versión de la biblioteca. Y si no tiene suficiente información para hacer una buena estimación de esto, probablemente sea mejor no cambiar el comportamiento.

(Y sí, si va a hacer un cambio de API que no sea compatible con versiones anteriores, sus números de versión deben expresarlo claramente, no importa si lo llama "corrección de errores" o no).


1

Abrázalo. Puede hacer que su producto sea completo.

GunZ: The Duel (un juego en línea) tenía un error que podía explotar y abusar constantemente para cambiar casi todo el juego (llamado K-Style; búsquelo en YouTube). Hizo todo el juego mucho más desafiante; tomó habilidad y lo hizo increíble y divertido ... tan divertido que incluso los moderadores lo usaron abiertamente como su estilo de juego principal.
Es lo que hizo el juego.
No jugué en años, pero hasta el día de hoy, como jugador, es uno de mis juegos favoritos de todos los tiempos porque está basado en habilidades y es muy divertido, y toda esta genialidad solo por un error.

Eventualmente lo arreglaron, pero la gente odiaba tanto que los desarrolladores lo molestaron seriamente.

Entonces mi respuesta es estabilizar y mantener (refactorizar si es necesario).


Habiendo dicho esa bella historia, no creo que la misma respuesta se aplique a nada que no tenga una ventaja directa. Si su error causa un evento que causa la ventaja, generalmente será más inteligente solucionar el error y encontrar otra forma de lograr lo que pueda. Si está fuera del alcance, considere dejarlo solo por estar fuera del alcance, o cree otro módulo (quizás uno pequeño) para introducirlo. Básicamente: no viole el principio de responsabilidad única .

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.