<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Omar Carpinteyro</title>
    <description>The latest articles on Forem by Omar Carpinteyro (@omarcarpinteyro).</description>
    <link>https://forem.com/omarcarpinteyro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F223921%2Fbbf9549c-764b-47ef-86ee-9abcd6ca5504.jpg</url>
      <title>Forem: Omar Carpinteyro</title>
      <link>https://forem.com/omarcarpinteyro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/omarcarpinteyro"/>
    <language>en</language>
    <item>
      <title>Borrado de Caché en Desarrollo Web</title>
      <dc:creator>Omar Carpinteyro</dc:creator>
      <pubDate>Tue, 17 Sep 2019 22:05:41 +0000</pubDate>
      <link>https://forem.com/omarcarpinteyro/borrado-de-cache-en-desarrollo-web-5g2a</link>
      <guid>https://forem.com/omarcarpinteyro/borrado-de-cache-en-desarrollo-web-5g2a</guid>
      <description>&lt;h2&gt;
  
  
  Opciones de borrado de caché en los diferentes servidores y servicios de Internet, desde el origen hasta el cliente o navegador del usuario final.
&lt;/h2&gt;

&lt;p&gt;En el &lt;a href="https://dev.to/omarcarpinteyro/cache-para-dummies-inception-229b"&gt;artículo anterior&lt;/a&gt; de esta serie, aprendimos los principales cachés que podemos citar como básicos en internet.&lt;/p&gt;

&lt;p&gt;Ahora, daremos respuesta a una de las preguntas más relevantes y su respuesta es aun más importante: &lt;strong&gt;¿Cómo se ejecuta el borrado de caché?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Primero entendamos el origen de esta pregunta, para ello, debemos saber que el tiempo de vida de caché, no es constante, tenemos el poder de colocar el valor de tiempo que queremos mantener en memoria cierta información, el tiempo de caché.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;El tiempo en que la información se guarda en caché lo tenemos que configurar.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Podrían existir valores configurados por default, pero al final, es un valor que se configura sí o sí.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Una vez configurado el tiempo en caché que vivirá una información en memoria, en disco duro, no podrá ser borrada hasta que se cumplan ciertas condiciones.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ¿Cómo es el borrado del caché?
&lt;/h2&gt;

&lt;p&gt;Veamos de manera simple y básica las opciones que tenemos para borrar el caché:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forzado.&lt;/strong&gt; Para borrar el caché de CDN o Egde, existe el Purge, que es un término que se usa para hacer referencia al borrado de caché de uno o varios elementos. Básicamente consiste en indicar las URLs o Paths que quieres que el CDN borre de su caché, de su disco duro. Una vez ejecutado el Purge el CDN irá a sus diferentes zonas y borrará los archivos indicados. Algunos CDNs incorporan el Fast Purge, que asegura el borrado de caché a nivel mundial en tiempos record.&lt;/p&gt;

&lt;p&gt;Desde el Cliente (el Browser), la única manera de borrar el caché es hacerlo desde las mismas configuraciones del navegador. Por ejemplo, para conocer cómo se borra el caché de Google Chrome, podemos ir aquí. Para usuario más creativos y avanzados podrían ir directamente al disco duro de su computadora y borrar los archivos temporales o de caché.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por tiempo o automático.&lt;/strong&gt; Tanto para Caché de Cliente o CDN, podemos programar el borrado por tiempo. Por ejemplo, si configuramos el caché a 3600 segundos para que viva nuestra información en memoria, comenzará una cuenta regresiva en el navegador o en el CDN y una vez que este conteo llegue a cero, la información se borrará de caché automáticamente.&lt;/p&gt;

&lt;p&gt;Otra manera de usar el tiempo automático a nuestro favor, es configurar una fecha futura para borrado de caché. La fecha es configurada en formato Fecha y Hora exacta en la que queremos que la información sea borrada. Cuando se valide la fecha y hora indicada y dicha fecha es cumplida, el caché es borrado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hacks
&lt;/h2&gt;

