Hoy en día, las personas que están involucradas en el sector del desarrollo de software seguramente, sea por querer hacer un proyecto propio o por una nueva iniciativa en su trabajo, se han visto involucradas en este gran cuestionamiento: ¿cómo saber cuáles son las tecnologías más apropiadas para desarrollar este proyecto que tienen en frente?
Esta es una decisión que, en el peor de los casos, puede significar tener que rehacer el proyecto debido a que la tecnología no sólo no facilita la construcción del proyecto, sino que ni siquiera tiene los requerimientos mínimos para que el proyecto tenga las funcionalidades básicas. En este artículo se mencionan varios temas claves que se deben tener en cuenta antes de empezar un proyecto de software.
Comprender las necesidades del proyecto
El primer punto clave es entender, lo más profundamente posible en el tiempo de planeación asignado, las necesidades específicas de tu proyecto. Esto implica evaluar principalmente los requisitos funcionales, las restricciones técnicas, los objetivos de rendimiento y la escalabilidad requerida. Algunas preguntas clave a considerar son:
- ¿Qué tipo de aplicación estás desarrollando? (web, móvil, desktop, etc.)
- ¿Cuáles son las principales funcionalidades que tu aplicación debe ofrecer?
- ¿Cual es el perfil de los usuarios? ¿Qué tipo de interacción tendrán con la aplicación?
- ¿Cuál es el volumen y la complejidad de los datos que tu aplicación debe manejar?
- ¿Cuál es el número esperado de usuarios y la carga de tráfico que tu aplicación debe soportar?
- ¿Existen requisitos de seguridad, cumplimiento normativo o integraciones específicas?
Analizar las opciones disponibles
Una vez que has definido las necesidades de tu proyecto, es momento de investigar las diferentes tecnologías que podrían ser adecuadas. Esto implica analizar las fortalezas y debilidades de las principales alternativas en términos de rendimiento, escalabilidad, facilidad de uso, curva de aprendizaje, comunidad de desarrolladores y soporte a largo plazo.
Algunos ejemplos de tecnologías bastante utilizadas dependiendo del área son:
Desarrollo Web
- Frontend: Frameworks o librerías de Javascript como React (Nextjs), Angular o Vue.js
- Backend: Node.js, Python (Django, Flask) o Java (Spring) para crear APIs.
- Bases de datos: Relacionales como MySQL o PostgreSQL, o No relacionales como MongoDB y Cassandra
Desarrollo Móvil
- Swift para desarrollar aplicaciones iOS o Kotlin para desarrollar aplicaciones Android.
Inteligencia Artificial y Machine Learning
- Python es el lenguaje dominante en este campo, con bibliotecas como TensorFlow, PyTorch y Scikit-learn.
Infraestructura
- Cloud Computing: AWS, Azure, Google Cloud Platform son plataformas en la nube que permiten alojar aplicaciones y servicios.
- DevOps: Docker o Kubernetes son herramientas de tendencia usadas para asegurar una consistencia en el desarrollo, mantenimiento y despliegue de aplicaciones.
Es importante considerar que las opciones que se escojan, ya sean de lenguajes de programación o más específicamente de librerías o frameworks, deben ser opciones que demuestren a través de ciertas estadísticas (como el número de descargas o que tan seguidos les hacen actualizaciones) que tanto soporte tienen.
También es importante considerar que, dependiendo de la fase en la que se encuentre la aplicación, muy probablemente no sea necesario inicialmente pagar por tecnologías que son usadas para, por ejemplo, escalar la aplicación, como Kubernetes.
Considerar la experiencia del equipo
Es importante que al escoger estas tecnologías se tenga en cuenta la experiencia y habilidades del equipo. Escoger una tecnología que sea del conocimiento del equipo puede acelerar el tiempo de desarrollo, así como facilitarles el trabajo. O, dado el caso que el equipo también debe reclutarse para un proyecto nuevo, considerar tener bien descritos entonces los requerimientos que los candidatos deben cumplir.
Estos son un par de factores, además de otros, que se pueden considerar al momento de iniciar un proyecto de desarrollo. La experiencia y la buena planeación permitirán que estas decisiones sean tomadas de forma más óptima.