arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Código Facilito 3.0

Uriel Hernández

CTO de Código Facilito

av_timer 9 Min. de lectura

remove_red_eye 17931 visitas

calendar_today 19 Octubre 2015

Hace 1 semana de cuando estoy escribiendo el artículo liberamos nuestro tercer release grande de la plataforma. Es la tercera vez que iniciamos un proyecto desde 0 y lo convertimos en Código Facilito, en este artículo les contaré lo que aprendimos de este nuevo release, cómo lo hicimos, qué hay de nuevo, cuáles son las ventajas y más.

El inicio

En Diciembre del año pasado (2014) me gradué como ingeniero en Desarrollo de Software, un par de meses después, Alex también terminó la universidad; en Enero de este año comenzamos a platicar sobre Código Facilito, empezamos a traer la idea de una suscripción, actualizar los cursos premium más rápido, traer más cursos, ver los vídeos en la plataforma, acceder a todo el contenido con una mensualidad y otras ideas que nos emocionaron mucho del futuro de Código Facilito; por primera vez Código Facilito será mi tiempo completo así que era el momento ideal para aceptar nuevos retos y crecer la plataforma y el proyecto.

Ese mes decidimos que en Mayo haríamos el release de una nueva plataforma, de Mayo a Octubre hay una diferencia de 6 meses, tardamos ~9 meses aproximadamente en encontrar el resultado que queríamos para el remake de codigofacilito.com, al final quedamos contentos pero aún hay muchas cosas que planeamos en esos días en lo que estamos trabajando para mejorar el producto.

Personalmente, nunca me había sentido tan motivado de lo que tenemos, nunca me había sentido tan a gusto en la plataforma, así que desde el punto de vista del usuario me da mucho gusto el cambio que hicimos. La pregunta es cómo pasó todo.

Código Facilito 1.0 y 2.0

Así se veían Código Facilito 1:

El primer Código Facilito

Y así Código Facilito v2:

El segundo Código Facilito

La primera versión estaba disponible hasta hace un par de meses en https://codigofacilito.herokuapp.com/, como pueden ver el screenshot que subí incluye el curso de Rails y tweets de la cuenta de Código Facilito de este año, ahora ya no funciona porque la versión del API de YouTube que usamos en esa versión ya no funciona.

Código Facilito v2 era cool, y fue un gran paso hacia adelante, con Código Facilito 2 registramos más de 60 mil usuarios, más de medio millón de vídeos vistos y algunos datos igual de interesantes. Mi sentimiento con Código Facilito v2 es que probablemente siempre será mi favorito porque fue mi primera página web real, mi primera página web lista para producción realmente y claro, la primera versión que de verdad la gente apreció utilizar :) (muchas gracias)... sin embargo, esa versión daba la sensación de que, bueno, funciona bien, pero nada más (incluso ni eso, tenía varios bugs históricos), CF v2 no sorprendía, sólo estaba Ok.

Los problemas

¿Qué tenían de malo las versiones anteriores? Código Facilito v1 era una versión lenta y con diseño diferente del canal, simplemente mostraba vídeos, pero al correr en una instancia gratuita de Heroku y al no tener base de datos era muy lenta, todo lo traíamos por petición de YouTube, iugh. Código Facilito v2 tenía una base de datos que creció mucho, iniciamos con pocas tablas, usuarios, artículos, cursos, vídeo, y luego todo fue creciendo, al final agregamos gamification, un foro, progreso de cursos, vídeos, notas y otras cosas interesantes; era mucho más eficiente que v1 en términos de velocidad y claro hacía algo no solo era el canal. v2 además tenía bugs, bugs que tardaban en ser resueltos o nunca fueron resueltos, la razón es que el código no era el mejor (y lo están escuchando del programador), era difícil hacer tracking de dónde estaban fallando las cosas, teníamos muchos parches, nunca hubo diseño del sistema, sólo fuimos agregando features y parches que rompían otras cosas.

En v2 tuvimos un periodo de un par de meses en que ruby se zombificaba y se comía todo el CPU hasta que los usuarios no podían ingresar a la página, la solución solía ser reiniciar el servidor, durante esos meses mi trabajo fue vigilar al servidor para que no se cayera y reiniciarlo. Fue difícil encontrar el bug pero eventualmente lo encontramos, también consideren que tardamos porque yo tenía la universidad y no le dedicaba mucho tiempo al desarrollo.

