Bugs

El primer problema y el más importante, como no, son los malditos bugs. Esos bichos asquerosos que nos encontramos en el código y que tenemos que matar con un matamoscas, spray o lo que tengamos más a mano. No, ahora en serio, un “bug” no es más que un eufemismo para referirse a un ERROR de programación, esto es así. Las causas pueden ser muy diversas: un simple error de sintaxis, a un error de concepto, un simple despiste, una errata, etc. La importancia y repercusión también pueden diferir mucho de un bug a otro, puede ser que un bug provoque el colapso entero del sistema (con lo cual sería crítico) o que provoque que un texto salga repetido dos veces (posible problema estético).

Un tipo de bugs que son muy duros de solucionar son los de terceros, es decir, cuando utilizamos software desarrollado por otras personas. Si tenemos acceso a él (y la licencia lo permite) podemos intentar arreglarlo nosotros mismos (no suele ser fácil) o bien reportar el bug y cruzar los dedos para ver si lo pueden resolver pronto.

Incompatibilidades

El tema de las incompatibilidades también puede ser una pesadilla. Los desarrolladores trabajamos con montones de librerías y cada una tiene una “versión”. El problema está en que a veces cuando actualizamos alguna de las librerías, esto provoca incompatibilidades con el resto. Muchas veces es debido a cambios que han realizado en estas librerías y ahora las cosas se llaman y/o funcionan de forma distinta y por lo tanto, tenemos que hacer cambios para adaptarnos. Esto también provoca lo que se llama como fragmentación, o lo que es lo mismo, trabajar con varias versiones del mismo sistema… ¿Os suena el caso de Android?

Deprecations

En el mundo de la tecnología todo se vuelve obsoleto en poco tiempo. Vamos tan rápido creando cosas nuevas que aquí no hay nada que dure mucho tiempo sin que algo mejor lo sustituya al cabo de poco. En la programación esto provoca que las nuevas versiones vayan deprecando algunas herramientas en favor de otras. Esto también significa que tendremos que hacer cambios en nuestro sistema, porque a la larga lo que está "deprecated" puede dejar de estar disponible y entonces sí que vamos a tener un problema grave.

Limitaciones

Hay varios tipos de limitaciones: Las del diseño de tu propio sistema, limitaciones de frameworks o librerías de terceros y limitaciones de la tecnología elegida.

En teoría, las limitaciones de tu sistema deberían ser las más “fáciles” de solucionar porque como es tu sistema, en teoría (insisto) deberías poder amoldarlo mejor a las necesidades ya que lo conoces mucho mejor. Las limitaciones de software de terceros pueden ser complicadas de solventar y existen dos posibles alternativas: una es directamente cambiar de librería y buscar otra que nos pueda ofrecer la funcionalidad que necesitamos y la otra es hacer tu propia versión a partir de la librería original (siempre que la licencia lo permita, no vayamos a tener problemas…). A veces nos encontramos con limitaciones en la tecnología, ya sea a nivel de hardware o de software. No todos los lenguajes de programación soportan el mismo tipo de funcionalidades, por ejemplo, en lenguajes como Python o PHP podemos usar "monkey patches", cosa que en Java no.

Cambios

Esto de que los cambios frustran a los desarrolladores merece una puntualización. Me refiero a los cambios “improductivos”. Es decir, estar dándole vueltas siempre a lo mismo cambiando la misma funcionalidad una y otra vez sin que realmente aporte un valor añadido, o tener que hacer grandes cambios de forma periódica porque las librerías que se están usando no son estables y las están cambiando cada dos por tres. También es realmente frustrante el tema de los requerimientos crecientes (a veces infinitos), os suena ¿verdad? Todo esto podríamos resumirlo con la frase esa de… “No intentes arreglar lo que no está estropeado”.

Más información: Eureka Statups.

Fuente: Eureka Statups.