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.
fuente
Respuestas:
¿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, 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.
fuente
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.
fuente
Dado que el error está en una biblioteca, aquí hay otro enfoque que puede tomar:
Haga un clon de la función de biblioteca errónea. En muchos casos, las personas simplemente agregan un
2
al 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.Solucione el error solo en el clon (e implemente todos los demás cambios de interfaz que desee mientras lo hace).
Declarar la función original como obsoleta.
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.
fuente
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).
fuente
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 .
fuente