Así que dado el progreso en mejoras que tuvimos en v2, teníamos que hacer algo muy cool en v3.

TDD to the rescue

Hace 2 años iniciamos a programar v2, era Enero del 2013, yo no tenía nada en producción, nada, sólo tenía este framework cool que había aprendido que al parecer hacía todo con magia y bueno, las cosas se fueron dando paso a paso. Mucho de lo que se implementó en v2 era la primera vez que pasaba en mi cabeza, la primera vez que me tocaba solucionarlo... fue un proceso de aprendizaje inmenso, pero claro, eso viene con un precio, la plataforma era bugosa, el código no era el mejor, el rendimiento tampoco... así que cuando decidimos que íbamos a montar un plan de suscripciones, pensé que era mejor deshacernos de todo ese pasado de aprendizaje y errores y reemplazarlo por una versión más pensada de Código Facilito.

La historia continúa en que al tiempo que casi salía de la universidad, consideré un trabajo como Rails dev, me sentía capacitado excepto por una cosa... escribir pruebas. En la comunidad Ruby, en Rails y en cualquier empresa seria, escribir pruebas es esencial, escriben código usando TDD o BDD, no es algo que pueda ser, no es algo que se hace al terminar el sistema, es algo que se hace antes de escribir cualquier línea de código. Claro que en el par de entrevistas que tuve me preguntaron sobre las pruebas, y aunque sí conseguí algunas ofertas por mi experiencia en Código Facilito, otras no las tuve, y pienso que no saber de pruebas fue clave.

En ese momento decidí que tenía que aprender, inicié a investigar de Rspec, de Capybara, de Factory Girl y otras herramientas de pruebas que tenemos en Rails. Siempre titubé de aprender test porque para cuando supe de la importancia de las pruebas, v2 era muy grande y para un principiante iba a ser difícil escribir pruebas para todo el código que ya existía, además recordemos que en ese momento el tiempo era muy importante, no tenía mucho así que dedicar un mes o dos a testear lo que ya teníamos de Código Facilito no era el mejor plan.

Para v3 iniciamos escribiendo pruebas, tenemos pruebas unitarias, de controladores, de peticiones, de integración e incluso de performance; tenemos pruebas con servicios externos y muchas cosas interesantes, tener una suite de pruebas es esencial, ahora cuando escribimos un nuevo feature, corremos las pruebas existentes, vemos que le nuevo feature no afectó el resto del código y BUM a producción.

Tener y saber escribir pruebas significa que ahora es más fácil para nosotros identificar bugs y agregar nuevas cosas sin romper otras.

Suscripción

La suscripción es el la carta principal de v3, ahora puedes ver todos los cursos premium por sólo 9usd al mes; eso es genial, pero no es lo mejor, lo mejor es que ahora podemos actualizar con más regularidad los cursos premium, solo esta semana llevamos 20 nuevos vídeos premium, tenemos ya más de 200 vídeos para el plan premium y cada semana actualizaremos y subiremos más, esa era la clave de esta nueva versión.

Integrar la suscripción fue un desafío, cuando lanzas por primera vez tu sitio y la gente lo está conociendo, no es tan grave equivocarse; cuando estás manipulando dinero y sabes que desde el día 1 tendrás un número interesante de visitas... bueno, los nervios entran.

Inicialmente implementamos todo en PayPal REST, cool, PayPal REST es una mejor épica sobre lo que ahora se llaman Classi APPs de PayPal, sólo hay que decir que la documentación de las Classic Apps de PayPal estaba en múltiples PDF's, ¡PDF's! es enorme y tedeosa, REST PayPal es más legible.

Cuando iniciamos con todo esto PayPal REST estaba introduciendo las suscripciones, juegas con unas cosas que se llaman Plans y Agreements para poder suscribir a los usaurios... ¿el problema? Aún no estaba la documentación </3, tocó leer el código fuente de la gema de PayPal para Ruby y así es que logramos implementar suscripción con PayPal; el cobro de tarjetas fue más fácil porque ya tiene más tiempo ahí, hay documentación, tutoriales, ejemplos y otros recursos que te hacen la vida más fácil.

Lo triste es que después de lo que costó implementar suscripciones con PayPal REST... tuvimos que deshacernos de eso ¡EN SERIO!, out, no sirve, desechenlo, se va, nunca lo escribimos... ¿por qué? Resulta que las suscripciones en PayPal REST no tienen Webhooks, los Webhooks son una forma en como las API's te avisan de que algo pasó (se canceló una suscripción, se procesó un pago... etc), esta información es necesaria para crear un sitio robusto de pagos. Así que 1 mes antes del lanzamiento re escribimos las suscripciones para usar Recurring Payments de Classic Apps de Paypal </3.

