2.6: Capítulo 11 Edificio
- Page ID
- 64357
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)SI NO ERES UN programador TEMPORADO y estás construyendo una idea para ampliar tus habilidades, esta puede ser la etapa más larga de tu viaje.
No te preocupes si tardan meses antes de que tu trabajo comience a dar sus frutos. Sigue aprendiendo, sigue investigando, sigue tropezando con callejones sin salida y paredes de insectos. Los atravesará y obtendrá cada vez más rápido en el desarrollo de aplicaciones.
Si quieres, hazlo tú mismo. Puede tardar dos años en lanzarse de esta manera, pero obtendrás un conjunto de habilidades invaluables. No te puedo decir lo valioso que ha sido para mí aprender a programar. Literalmente no puedo ponérselo precio. No creo que sea exagerado decir que no tiene precio. La velocidad con la que puedo lanzar y probar nuevas ideas, acceder a nuevas oportunidades, conocer y ganarme el respeto de otros emprendedores no es cuantificable.
Puedo decir que poder hacerlo todo yo mismo me ha ahorrado más de cien mil dólares de costos de desarrollo subcontratados en los últimos años. No podría permitirme comprar ese tipo de tiempo, así que no habría lanzado tantos productos si no pudiera simplemente construirlos yo mismo.
Ahora me voy a poner un poco técnico. No es importante que entiendas todo pero es importante que estés al tanto de los tipos de servicios y términos que estoy usando. Te animo a que lo leas detenidamente aunque no vayas a desarrollar tu aplicación tú mismo. Administrarás mejor a los desarrolladores que lo hagan por ti.
Eventualmente necesitarás tener una opinión sobre todo en esta sección. Algunos capítulos te llevarán más tiempo que otros, y encontrarás las mejores respuestas simplemente saliendo y construyendo. No obstante, voy a describir mi forma de pensar para que sepa qué esperar y pueda desarrollar sus propias opiniones informadas.
El objetivo no es iniciar una sola compañía de software. Deberías comenzar varios, así vas a elegir un conjunto de estos servicios (una “pila”) que puedas reutilizar en todos tus proyectos futuros.
Como ya usé este término, tengo una nota rápida sobre lo que significa ser “técnico”. Aquí hay una lista de verificación. Si contestas sí a todos estos, ¡enhorabuena! Yo, sin autoridad real para hacerlo, por la presente te llamo “técnico”.
- ¿Lanzas regularmente una ventana de terminal para abrir programas, navegar por carpetas o verificar por qué el ventilador de tu computadora portátil sigue encendiéndose?
- ¿Sabes lo que es una consulta SQL join? ¿Punto de bonificación si conoces la diferencia entre una unión interna y una unión externa?
- ¿Se puede indicar claramente la diferencia entre un método de instancia y un método de clase?
- ¿Puede describir por qué los archivos de modelo, vista y controlador están separados en marcos web modernos?
Si esas preguntas te son completamente ajenas entonces tienes algo de lectura que hacer. Tomará algún tiempo antes de que pueda construir una aplicación web usted mismo. Ahora no eres técnico y te llevará meses de aprendizaje activo o un año de aprendizaje pasivo para convertirte en técnico. Pero nuevamente, el viaje bien valdrá la pena. El valor no tendrá precio para ti también.
Si has leído hasta aquí y tienes un hoyo en el estómago y quieres saltarte este capítulo, entiendo. Eso está bien. No hace falta ser técnico para tener éxito como emprendedor paralelo. Esta sección no requiere que seas un geek del software de computadora. En cambio, he escrito esto para hablarte directamente y ponerte al día con lo que absolutamente debes saber para externalizar múltiples proyectos de desarrollo en serie o en paralelo.
No te rindas todavía. ¡Sigue leyendo!
Me tomó unos cinco años convertirme en técnico, y probablemente todavía estoy en algún lugar entre un novato y un programador intermedio. El caso es que me encantan las cosas técnicas. Activa una parte de mi cerebro que realmente disfruta siendo desafiada. Entonces me lo comí. A lo mejor tú también, pero no dejes que eso sea una barrera. Otra forma de aprender sin dejar de acelerar el desarrollo es subcontratarlo a un experto amigable al que no le importa responder preguntas y puede enseñarte cómo funciona tu aplicación a medida que la construyen.
Las siguientes preguntas son sumamente importantes. Debes tener una opinión educada sobre estas respuestas para poder construir múltiples productos con éxito. Solo te ayudará como emprendedor tener una comprensión más profunda de este lado de las cosas.
Vamos a saltar a la derecha.
¿Dónde alojarás tu aplicación web?
Hoy en día, el alojamiento para empresas a nuestra escala viene en dos sabores: servidores privados virtuales (VPS) y plataformas de alojamiento o plataformas como servicio (PaaS).
Algunos ejemplos notables de VPS son Rackspace, Digital Ocean y el producto EC2 de Amazon Web Services (AWS). Te darán la posibilidad de iniciar sesión en un servidor e instalar todo lo que necesites para ejecutar tu aplicación.
Por otro lado, un PaaS hará toda la creación de servidores y despliegues de código por ti. El PaaS más popular es Heroku, que es propiedad de Salesforce y se ejecuta en AWS EC2. AWS también tiene su propio PaaS, Elastic Beanstalk, que tiene muchas de las mismas características que Heroku pero es menos costoso.
Recomendación: Heroku. Es gratis comenzar y escalar a bajo costo. Si no eres técnico entonces no te recomiendo usar una tecnología que Heroku no soporta. Haced caso omiso del zumbido sobre lo último, lo más grande. Usa un software probado y verdadero que ya es compatible con Heroku.
¿En qué idioma estará escrito?
Tus opciones son muchas, pero las tres que debes elegir son Ruby, Python y JavaScript. Si estás prestando atención a la tecnología entonces esos tres nombres deberían sonar familiares.
Python + Django
Python tiene unos treinta años. Comenzó en la academia y se popularizó por su lenguaje semántico y descriptivo. Si has visto fragmentos de código en el pasado, probablemente hayas visto un montón de paréntesis, llaves y punto y coma. Python se deshizo de esos y la gente se regocijó.
Se hizo popular entre los científicos de datos y hoy, por ejemplo, el código escrito para analizar las colisiones de electrones en el Gran Colisionador de Hadrones en Lucerna, Suiza, está escrito en Python. La mayor parte de la comunidad de aprendizaje automático todavía usa Python, y los desarrolladores de blockchain también lo han adoptado. Cuenta con una gran comunidad de ingenieros que escriben y lanzan paquetes de código libre y de código abierto, llamados bibliotecas, que le dan a Python un conjunto de herramientas listas para usar en sus programas.
Una de esas bibliotecas es Django y se ha convertido en la forma de facto de construir sitios web modernos usando Python. Si vas a desarrollar tu app en Python, vas a usar la biblioteca de Django para hacerlo.
Rubí + Rieles
Ruby es un lenguaje más reciente, desarrollado en Japón como alternativa a Python hace unos 20 años. También es muy fácil de leer; muchos discutirían más que Python.
Ruby comenzó como un movimiento muy nicho, casi clandestino para arreglar algunas de las cosas que molestaban a los programadores sobre Python. Entonces todo cambió cuando un desarrollador danés llamado David Heinemeier Hansson comenzó a escribir una biblioteca Ruby (se llaman gemas en Ruby) para el desarrollo web. Llamó a la gema Rails y el proyecto se hizo conocido como Ruby on Rails.
Ruby on Rails es el lenguaje de programación web más popular con millones de sitios web construidos sobre él. Su lanzamiento más reciente, Rails 5, se puso en marcha en la primavera de 2017 con mucha fanfarria en la comunidad Ruby. Es un hito importante para el proyecto y habla de la calidad, seguridad y longevidad de esta tecnología.
Si te sumerges en Ruby, encontrarás que hay una joya para todo. Para no quedarse atrás, incluso las bibliotecas de datos y estadísticas súper nerd de Python han sido reescritas en Ruby. Es una opción muy segura.
JavaScript (Node.js) + Angular o Reaccionar
JavaScript en este momento es como el Salvaje Oeste. Hace apenas unos años era un lenguaje puramente front-end, del lado del cliente (por ejemplo, solo se ejecuta en su navegador). Hoy en día hay mucha emoción en torno al propio JavaScript emergiendo como una opción para ejecutar lógica de back-end, consultas de bases de datos y, por supuesto, los geniales trucos de front-end por los que es conocido.
La diferencia entre JavaScript y Ruby y Python es que: JavaScript se ejecuta en navegadores y Ruby y Python se ejecutan en servidores.
¿Alguna vez has notado que a veces haces clic en un botón de un sitio web y la página se recargará, y otras veces verás brevemente un ícono giratorio y luego el contenido aparecerá mágicamente sin la recarga? Esa carga asincrónica es JavaScript en acción. Es la lógica que se ejecuta en tu navegador por lo que tu servidor no necesita hacer la renderización de la página HTML y provocar la recarga.
Para que esto sea más claro, aquí hay algunos ejemplos reales de ambas técnicas en sitios que probablemente hayas visitado:
Recarga de páginas:
- New York Times
- Wikipedia
Las páginas se cargan asincrónicamente:
- Gmail
A diferencia de Ruby y Python, el mundo JavaScript está en un estado de caos controlado y se mueve muy, muy rápido. El paquete de desarrollo de sitios web más popular (es decir, una biblioteca o gema en JavaScript) se llama Node.js. Node es realmente solo un paquete backend, así que en la parte superior de Node necesitarás cualquier cantidad de paquetes front-end. Los dos más populares son Angular (lanzado por Google) y React (lanzado por Facebook).
Hay miles de publicaciones publicadas en línea sobre cada una de estas tecnologías JavaScript. Lo importante que debes saber es que existen. No voy a entrar en los pros y los contras de cada uno aquí porque eso finalmente se reduce a una elección personal sobre el comportamiento de su aplicación web y su deseo de usar la última tecnología.
Recomendación: A menos que ya seas técnico, usa Ruby on Rails y aún no intentes JavaScript. Puede agregar un front-end de JavaScript resbaladito más adelante. Los rieles te darán todo lo que necesitas y tu código será eficiente y fácil de entender. Además, si subcontratas, tendrás muchas opciones económicas de desarrollo Ruby.
¿Qué tipo de base de datos va a utilizar?
Afortunadamente, estamos de vuelta a dos opciones, y solo voy a ir al grano aquí y decirte que uses Postgres. Sin embargo, aún necesitas saber cuál es la otra opción.
Postgres
Postgres es una base de datos transaccional, lo que significa que usa tablas y filas al igual que una hoja de cálculo de Excel. Es el tipo de base de datos más popular, comúnmente conocido como SQL (Structured Query Language). Hay competidores para Postgres en el panorama SQL, incluido MySQL que ahora es mantenido por Oracle, pero en los últimos años Postgres se ha convertido en la más confiable y rápida de las tecnologías SQL.
NoSQL -MongoDB
La alternativa a SQL es un enfoque basado en documentos, comúnmente llamado NoSQL. El líder en este espacio es MongoDB. En lugar de tener filas en tablas, se puede pensar que cada fila es un documento con datos estructurados arbitrariamente. Los documentos aún pueden relacionarse entre sí pero si quieres agregar un nuevo tipo de datos, solo puedes agregarlos. Ese es el principal beneficio: no declarar nuevas columnas y tener que migrar tus tablas. Las nuevas columnas simplemente pueden aparecer.
Recomendación: Usar Postgres SQL. Es una tecnología mucho más antigua, más segura y popular. El proceso de migración puede parecer complejo al principio, pero si piensas en la estructura de tu aplicación con mucha anticipación, no necesitarás cambiar demasiado tus tablas. Tus migraciones suelen estar agregando nuevos campos, lo cual es fácil de hacer. El almacenamiento basado en documentos simplemente no es necesario en el 99% de los casos.
¿Dónde guardarás tu código?
¡Cabezas arriba! Esto es crítico.
Necesitas usar un repositorio de código y debes ser el propietario de la cuenta del repositorio. Si trabajas con desarrolladores externos, entonces necesitas invitarlos a tu repositorio, no al revés. Debes ser el propietario del repositorio.
Incluso si desarrollas todo tú mismo, usar un repositorio de código es una buena higiene. No desea que todo su código fuente no implementado se almacene localmente en su computadora portátil. Si se pierde o se lo roban entonces podrías perder semanas o meses de trabajo. Los repositorios de código son remotos y funcionan en conjunto con un sistema de versionado como Git. Ellos harán un seguimiento de tus cambios de código (llamados “empujes”) y te ayudarán a colaborar con otras personas que quieras incorporar a tu proyecto en el futuro.
Debido a que es económico, fácil de usar y justo lo correcto, simplemente diré que un repositorio de código es imprescindible.
Recomendación: Usar GitHub. Hay alternativas como BitBucket, y Heroku tiene un repositorio de código incorporado, pero GitHub tiene un diseño hermoso e intuitivo y características de seguimiento de problemas que vale la pena explorar.
¿Qué marco de diseño usarás?
Un marco de diseño es un archivo en formato de hoja de estilo en cascada (CSS) que incluyes en el marcado de tu sitio web para agilizar la apariencia de tu sitio web.
Si nada de eso tenía sentido, explicaré brevemente cómo funciona una página web. Primero, tienes HTML, que es la estructura de tu página y se ve como <div>contenido</div> o <h1>contenido</h1>. Esos corchetes (que no ves cuando se carga la página) que rodean el contenido (que ves) forman la base del diseño de tu página web. Un archivo CSS le dice a su navegador web cómo <div><h1>deben verse esas y estructuras cuando se carga la página.
Bootstrap es un maravilloso archivo CSS lanzado por Twitter en 2011 y el diseño web nunca ha sido lo mismo. Para los solopreneurs hace que tu sitio web se vea decente sin hacer ningún extra diseñándote tú mismo. Los marcos de diseño le dan estilo para:
- Barras de navegación
- Formularios
- Botones
- Alertas
- Modales (popups de JavaScript)
- Banners
- Y más...
Lo más importante es que hace que su sitio web sea receptivo al dispositivo que lo ve. ¿Has notado que algunos sitios web se ven bien en tu smartphone, con texto y botones que escalan con tu pantalla, mientras que otros parecen una versión de un sitio web de escritorio y requieren que hagas zoom para navegar?
Ese cambio de tamaño automático al tamaño de la pantalla se llama “capacidad de respuesta”. Sin un framework sería una cantidad increíble de trabajo por hacer, y la mayoría de nosotros no conocemos CSS más allá de lo básico. Bootstrap se encarga de todo el trabajo pesado por ti y es gratis.
Las dos opciones más populares son Bootstrap y Foundation, con nuevos participantes como Tailwind y otras apareciendo todo el tiempo.
Bootstrap de Twitter
En estos días no se puede visitar la página de inicio de una nueva compañía sin ver algunos de los signos reveladores de Bootstrap. Esto es bueno y malo. Bootstrap es estable y bien documentado con una enorme comunidad de otros desarrolladores que hacen y responden preguntas sobre Bootstrap en sitios como Stack Overflow. No importa qué problema te encuentres, alguien más también lo ha encontrado y publicado la respuesta en línea. Es increíble cuánto soporte hay en línea para las principales tecnologías de código abierto como esta.
La desventaja es que es muy difícil hacer que tu sitio no parezca que está en Bootstrap. Puedes comprar plantillas que usan Bootstrap en el backend e incluir modificaciones a los valores predeterminados básicos de Bootstrap para que tu sitio no se sienta como el sitio de todos los demás, pero es casi imposible erradicar por completo la vibra de Bootstrap de tu sitio.
Fundación Zurb
Foundation, porque es menos popular, no sufre de la rutina de diseño demasiado familiar en la que Bootstrap ha empujado a los sitios web. Sin embargo, esto también significa menos apoyo de la comunidad y menos temas de diseño para elegir.
Zurb es una agencia de diseño, y al igual que Bootstrap su proyecto de Fundación comenzó como una herramienta interna que luego abrieron código y continúan actualizando frecuentemente. Es más fácil de personalizar que Bootstrap, por lo que los sitios de la Fundación no son tan fáciles de identificar visualmente.
Técnicamente, Foundation y Bootstrap son muy similares. Ambos se lanzaron en 2011 y tienen un sistema de cuadrícula de 12 columnas junto con el conjunto estándar de elementos de interfaz de usuario.
Viento de cola
Tailwind es una alternativa distinta a Bootstrap y Foundation. En lugar de forzar un conjunto de valores predeterminados prescritos, Tailwind ofrece un conjunto completo de utilidades que puede combinar para personalizar los elementos de su interfaz de usuario. El resultado es más sintaxis de clase en tus vistas, dándole una sensación más única a tu sitio y una manera más fácil de cambiarlo sin profundizar en el código fuente CSS.
Recomendación: Usar Bootstrap. Ve con la mayoría porque en última instancia te ahorrará tiempo y te dará más opciones para compras de plantillas. Si realmente estás motivado para darle a tu sitio un aspecto único, entonces usa Tailwind.
¿Deberías usar una suite de pruebas?
Todos los principales marcos de desarrollo web incluyen lo que se llama una suite de pruebas que los desarrolladores pueden ejecutar para asegurarse de que no haya errores evidentes antes de implementar su código en producción.
Las suites de pruebas tienen una sintaxis única y presentan otra curva de aprendizaje para ralentizar su desarrollo. Sin embargo, son muy efectivos para eliminar el tiempo de inactividad y las quejas de los usuarios por errores obvios.
El beneficio real de escribir pruebas y exigir que pasen antes de las implementaciones llega cuando se tiene un equipo de desarrolladores y una aplicación compleja. Es difícil, si no imposible, para un solo desarrollador mantener todos los vínculos entre las funciones de la aplicación ejecutándose en su cabeza. Pueden eliminar o renombrar una función, imaginando que no se usó en ningún lado, y accidentalmente hacer que la aplicación se estrelle o deje de funcionar. Los desarrolladores realmente buenos cometen estos errores todo el tiempo.
Por lo tanto, se desarrollaron conjuntos de pruebas para imitar el comportamiento real de la aplicación y garantizar que la aplicación se comporte como se predijo en la prueba.
Puedes probar cosas como:
- Asegurarse de que una página se cargue con cierta cantidad de texto o un formulario en particular.
- Asegurar que cuando se envía el formulario, se guardan los datos y se redirige a un usuario.
- Validando que cuando un formulario no esté completamente completado no se guardará y alertará al usuario.
Las suites de prueba son extremadamente minuciosas. Los desarrolladores pueden probar cualquier cosa: cualquier botón, carga de página o proceso de backend. Son especialmente útiles para cubrir los casos en los que la acción de un usuario no es lo que pretendía que hiciera. Debe asegurarse de que su aplicación pueda manejar una acción inusual de manera apropiada. Aquí es donde se introducen la mayoría de los errores y las pruebas hacen un gran trabajo al atraparlos.
Incluso hay un movimiento entre los desarrolladores para escribir las pruebas antes de escribir el código. Se llama desarrollo impulsado por pruebas y tiene una legión de seguidores. Los felicito por hacerlo, porque personalmente odio escribir pruebas. Sin embargo, me he obligado a hacerlo; y, mientras estaba a punto de desplegarme y pensar que bien podría ejecutar las pruebas y asegurarme de que nada se hubiera roto, he cogido muchos bichos.
Por lo que las pruebas son efectivas, pero pueden no ser necesarias en los primeros días del lanzamiento de su producto. Aquí hay una tabla rápida para resumir los pros y los contras de requerir pruebas.
Recomendación: Escribir pruebas para la funcionalidad central de la aplicación. No necesitas cobertura de prueba al 100%. Conforma con 50% o menos, siempre y cuando las herramientas que usarán tus usuarios cada vez que inicien sesión estén bien cubiertas.
¿Cómo va a cobrar los pagos?
Recolectar dinero, por supuesto, es una característica crítica en su aplicación. Hay dos opciones populares hoy en día, y debes estar preparado para hacer una elección entre ellas.
No se deje persuadir por pequeñas diferencias en las tarifas. Desafortunadamente, el procesamiento de tarjetas de crédito es costoso a escala. Desearía que las tarifas fueran planas, pero no lo son. Ya sea que esté cobrando $5 o $5,000, debe esperar pagar 3% por el procesamiento de pagos. Cuando alcances ese objetivo de ingresos de $10,000 por mes, gastarás alrededor de $300 de la parte superior en tarifas comerciales.
Stripe
Stripe es la más joven de las dos opciones y es favorecida por la mayoría de los emprendedores que conozco. Iniciado por dos jóvenes desarrolladores brillantes de Irlanda, Stripe fue diseñado pensando en los ingenieros de software.
Si no eres desarrollador entonces no hay razón para que conozcas Stripe, pero probablemente hayas usado Stripe sin saberlo. Desde enormes aplicaciones de viajes compartidos como Lyft hasta pequeñas startups, Stripe tiene una lista de clientes en cientos de miles.
El principal beneficio de usar Stripe es su facilidad de integración. Siguen siendo extremadamente reflexivos sobre la experiencia del desarrollador. Configurar tu cuenta de negocio es rápido y automatizado, y tienen un entorno de pruebas que imita exactamente la producción, lo cual es otra gran atracción.
Stripe facilita las transferencias ACH junto con tarjetas de crédito y permite pagos con Apple Pay. Otra gran característica automatiza la transferencia de pagos entre compradores y vendedores en aplicaciones de marketplace. Es un gran ahorro de tiempo si estás construyendo un mercado.
Braintree
Braintree es mayor que Stripe y fue comprado por PayPal en 2013. También comenzó como un procesador de pagos amigable para los desarrolladores pero pronto fue eclipsado por Stripe en varios frentes. Después de la adquisición de PayPal, se ha puesto al día en algunas áreas clave como los formularios de pago directo. En general se ha beneficiado de su proximidad a PayPal.
Si quieres una fácil integración con PayPal y Venmo, Braintree es la elección obvia. Hay otras idiosincrasias en torno al recorte de actualizaciones y rebajas de suscripciones y el registro de webhooks, pero ninguna de esas diferencias hace que sea un ganador obvio.
Recomendación: Use Stripe. Cuenta con documentación superior y una comunidad activa de emprendedores en línea como tú que comparten historias, consejos y técnicas. Respeto a Stripe por no vender a una compañía de pagos más grande y continuar enfocándome en hacer que el cobro de pagos sea una parte trivial de la pila de desarrollo web.
¿Cómo va a enviar correos electrónicos?
Una consideración final es qué servicio utilizará para enviar correos electrónicos transaccionales.
Amazon SES
Me inscribí en Simple Email Service (SES) de Amazon cuando se lanzó por primera vez en 2011. Los correos electrónicos fueron ultrarrápidos e increíblemente económicos a $0.10 por cada 1,000 correos electrónicos enviados. Ningún otro competidor se acerca a ese precio.
Sendgrid
Sendgrid entró en escena en 2009 y recuerdo la fanfarria alrededor de esta compañía en la conferencia anual South By Southwest en Austin. Siguieron un camino similar al de Stripe, construyendo una pieza de infraestructura crítica de arquitectura web y haciendo que sea muy fácil para los desarrolladores trabajar con él. A los nerds les encantaban. Sendgrid se convirtió en una empresa pública en noviembre de 2017.
Mailgun
Mailgun ahora es propiedad de Rackspace, un gran proveedor de alojamiento que compite con Amazon Web Services en múltiples frentes. Debido a su sencilla interfaz de usuario y énfasis en la fabricación de herramientas amigables para los desarrolladores, Mailgun es más similar a Sendgrid que a SES.
Recomendación: Usar Mailgun. Actualmente ejecuto todos mis productos con Mailgun. Con todos estos servicios, las diferencias realmente están en las minucias. Mira los tres, habla con tu desarrollador si contratas uno y toma una decisión educada. La razón por la que sugiero Mailgun es su posición en el ecosistema Rackspace y la integración libre de Heroku.
Conclusión: Elige tu pila sabiamente
Pasé por esta sección de pila de tecnología con quizás un detalle abrumador por una razón específica: si vas a ejecutar múltiples negocios de Internet simultáneamente, necesitan usar la misma pila, así que elígelo sabiamente.
Tener múltiples negocios tarareando a la vez es suficiente complejidad. Tenerlos a todos usando diferentes tecnologías es un recado tonto. No lo hagas. Solo debe tener que familiarizarse con un servicio en cada una de las categorías anteriores. Una vez que esté familiarizado con sus excentricidades y trampas, podrá poner en marcha más rápidamente otros negocios que aprovechan la misma pila.
Este es el secreto del lado técnico para convertirse en un emprendedor paralelo. Cada compañía puede verse diferente, pero cuando pegas el envoltorio es la misma tecnología. Utilizo Heroku, Stripe, Mailgun, Postgres, Ruby on Rails y Bootstrap para todos mis negocios.
No me desvía porque eso me ralentizaría.