&lt;p&gt;Te dejo un truco para borrar el caché del cliente, y para ello nos ayuda de manera oportuna el Algoritmo de Eviction, el cual vive por default en los navegadores. Y nos ayuda a validar si un recurso en caché sigue siendo “llamado” o “referido” desde el mismo origen en que nació. Por ejemplo, si guardamos la imagen &lt;em&gt;hola.jpg&lt;/em&gt; en caché por medio de la página &lt;em&gt;&lt;a href="http://www.hola.com"&gt;www.hola.com&lt;/a&gt;&lt;/em&gt;, si en la siguiente visita que hagamos a la misma página ya no existe el llamado a la imagen &lt;em&gt;hola.jpg&lt;/em&gt;, el navegador la borrará de su caché automáticamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Precaución:&lt;/strong&gt; si no se configura un caché correctamente en nuestra arquitectura, podríamos dejar a nuestros usuarios cachados por largos tiempos y no verán nunca nuestros cambios futuros.&lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;Foto por &lt;a href="https://unsplash.com/@markusspiske"&gt;Markus Spiske&lt;/a&gt; de &lt;a href="https://unsplash.com/search/photos/hard-disc"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;
&lt;/h6&gt;

</description>
      <category>cache</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Cache para dummies: Inception</title>
      <dc:creator>Omar Carpinteyro</dc:creator>
      <pubDate>Tue, 10 Sep 2019 17:27:55 +0000</pubDate>
      <link>https://forem.com/omarcarpinteyro/cache-para-dummies-inception-229b</link>
      <guid>https://forem.com/omarcarpinteyro/cache-para-dummies-inception-229b</guid>
      <description>&lt;p&gt;El tema del cache es un fuerte dolor de cabeza. Es un bosque tenebroso en donde si no vas preparado, te perderás y el costo puede ser fatal para tu negocio y tus usuarios. Es por eso que haremos un &lt;strong&gt;Cache Inception&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Aprenderemos desde cero las definiciones básicas. De una manera fácil y rápida. Explicaré el cache con una analogía a la cual queremos que hagas referencia para que no olvides los conceptos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analogía
&lt;/h2&gt;

&lt;p&gt;Imaginemos un &lt;strong&gt;restaurante&lt;/strong&gt;, en donde tenemos una &lt;strong&gt;cocina&lt;/strong&gt; y en ella hay un &lt;strong&gt;cocinero&lt;/strong&gt;. El restaurante comienza a dar servicio. Comenzarán a entrar los &lt;strong&gt;clientes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El cliente entrará al restaurante e irá a la cocina para preguntar directamente al cocinero: &lt;em&gt;¿Cuál es el menú? ¿Qué ingredientes tienen los platillos? ¿Cuánto cuestan? ¿Qué hay de beber?&lt;/em&gt; Etc. Una vez que el cliente tiene toda la información, hará su pedido a nuestro cocinero, el cual trabajará en el platillo solicitado y una vez listo, lo servirá.&lt;/p&gt;

&lt;p&gt;El cliente termina su platillo y ahora quiere un postre. Entonces irá de nuevo a la cocina a buscar al cocinero, hará las preguntas pertinentes para pedir su postre: &lt;em&gt;¿Qué postres tiene? ¿Qué sabores hay? ¿Cuánto cuestan?&lt;/em&gt; Etc. Una vez que el cliente tiene toda la información, pedirá su postre al cocinero, el cual de nuevo trabajará en el postre solicitado y una vez listo, lo entregará.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fo-gGs7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dz3unugtqvxern73dgcr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fo-gGs7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dz3unugtqvxern73dgcr.gif" alt="Primer escenario del Restaurante"&gt;&lt;/a&gt;&lt;/p&gt;
Primer escenario del Restaurante



&lt;p&gt;Este escenario funciona bien, ambas partes obtienen lo que quieren y el proceso fluye de manera natural.&lt;/p&gt;

&lt;p&gt;¿Pero qué pasa cuando hay más de un cliente? De pronto tenemos cinco clientes. Cada uno de ellos hablando con el cocinero y haciendo las mismas preguntas: &lt;em&gt;¿Cuál es el menú? ¿Qué ingredientes tienen los platillos? ¿Cuánto cuestan? ¿Qué hay de beber? ¿Qué postres hay?&lt;/em&gt; Etc.&lt;/p&gt;