El cobro por tarjeta lo re escribimos para usar Stripe, que es más amigable, API mejor diseñada, mejor documentación, mejor soporte... ¡genial!.

Aún a pesar de las pruebas, los webhooks y el hecho de que escribimos un pequeño bot para Slack que nos avisa de cualquier error o cosa que suceda, estábamos muy nerviosos de que algo fallara en producción. Hubo errores y le agradezco a Jezabel que fue nuestra primera suscriptora en PayPal, fue muy paciente y nos ayudó a detectar que teníamos un espacio, en serio, un espacio que estaba haciendo que el proceso de pagos no se efectuara efectivamente.

Todo lo que aprendimos en este proceso lo estamos enseñando en el Curso de Ecommerce.

La migración de datos

Decidimos cambiar el sitio un domingo en la madrugada, el momento en el que tenemos menos usuarios, mientras migramos los datos de una base de datos a otra el sitio estuvo sin funcionar y lo que veías al ingresar era el vídeo de un gato, literal, puedes encontrar el código fuente de la página del gato, a pesar de que habíamos hecho pruebas de la migración de datos, nunca pensé que fuera a tomar tanto tiempo, de hecho fue más rápido en mi Macbook que en el servidor (nos fallaste Microsoft <3 ), la migración de todos los datos tardaría aproximadamente 7 horas pasadas las 6am, a las 8am hicimos oficial el lanzamiento en redes sociales.

mySQL estaba tomando muchos recursos para migrar los datos, así que decidimos pausarlo para que no afectara el rendimiento de la página, durante las siguientes noches migramos los datos faltantes, no sin antes recibir muchas preguntas de los usuarios sobre los datos, lo sentimos.

Básicamente el domingo fue de últimos cambios detalles y al final desvelo para poder tener listo el sitio.

Qué más trae v3

Las notas son épicas

Las notas ahora también sirven como tags en el vídeo, si guardas una nota en el minuto 1:04 del vídeo, cuando regreses ahí y quieras buscar algo, puedes hacer clic sobre la nota y te llevará al minuto en el que fue creado, esto servirá para que tú guardes información importante y puedas volver a ella sin tener que buscar en qué momento del vídeo había quedado eso.

El foro está mejor que nunca

El foro ahora tiene filtros para encontrar preguntas sin respuesta, preguntas resueltas, sin resolvar. Puedes filtrar por categoría, puedes además ver en qué vídeo se creó esa pregunta y así. Todo esto es para que sea más fácil encontrar las preguntas en las que puedes ayudar.

Las preguntas y respuestas del foro ahora se estilizan usando Markdown, tal como en Stack Overflow, Markdown es más productivo y es una mejora ENORME al editor que teníamos en v2 para las preguntas que era horrible.

Las preguntas además ahora tienen highlight de código:

http://i.imgur.com/D8N8HuD.png

El foro mejoró enormemente y aún tenemos planes aún más cool para el foro pero que aún están en desarrollo, pronto más sobre eso ;)

El dashboard tiene todo lo que necesitas

El home de un usuario registrado ahora tiene más que solo la información de sus cursos, tiene notificaciones, cursos nuevos, información del usuario, mensajes de la plataforma para informarte de lives en el canal y anuncios que tengamos. Tiene y tendrá los stickers que irán ganando, les avisa de errores en su perfil y así.

http://i.imgur.com/7oEYZwO.png

Final

Ha sido genial re inventar todo en Código Facilito, a mucha gente le gustaba v2 así que fue un desafío extra saber que nada podía dar un paso atrás de lo que ya teníamos, iteramos mucho en el landing y en la vista de los cursos, iteramos mucho en el dashboard, en cómo se debían ver los cursos.

Se vienen las mejores cosas aún, tenemos planes muy grandes a construir encima de esta plataforma que estás usando, esperamos que te gusten mucho, que disfrutes los cursos y nos sigas apoyando compartiendo nuestro contenido.

Seguimos trabajando muchísimo, en esta semana liberaremos otro feature interesante, aún nos falta platicar de stickers, de misiones de quizzes... todo eso ya está listo e irás viéndolo eventualmente.

¿Hay algo que cambiarías? Cuéntanos en los comentarios.