Low cost en .NET: recursos para reducir costes

El coste de desarrollo y explotación de proyectos es un factor clave en el éxito de productos de software. Este coste es tanto más importante cuanto menor sea el tamaño de la empresa que lo asume, llegando a su límite en las startups tecnológicas, que por fuerza necesitan minimizar sus gastos iniciales, y lo es también en los productos maduros y exitosos que a menudo consumen ingentes cantidades de recursos. La elección de las herramientas de desarrollo y las plataformas de producción, ya sea en propiedad o en hosting, así como nuestras propias técnicas y patrones de implementación incidirán decisivamente en el importe total de un producto.

Si estáis pensando en desarrollar aplicaciones profesionalmente, y os decantáis por usar la plataforma .NET como marco de trabajo, os presento aquí ciertas medidas para que lo hagáis al menor coste posible.

Para empezar deciros que dentro de la denominación genérica Express, Microsoft ofrece toda una gama de productos gratuitos para desarrolladores, tanto para escritorio como para web. Si preferís trabajar en entornos no Windows, o no queréis usar Visual Studio, también podéis usar el IDE gratuito MonoDevelop.

La comunidad de desarrolladores OpenSource que durante mucho tiempo pareció ser patrimonio exclusivo de otras tecnologías, es ahora una realidad más en .NET. En repositorios de código público como CodePlex, GitHub, GoogleCode, SourceForge… hay miles de desarrollos que podréis utilizar en vuestros proyectos. La regla básica de antes de programar mirar si otro ya lo ha hecho antes, está hoy más vigente que nunca.

Para mí, el factor crítico en cualquier proyecto de software es el que se refiere a la elección de la base de datos. Cuando hablamos de gigas de datos, o de miles de usuarios, ya sea que nos cobren por licencias o por volumen, siempre será una partida importante. Para proyectos pequeños o durante las etapas de desarrollo podremos usar la versión Express o Compact de SQL, ambas gratuitas, pero cuando el proyecto crezca mi recomendación es que os paséis a MySQL. Esta decisión tenedla en mente a la hora de elegir o diseñar vuestra capa de acceso a datos, para que la transición entre gestores sea factible. Esta capa de acceso tiene así mismo importancia en los costes, porque no todas consumen la misma cantidad de memoria ni producen sentencias SQL de calidad. Personalmente no os recomiendo las opciones tipo EntityFramework o NHibernate, yo prefiero usar pequeños y rápidos ORMs como Dapper o PetaPOCO que resuelven lo más tedioso del acceso a datos y te dejan libertad para decidir cuándo y cómo optimizar tus consultas.

El asunto de las base de datos no se reduce a la elección del motor relacional y al ORM que te facilite su manejo, sino que cuestiona la propia necesidad de un servidor relacional. Sabemos que además de minimizar el coste en licencias, hemos de reducir el consumo de recursos como disco, procesador, memoria y ancho de banda. Por ello os recomiendo que valoréis el uso de las bases de datos NoSQL (Not Only SQL) disponibles, que proponen soluciones documentales o jerárquicas de almacenamiento, que destacan por un uso eficiente de los recursos físicos cuando son sometidos a grandes volúmenes de tráfico. Cierto que según para que proyectos pueden no suplir la necesidad de un servidor de datos, pero sí se pueden usar para derivar hacia ellas el grueso del almacenamiento. Entre estas soluciones destacan MongoDB y CouchDB, pero no todos los proveedores de hosting os las van a ofrecer, así que os propongo una alternativa casera que no requiere instalación específica pero que ofrece las funcionalidades mínimas de cualquiera de las anteriores. Se llama RaptorDB y tiene unas métricas de velocidad y consumos excelentes.

Si vuestra aplicación se va a publicar en internet de nuevo tendremos dos factores de coste más a computar: el servidor de aplicaciones y el ancho de banda. Para el primer caso la alternativa barata al tándem Windows\IIS es OpenSUSE\mono. Debemos valorar muy bien esta decisión porque de nuevo no todos los proveedores de servicios os la van a ofrecer, y normalmente aunque es más caro un servidor Windows que otro Linux, es un coste suele ser por licencia y a la larga no es tan representativo, como el de la base de datos. Pero en cuanto al ancho de banda necesario si podéis hacer cosas, bueno, en realidad las mismas cosas que en cualquier plataforma. Optimizad los recursos, minimizad el tráfico. ¿Cómo? Para empezar, si como yo, no sois diseñadores profesionales, os recomiendo que contratéis a alguien que sí lo sea, para que os haga un buen y minimalista diseño para vuestra web, o al menos buscad alguno prefabricado que cumpla con lo anterior.

Seguro que este gasto inicial os ahorrará costes futuros, y sobre todo os mejorará la usabilidad de la aplicación y por tantos su monetización. Pero volviendo a la parte técnica de la implementación, la receta lowcost incluye el uso de un CDN para descargar librerías estándar tipo jQuery en Google y el uso de compresores de scripts… Por supuesto el uso de AJAX para evitar tráfico innecesario e idealmente enviando sólo datos en formato JSON y usando plantillas en el lado del cliente. Si podéis, trabajad en HTML5 y aprovechad las característica de Local Storage que os proporcionará una caché local que reducirá el tráfico de datos.

Como veis tenemos un montón de opciones que nos permiten reducir los costes finales, y tanto este coste, como la calidad final de los proyectos dependerá mucho más del factor humano que de cualquier otro. Probad tecnologías, aprended cuantos más lenguajes mejor, y cuando os encontréis a gusto, no la cambies por dinero.


Alberto Basalo es arquitecto de software y promotor de la iniciativa de software libre en .NET LessFramework

Trabajó para empresas como Zara o Tous y es socio fundador de la consultora Lusco

Puedes seguirlo en Twitter: @albertobasalo y en su blog arquitectura binaria


Más información | Microsoft Express, Monodep, OpenSuSE\Mono, Compact

Portada de Genbeta