&lt;p&gt;En este punto, el escenario ya no es rentable, pues el cocinero no se dará abasto, los platillos saldrán mal, estarán fríos, tardarán mucho y los clientes se disgustarán.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ol9Cw1w7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rcm2f3b71dgef2x0ur1z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ol9Cw1w7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/rcm2f3b71dgef2x0ur1z.gif" alt="Escenario complicado, no rentable."&gt;&lt;/a&gt;&lt;/p&gt;
Escenario complicado, no rentable.



&lt;p&gt;Para solucionar este escenario incorporamos un servicio de &lt;strong&gt;meseros&lt;/strong&gt;. Ahora, los clientes preguntarán al mesero todo aquello que necesitan saber para ordenar un platillo. En este nuevo proceso, el mesero recibe la orden y la ingresa a la cocina, en donde el cocinero toma la orden y se dedica tener el platillo listo para servir.&lt;/p&gt;

&lt;p&gt;En cuanto vayan estando listas las órdenes, el mesero la recogerá y las llevará con el cliente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Jpjqv8hq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/teekoiccwlthqcc1mg3n.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Jpjqv8hq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/teekoiccwlthqcc1mg3n.gif" alt="Incorporación de Mesero"&gt;&lt;/a&gt;&lt;/p&gt;
Incorporación de Mesero



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Queremos que notes que con este nuevo proceso, el cliente no se enterará del número de cocineros que tenemos, y nosotros podemos agregar tantos meseros como necesitemos para cubrir la demanda, al igual que el número de cocineros.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Arquitectura Web
&lt;/h2&gt;

&lt;p&gt;Ahora pasemos a darle un poco de sentido a nuestra analogía, llevando a la parte técnica con una &lt;strong&gt;arquitectura web&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;La cocina, será nuestro &lt;strong&gt;Servidor Web&lt;/strong&gt;, el cocinero es representado por los &lt;strong&gt;procesos y capacidades de computo&lt;/strong&gt; de nuestra instancia, y los clientes, serán nuestros &lt;strong&gt;usuarios finales&lt;/strong&gt;, que comenzarán a hacer peticiones (&lt;em&gt;requests&lt;/em&gt;) a nuestro servidor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UIXLyyIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nnyocs0cmiio8fcn4zoh.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UIXLyyIu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nnyocs0cmiio8fcn4zoh.gif" alt="Arquitectura Web"&gt;&lt;/a&gt;&lt;/p&gt;
Arquitectura Web



&lt;p&gt;El flujo funciona al igual que nuestro restaurante, el usuario hace solicitudes a nuestro servidor, nuestro servidor procesa la solicitud de &lt;em&gt;páginas web, assets,&lt;/em&gt; etc. y devuelve la información al cliente: el browser.&lt;/p&gt;

&lt;p&gt;De igual forma, cuando las peticiones de nuestros usuarios son demasiados, incorporamos un servicio de CDN (&lt;em&gt;Content Delivery Network&lt;/em&gt;) que es representado por nuestro mesero. El CDN se encargará de recibir las peticiones y dirigirlos a nuestros servidores, que son el origen de los datos entregados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YGf_2TtB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3xgnnvhyj3vftk7il9ud.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YGf_2TtB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/3xgnnvhyj3vftk7il9ud.gif" alt="Origen, CDN, Cliente (Browser)"&gt;&lt;/a&gt;&lt;/p&gt;
Origen, CDN, Cliente (Browser)



&lt;p&gt;Podemos tener tantos servidores balanceados como sean necesarios para soportar la carga.&lt;/p&gt;

&lt;h2&gt;
  
  
  Incorporación de Cache
&lt;/h2&gt;

&lt;p&gt;Integramos nuestro concepto de cache. Haremos nuestro &lt;strong&gt;Cache Inception&lt;/strong&gt; y entenderemos por cache como &lt;strong&gt;una memoria que guarda la información que nos entregó un origen como respuesta a una solicitud que hicimos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En nuestro restaurante, vamos a incorporar dos tipos de memoria, que nos ayudarán a recordar la información que nos da el origen, en este caso, el cocinero. A esta le llamaremos &lt;strong&gt;menú&lt;/strong&gt;. El menú nos servirá para tener la información de lo que produce el cocinero, recetas, precios, ingredientes, etc.&lt;/p&gt;

&lt;p&gt;Le daremos el menú al mesero y él ya no tendrá que ir con el cocinero, si no tendrá que consultar el menú. Cuando los clientes pregunten sobre los platillos, el mesero podrá responder rápidamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tin53ijr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nwalgrzg47vj704zobsc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tin53ijr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/nwalgrzg47vj704zobsc.gif" alt="Incorporación de un menú"&gt;&lt;/a&gt;&lt;/p&gt;
Incorporación de un menú



&lt;p&gt;En nuestra arquitectura web, a lo anterior se le denomina &lt;strong&gt;Cache Edge&lt;/strong&gt; o &lt;strong&gt;Cache de CDN&lt;/strong&gt;, que es la encargada de memorizar la información que otorga nuestros servidores.&lt;/p&gt;

&lt;p&gt;Entonces, si el servidor nos entrega un HTML o un asset tipo JPG o CSS, el CDN se encargará de guardarlo en su cache y cuando un cliente pida dicho recurso, el CDN lo servirá sin tener que ir a solicitarlo de nuevo al servidor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---MnHcdbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sypunfvmn8gwbiyy7s82.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---MnHcdbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/sypunfvmn8gwbiyy7s82.gif" alt="Incorporación del Cache Edge o Cache de CDN"&gt;&lt;/a&gt;&lt;/p&gt;
Incorporación del Cache Edge o Cache de CDN



&lt;p&gt;Vamos a llevarlo a otro nivel, ya que los clientes aún tienen que ir al mesero a pedir la información siempre que requieran algún platillo o servicio.&lt;/p&gt;

&lt;p&gt;Para mejorar este proceso, vamos a incluir un nuevo menú que será entregado al cliente cada que llegué al restaurante. En este menú, el cliente podrá ver la información indispensable para que pueda ordenar sus alimentos. Podrá ver los ingredientes, precios, etc. Esto representa una mejora importante para que nuestros meseros puedan relajarse un poco.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SPeW294M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f0x0icdgrd7e8qyn9kil.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SPeW294M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f0x0icdgrd7e8qyn9kil.gif" alt="Incorporación del menú para el cliente"&gt;&lt;/a&gt;&lt;/p&gt;
Incorporación del menú para el cliente



&lt;p&gt;En nuestra arquitectura web a esto le llamamos &lt;strong&gt;Cache del Cliente&lt;/strong&gt;, es decir, la memoria que usará el navegador (&lt;em&gt;browser&lt;/em&gt;) para recordar los resultados que le entregó el origen y guardarlos en disco para tenerlos disponibles cada vez que se requieran.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pMIRSCg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dolifnd98nr8y53qiorf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pMIRSCg8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/dolifnd98nr8y53qiorf.gif" alt="Incorporación de Cache de Cliente o de Browser"&gt;&lt;/a&gt;&lt;/p&gt;
Incorporación de Cache de Cliente o de Browser



&lt;p&gt;Por lo tanto, si nuestro CDN ya entregó un recurso, el browser lo guarda en cache y cuando el navegador pida el mismo recurso, no tendrá que ir al CDN, sino a su cache, a tu disco duro.&lt;/p&gt;

&lt;p&gt;Así pues, existen los dos caches: de &lt;strong&gt;CDN&lt;/strong&gt; y de &lt;strong&gt;Cliente&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Ahora podrás hacer preguntas válidas como las siguientes:&lt;br&gt;
&lt;em&gt;¿Qué sucede si cambian los precios? ¿Cómo actualizo los platillos en los menús? ¿Cómo le hago para abrir otro restaurante? ¿Qué pasa cuando no va un mesero a trabajar? ¿Y si el cocinero no está disponible?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Las pasadas preguntas podrían ser equivalentes a:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;¿Cómo actualizo un CSS o JS que esta cache en del Cliente (Browser)? ¿Cómo le digo al usuario que existe una página nueva? ¿Cómo le hago para estar disponible en el cache de Europa u otro continente? ¿Qué pasa si el CDN o mi servidor origen no responde?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Daremos respuesta a estas preguntas en otros artículos.&lt;/p&gt;

&lt;p&gt;Confiamos que este &lt;strong&gt;Cache Inception&lt;/strong&gt; lo tengas presente cada que te enfrentes con este tema.&lt;/p&gt;

&lt;h6&gt;
  
  
  Foto por &lt;a href="https://unsplash.com/@freeche"&gt;Kvistholt&lt;/a&gt; de &lt;a href="https://unsplash.com/photos/oZPwn40zCK4"&gt;Unsplash&lt;/a&gt;
&lt;/h6&gt;

</description>
      <category>cache</category>
      <category>architecture</category>
      <category>webdev</category>
      <category>distributedsystems</category>
    </item>
    <item>
      <title>Los Keywords del Spanglish en los Corporativos</title>
      <dc:creator>Omar Carpinteyro</dc:creator>
      <pubDate>Fri, 06 Sep 2019 03:41:23 +0000</pubDate>
      <link>https://forem.com/omarcarpinteyro/los-keywords-del-spanglish-en-los-corporativos-14je</link>
      <guid>https://forem.com/omarcarpinteyro/los-keywords-del-spanglish-en-los-corporativos-14je</guid>
      <description>&lt;h4&gt;
  
  
  Keywords básicas para entender el spanglish de las conversaciones diarias que se dan durante nuestras reuniones de trabajo.
&lt;/h4&gt;

&lt;p&gt;En los ambientes de trabajo dentro de los corporativos, nos encontramos con personas de nacionalidades y culturas distintas a las nuestras. Sin duda es algo bueno para la empresa y para los colaboradores, pues ofrece la oportunidad de crecer tanto personal como profesionalmente, ya que extiende tus habilidades.&lt;/p&gt;

&lt;p&gt;Durante las reuniones que se tienen con los equipos de trabajo, se dan conversaciones multinacionales y por ende, multilenguaje. Una combinación sería Español — Inglés, conocida coloquialmente como Espanglish o Spanglish.&lt;/p&gt;

&lt;p&gt;Para hacernos la vida más fácil, listo algunas palabras clave (keywords del spanglish) que son básicas manejar durante nuestras reuniones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;On-site.&lt;/strong&gt; Usada para especificar que “algo” será presencial, se hará en la oficina. Ej. La capacitación será on-site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Delivery.&lt;/strong&gt; Se usa para especificar las “entregas” que se harán. Ej. ¿Cuándo es el delivery del sitio web?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Happy Path.&lt;/strong&gt; Se utiliza para hacer referencia a los casos de uso de un sistema. Indica cómo se debería de usar correctamente. Ej. Con el Happy Path funciona, pero debemos considerar otros escenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rocket Science.&lt;/strong&gt; Se usa para insinuar que no estás construyendo o desarrollando algo infinitamente complejo. Ej. El desarrollo estuvo listo antes de lo previsto, no tiene nada de Rocket Science lo que se hizo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-Profile.&lt;/strong&gt; Esta se usa para decir que literalmente “algo” o “alguien” se mantiene en un perfil bajo. Ej. John está low-profile para no llamar la atención.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always On.&lt;/strong&gt; Usada para asegurar que un sistema esta funcionando todo el tiempo. Ej. El servidor web esta configurado para estar always on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fun Fact.&lt;/strong&gt; Esta se usa para indicar alguna otra funcionalidad curiosa y de mucho valor sobre un “algo”. Ej. Un Fun Fact de Netflix, es que puedes elegir imágenes para tu perfil.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highlights.&lt;/strong&gt; Es usada para indicar los puntos más sobresalientes e importantes de un “algo” en especial. Ej. ¿Cuáles son los highlights de la reunión?.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In the meantime.&lt;/strong&gt; Utilizada para decir qué ocurrirá mientras “algo” se desarrolla o se concluye. Ej. In the meantime vamos a tomar una certificación en Amazon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end.&lt;/strong&gt; Se usa para declarar todas las implicaciones y etapas de desarrollo de un sistema, producto o servicio. Ej. Microsoft otorgará una solución End-to-end para nuestro problema con los clientes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;¿Y tú qué keywords del spanglish usas y qué otras agregarías?&lt;/p&gt;

&lt;h6&gt;
  
  
  &lt;em&gt;Foto de cover por &lt;a href="https://unsplash.com/@wildlittlethingsphoto"&gt;Helena Lopes&lt;/a&gt; de &lt;a href="https://unsplash.com/photos/1m2LQEonm2A"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;
&lt;/h6&gt;

</description>
      <category>management</category>
      <category>spanglish</category>
      <category>social</category>
      <category>friendship</category>
    </item>
    <item>
      <title>Guía para estimar el tiempo y esfuerzo del software</title>
      <dc:creator>Omar Carpinteyro</dc:creator>
      <pubDate>Wed, 04 Sep 2019 20:05:38 +0000</pubDate>
      <link>https://forem.com/omarcarpinteyro/guia-para-estimar-el-tiempo-y-esfuerzo-del-software-396a</link>
      <guid>https://forem.com/omarcarpinteyro/guia-para-estimar-el-tiempo-y-esfuerzo-del-software-396a</guid>
      <description>&lt;p&gt;En el desarrollo de software siempre habrá que estimar el tiempo en que nuestro equipo o un colaborador tarda en entregar un requerimiento. Este dato tiene sentido porque básicamente ayuda al negocio a hacer presupuestos y a evaluar ganancias. Es decir, a mayor tiempo de desarrollo, mayor gasto o inversión para pagar al desarrollador o equipo que desempeña la tarea. Recordemos que cada hora de programación, cuesta.&lt;/p&gt;

&lt;p&gt;Otro punto a favor de estimar el tiempo de desarrollo, es para ayudar al negocio a saber cuándo se harán entregas que aporten valor al producto, y así poder plantear un pipeline congruente al beneficio del negocio mismo.&lt;/p&gt;

&lt;p&gt;Por lo tanto, cada que te pidan una estimación de tarea, nos vemos obligados a mencionar el dato.&lt;/p&gt;

&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Sin embargo, aunque ya vimos que hace sentido estimar, es una realidad que cuesta trabajo calcular este valor. ¿Un día? ¿Una hora? ¿Un sprint? “Mañana queda”, “déjame ver”, “lo voy a evaluar” son frases que usan frecuentemente ante el cuestionamiento de tiempos de entrega.&lt;/p&gt;

&lt;h2&gt;
  
  
  Causa del problema
&lt;/h2&gt;

&lt;p&gt;Hay demasiadas variables que hacen que sea difícil estimar el tiempo de desarrollo, además de que cada proceso laboral es distinto entre sí. Algunas de las causas más comunes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Falta de definición del requerimiento.&lt;/strong&gt; El requerimiento esta incompleto o hay ambigüedades. No existen todos los casos de uso o criterios de aceptación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencias de equipos terceros.&lt;/strong&gt; Es común que para que un requerimiento se cumpla, participen diferentes equipos, y estos trabajos en serie vuelven la estimación más complicada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desconocimiento de la solución.&lt;/strong&gt; Algunas veces, el requerimiento es tal que no se tiene certeza completa de cómo dar una solución, lo que hace complicada la estimación por que implica análisis y en algunos casos capacitaciones (comúnmente autodidacta) para poder entender e integrar la solución.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solución
&lt;/h2&gt;

&lt;p&gt;Por lo tanto, para evitar que la estimación sea de dedazo, presentamos una gráfica para dar visibilidad al equipo, a todos, en dónde se encuentra el requerimiento y no dejar que su solución sea un acto de fe. A continuación la gráfica:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Frtonevtns96kmx05mcee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Frtonevtns96kmx05mcee.png" alt="Gráfica de Nivel de Esfuerzo y Tiempo en Software"&gt;&lt;/a&gt;&lt;/p&gt;
Gráfica de Nivel de Esfuerzo y Tiempo en Software



&lt;h2&gt;
  
  
  Gráfica: Nivel de Esfuerzo y Tiempo en Software
&lt;/h2&gt;

&lt;p&gt;La gráfica es una herramienta para tener una visión rápida de la estimación de tiempo y esfuerzo de un desarrollo. Éstos básicamente pueden ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nuevo requerimiento&lt;/li&gt;
&lt;li&gt;Mantenimiento de software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El &lt;strong&gt;Eje Y&lt;/strong&gt; (lado izquierdo) nos indica &lt;strong&gt;qué tan cercano o alejado está el nuevo requerimiento o mantenimiento de su funcionalidad inicial&lt;/strong&gt;. Mientras más cercano este al &lt;strong&gt;Eje X&lt;/strong&gt; (hacia abajo) será más cercano a lo que inicialmente se desarrolló.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;Eje X&lt;/strong&gt; (parte de abajo) nos indica &lt;strong&gt;qué tanto conocemos de la solución, tanto en la tecnología que usamos, como el conocimiento requerido para dar soluciones&lt;/strong&gt;. Mientras más cercano este al &lt;strong&gt;Eje Y&lt;/strong&gt; (hacia la izquierda) nos dará más certeza de la solución que debemos emplear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejemplos
&lt;/h2&gt;

&lt;p&gt;Pensemos en un auto. Tenemos un vehículo color rojo, que usa gasolina, que tiene sus cuatro llantas, motor, puertas, etc. Un auto común y corriente. Ahora pensemos en un requerimiento en forma de Historia de Usuario:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Como usuario quiero que el auto sea de color negro para que cumpla con mi colección de autos oscuros.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En este caso podemos suponer que cambiar el color del auto no cuesta tanto trabajo y además sabemos hacerlo. Por lo tanto el nivel de estimación de tiempo y esfuerzo podría estar ubicado así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm8n8qfe7l9iy6w1gpjpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm8n8qfe7l9iy6w1gpjpm.png" alt="La estrella representa el nivel de esfuerzo y tiempo&amp;lt;br&amp;gt;
"&gt;&lt;/a&gt;&lt;/p&gt;
La estrella representa el nivel de esfuerzo y tiempo



&lt;p&gt;Vamos con otro ejemplo, citado de igual manera en Historia de Usuario:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Como usuario quiero que el auto sea convertible para poder disfrutar del aire y la vista cuando vaya manejando.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;¡Wow! ¿Cambiar el auto para que sea convertible? Esto suena algo muy distinto al requerimiento inicial ¿no es así? Pero supongamos que vamos a asignar a nuestro mejor personal para hacer el cambio. Entonces nuestra requerimiento quedaría ubicado de la siguiente manera:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Flaxfz4qhyhz7hbw0lhvn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Flaxfz4qhyhz7hbw0lhvn.png" alt="La estrella representa el nivel de esfuerzo y tiempo&amp;lt;br&amp;gt;
"&gt;&lt;/a&gt;&lt;/p&gt;
La estrella representa el nivel de esfuerzo y tiempo



&lt;p&gt;¿Por qué esta ubicada de esa manera? Podemos argumentar que aunque asignamos a nuestro mejor personal y sabe cómo hacer el cambio, este requerimiento esta muy alejado del funcionamiento actual, eso hace que el tiempo de desarrollo sea más tardado. ¿Imaginan cómo quedaría la estimación de tiempo y esfuerzo si nos ayudara un equipo sin experiencia en hacer un auto convertible?&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo más que complementa la idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Como usuario quiero que el auto sea híbrido para poderlo usar sin gasolina.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Aquí tenemos todo un reto. Cambiar el auto de uso de gasolina a híbrido. &lt;/p&gt;

&lt;p&gt;Definitivamente algo nuevo. Podemos decir rápidamente que no esta cerca de la especificación inicial y además no tenemos personal que conozca cómo hacer este ajuste, por lo tanto, nuestra gráfica luciría así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F50eveiamgp2fkgi1wgh9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F50eveiamgp2fkgi1wgh9.png" alt="La estrella representa el nivel de esfuerzo y tiempo&amp;lt;br&amp;gt;
"&gt;&lt;/a&gt;&lt;/p&gt;
La estrella representa el nivel de esfuerzo y tiempo



&lt;p&gt;Ahora todos estamos de acuerdo en que el requerimiento llevará mucho tiempo de desarrollo, y queda claro en dónde ubicamos el esfuerzo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Contar con una herramienta que nos apoye a comunicar el por qué de nuestras estimaciones y nos ayude a dar visibilidad a los equipos, es imprescindible en nuestra credibilidad como desarrolladores.&lt;/p&gt;

&lt;p&gt;¿Y tú qué herramienta usas para estimar tus tiempos y esfuerzo de desarrollo?&lt;/p&gt;

&lt;h6&gt;
  
  
  (&lt;em&gt;Foto de Cover por &lt;a href="https://unsplash.com/@neonbrand" rel="noopener noreferrer"&gt;NeONBRAND&lt;/a&gt; de &lt;a href="https://unsplash.com/search/photos/project-planning" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;)
&lt;/h6&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>agile</category>
    </item>
  </channel>
</rss>
