<?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>DEV Community: EUDA</title>
    <description>The latest articles on DEV Community by EUDA (@euda).</description>
    <link>https://dev.to/euda</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%2Forganization%2Fprofile_image%2F6771%2F2d5b91e0-0b46-43b0-b17c-f6bf5bfa35f5.png</url>
      <title>DEV Community: EUDA</title>
      <link>https://dev.to/euda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/euda"/>
    <language>en</language>
    <item>
      <title>¡Ayuda! Necesito una APP</title>
      <dc:creator>Euda</dc:creator>
      <pubDate>Fri, 31 Mar 2023 00:50:18 +0000</pubDate>
      <link>https://dev.to/euda/ayuda-necesito-una-app-50aa</link>
      <guid>https://dev.to/euda/ayuda-necesito-una-app-50aa</guid>
      <description>&lt;p&gt;&lt;em&gt;Aplicaciones vs páginas web: por qué es importante customizar tu plataforma en base a las necesidades del negocio&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comunicar en la virtualidad
&lt;/h2&gt;

&lt;p&gt;Las aplicaciones móviles, redes sociales y páginas web tienen un punto en común: son excelentes herramientas de comunicación. Sin embargo, hay algunas ventajas de las apps (aplicaciones móviles) que deberías tener en cuenta.&lt;/p&gt;

&lt;p&gt;Como empresa, negocio o emprendimiento tenemos múltiples tipos de contenidos para comunicar: videos, eventos, imágenes, textos, audios. Por eso, trasladarlo a una plataforma que combina todos estos elementos en un solo canal es un gran beneficio.&lt;/p&gt;

&lt;p&gt;Las aplicaciones pueden incluir archivos multimedia, textos, datos, realizar llamadas, brindar servicios de geolocalización y mucho más, sacándole provecho a las capacidades que ya vienen integradas en el teléfono. Hay quienes dicen que hoy en día el teléfono inteligente o smartphone es una extensión del propio cuerpo, por lo que, imaginemos toda tu información al alcance de todos, en la palma de la mano de a quien querés llegar.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Sin apps, los teléfonos inteligentes y las tabletas serían como vehículos de sofisticados diseños, pero sin gasolina.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;La particularidad de esta herramienta, no es solamente la capacidad de contener varios formatos y tipos de archivos, sino también su versatilidad para un fácil acceso. Muchas empresas han querido aprovechar esta tecnología, en algunos casos, con suficiente éxito, como son los bancos e incluso instituciones estatales y gubernamentales. La virtualidad puede ser compleja, pero hay herramientas que nos acercan cada vez más: asistentes virtuales, chatbots, entre otras.&lt;/p&gt;

&lt;h2&gt;
  
  
  Oportunidades de negocio
&lt;/h2&gt;

&lt;p&gt;Uber, Rappi, PedidosYa, Spotify, Brubank y más: todas aplicaciones que surgieron a partir de necesidades concretas. Los empresarios encontraron un nuevo nicho para explotar, y el acompañamiento de la tecnología fue clave para poder efectuarlo.&lt;/p&gt;

&lt;p&gt;El e-commerce se encuentra en alza al punto que las tiendas físicas o retail en todo el mundo están buscando nuevas soluciones para mantenerse en pie. O por el contrario, nuevos negocios como showrooms o pequeños emprendimientos aparecen y se promocionan en redes, pero subsisten únicamente en lo digital.&lt;/p&gt;

&lt;p&gt;Sin embargo, ya sea una plataforma para e-commerce, una plataforma para reservar turnos o gestionar paquetes y envíos, la mejor opción es una aplicación personalizada. Si bien las redes o páginas web -como TiendaNube, Wix, entre otras- son muy útiles para los negocios que están empezando, al momento de crecer &lt;strong&gt;es un beneficio tener el poder de customizar tu plataforma y no depender de las limitaciones de estos prestadores.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Al fin y al cabo, es el medio de contacto más importante con tus clientes. Si no tuviese una página web o aplicación propia, durante el apagón de Facebook, Instagram y Whatsapp muchas ventas cayeron y, más importante, se perdió la comunicación con el cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  PWA o Progressive Web Apps
&lt;/h2&gt;

&lt;p&gt;Actualmente, hay muchas opciones a considerar, como una &lt;a href="https://www.iebschool.com/blog/progressive-web-apps-analitica-usabilidad/"&gt;Progressive Web App o PWA&lt;/a&gt;, es decir, una aplicación web con características de aplicación. Es el híbrido perfecto entre una app y una página web: puede soportar las mismas funcionalidades que una aplicación -como, por ejemplo, realizar videollamadas, chats, geolocalización- desde una url para usar en cualquier navegador, tanto en el teléfono como en la computadora. Es fácilmente adaptable a todos los formatos y pantallas.&lt;/p&gt;

&lt;p&gt;Entre las ventajas de esta solución, podemos mencionar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No es necesario instalar una aplicación desde el Google Play o App Store, ya que funcionan en cualquier navegador como Chrome, Safari, Firefox, etc.&lt;/li&gt;
&lt;li&gt;Puede funcionar sin conexión a internet, en algunos casos. Dependiendo de la funcionalidad que se le da, como una app, no es necesario que tenga conexión a internet para mostrar su contenido.&lt;/li&gt;
&lt;li&gt;Permite enviar notificaciones push a los usuarios, sin que el usuario haya instalado una aplicación.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Asesorate SIN COSTO
&lt;/h2&gt;

&lt;p&gt;Con tantas variables a tener en cuenta, un asesoramiento personalizado será siempre lo más valioso para que tu negocio crezca. Si te interesa escalar tu negocio no dudes en contactar una entrevista SIN COSTO con nosotros.&lt;/p&gt;

&lt;p&gt;Y si todavía no me creés, mirá este &lt;a href="https://eudaimonia.com.ar/landing_DO.html"&gt;caso de éxito&lt;/a&gt; dónde uno de nuestros clientes cuenta cómo lo ayudamos a escalar su negocio.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>mobile</category>
      <category>spanish</category>
      <category>writing</category>
    </item>
    <item>
      <title>#EudaStyle, long-term quality</title>
      <dc:creator>Euda</dc:creator>
      <pubDate>Tue, 21 Mar 2023 13:22:11 +0000</pubDate>
      <link>https://dev.to/euda/eudastyle-long-term-quality-213c</link>
      <guid>https://dev.to/euda/eudastyle-long-term-quality-213c</guid>
      <description>&lt;h2&gt;
  
  
  We build software with processes that help your digital project take off
&lt;/h2&gt;

&lt;p&gt;Creating an app is a science that needs quality and precision. With more than 12 years of experience innovating, at Euda we use the same top-notch processes as other well-known tech giants. In this article, you’ll find what are the first-class technology and work processes that we use to develop our success stories’ apps.&lt;/p&gt;

&lt;p&gt;There are a lot of things that can go wrong working in IT. For instance, a junior developer accidentally erases a whole production database of an e-commerce app and it affects not only the work of hundreds of people but the final customers. Or, maybe there is a bug that can stop the production of a whole factory, generating huge financial losses. Security is key and this is why we work in a way to ensure all these examples mentioned above never happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-code control
&lt;/h3&gt;

&lt;p&gt;Code review between cross-hierarchy teammates is one of the many actions taken to prevent this. Developers proofread each other’s lines of code before updating it on the system, checking each other’s code for mistakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quality Assurance
&lt;/h3&gt;

&lt;p&gt;Another important point is QA, with &lt;strong&gt;manual and automated testing&lt;/strong&gt;. Most IT companies provide this service for their products. However, there are some key points to make it even better. For instance, automated tests should be integrated in the pipeline so that they run automatically with every deployment.&lt;/p&gt;

&lt;p&gt;Regarding manual testing, although they may sound similar, there is a huge difference between a bug and a glitch. Bugs are usually coding errors, whereas glitches are errors that happen when the engine does not work as expected. Also, there are some metaapp features that may become bugs if the final users don’t like them. This is why our QA engineers always test with an open mind and anticipate both users’ moves and their expectations of the product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agile Methodologies
&lt;/h3&gt;

&lt;p&gt;One may believe that organizing beforehand to achieve a perfectly calibrated work before starting any project allows us to accomplish better results. However, calibrating work such as an analogical clock may take too long. The formula used in our success stories involves bumpy starts and lots of refining later, and I believe that, in most cases, this is better than no starting at all. Refining tasks is the core of agile methodologies and combined with high quality processes is how we carry out extremely complicated projects at Euda.&lt;/p&gt;

&lt;p&gt;We believe that organising work by following the agile methodologies principles is the way to go. Through our work we have come to value:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Individuals and interactions, over processes and tools&lt;br&gt;
Working software, over comprehensive documentation&lt;br&gt;
Customer collaboration, over contract negotiation&lt;br&gt;
Responding to change, over following a plan&lt;br&gt;
Find out more information on the &lt;a href="https://agilemanifesto.org/"&gt;Agile manifesto&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Multiple development environments
&lt;/h3&gt;

&lt;p&gt;Moreover, &lt;strong&gt;safe and independent environments&lt;/strong&gt; for development, testing and production ensure safety and quality at every step. Junior developers must learn from others and test in their own local environment and, again, before having access to production their code is reviewed by others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automation: continuous integration, delivery and deployment
&lt;/h3&gt;

&lt;p&gt;And last but not least, we use tools such as Jenkins and Bitbucket Pipelines to ensure that the state of development is always available and transparent, and that a compiled application can be accessed at any time. That's how we focus on CI/CDD or &lt;strong&gt;Continuous Integration, Delivery and Deployment&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Following these principles, we had achieved digital projects’ scalability and product quality. It does not rely only on essentially big and complex teams. We believe that small but organised teams, added to all the good practises highlighted above are the best foundations for great software development.&lt;/p&gt;

&lt;p&gt;Want to be our next success story? Visit &lt;a href="https://eudaimonia.com.ar/"&gt;our website&lt;/a&gt; to find out more and do not hesitate to contact us!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>showdev</category>
      <category>community</category>
    </item>
    <item>
      <title>Sails development with Docker and Docker Compose</title>
      <dc:creator>Euda</dc:creator>
      <pubDate>Wed, 14 Apr 2021 14:18:32 +0000</pubDate>
      <link>https://dev.to/euda/sails-development-with-docker-and-docker-compose-36l7</link>
      <guid>https://dev.to/euda/sails-development-with-docker-and-docker-compose-36l7</guid>
      <description>&lt;p&gt;Docker makes it easy to set up and run a development environment and also simplifies the deployment of your applications. In this article we will see how to setup a Sails development workflow with Docker and Docker Compose.&lt;/p&gt;

&lt;h1&gt;
  
  
  Whats and whys: Docker &amp;amp; Docker Compose
&lt;/h1&gt;

&lt;p&gt;The goal of this article is to make setting up a Docker workflow for Sails as simple as possible. Docker makes it easier to set up and run a development environment and also simplifies the deployment. &lt;/p&gt;

&lt;p&gt;First, we’ll get into how Docker and Docker Compose work and its benefits. Then a step by step guide to make our beloved Sails run inside a Docker container. Let's get started!&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4v8sh7kawk5r78yez0u.jpg" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv4v8sh7kawk5r78yez0u.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Containerization
&lt;/h3&gt;

&lt;p&gt;Before talking about Docker and Sails we need to understand what is containerization and why we want it.&lt;br&gt;
Containerization is a form of virtualization, through which applications are run in isolated user spaces called containers. We can think of a container as a lightweight virtual machine (but to be clear, it is not).&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1njhg35emitkono64h6y.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1njhg35emitkono64h6y.png" alt="Alt Text"&gt;&lt;/a&gt;&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16o7ijl9n57b2p35f349.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16o7ijl9n57b2p35f349.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;em&gt;Comparing Containers and Virtual Machines&lt;/em&gt; [1]&lt;/p&gt;

&lt;p&gt;But, why do we want it?&lt;/p&gt;

&lt;p&gt;With containerization, everything an application needs to run, let's say, its binaries, libraries, configuration files and dependencies, are encapsulated and isolated in its container. This makes it easier to set up and run a development environment, and also simplifies the deployment by reducing the chances of missing or different versions of libraries, files or dependencies errors.&lt;/p&gt;

&lt;p&gt;The container itself is abstracted away from the host OS, with only limited access to underlying resources. Isolation has its advantages, for example portability, stability and security.&lt;/p&gt;

&lt;p&gt;So, standard, lightweight, secure… &lt;strong&gt;yes as developers we want containerization!&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Docker and Docker Compose
&lt;/h3&gt;

&lt;p&gt;The word "Docker" refers to several things including an open source project, tools and a company (Docker Inc., the company that primarily supports the project and tools).&lt;/p&gt;

&lt;p&gt;Talking about the tools, Docker is a tool designed to make it easier to create, deploy, and run applications by using containers.&lt;/p&gt;

&lt;p&gt;Container orchestration automates the deployment, management, scaling, and networking of containers. It can help you deploy the same application across different environments without needing to redesign it. As an example, microservices in containers make it easy to orchestrate services, including storage, networking, and security. &lt;strong&gt;Docker Compose is an orchestration tool for Docker containers.&lt;/strong&gt; [2]&lt;/p&gt;
&lt;h3&gt;
  
  
  Installing Docker
&lt;/h3&gt;

&lt;p&gt;Mac: &lt;a href="https://docs.docker.com/docker-for-mac/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/docker-for-mac/install/&lt;/a&gt;&lt;br&gt;
Windows: &lt;a href="https://docs.docker.com/docker-for-windows/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/docker-for-windows/install/&lt;/a&gt;&lt;br&gt;
Ubuntu: &lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;br&gt;
Others: &lt;a href="https://docs.docker.com/engine/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Sails containerization
&lt;/h1&gt;

&lt;p&gt;Now, how do we make Sails, our beloved Node framework, run inside a container? &lt;/p&gt;
&lt;h3&gt;
  
  
  Sails CLI image
&lt;/h3&gt;

&lt;p&gt;Our container needs an image to run. Let's create one.&lt;br&gt;
To do so, create docker-sails-cli directory and a file named Dockerfile inside it with this content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:lts&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; sails@1.4.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The FROM statement declares we are using node latest lts version as base image for ours. The syntax used is &lt;code&gt;imageName:tag&lt;/code&gt;, if no tag is specified, the default is used. [3]&lt;/p&gt;

&lt;p&gt;At the same time Node lts image is based on Debian Streatch. So this is our project environment, Sails 1.4.2, node 14.15.4 (at the time of writing this) running on a Debian Streatch.&lt;/p&gt;

&lt;p&gt;Now we need to build our image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; sails-cli:1.4.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;Let’s see what we did.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker build [context] -t [tag]&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;context&lt;/strong&gt;: The context where we are building. As we are in the same directory as the Dockerfile we use &lt;code&gt;.&lt;/code&gt;.  And also, there’s no need to specify the file name as Dockerfile is the default one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;tag&lt;/strong&gt;: It is optional, but we want to tag the image we just built as we are probably going to have many different images with different versions for different projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a new Sails project
&lt;/h3&gt;

&lt;p&gt;Once we have our Sails CLI image built we are going to use it to create a new Sails project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app sails-cli:1.4.0 sails new sails-docker-example &lt;span class="nt"&gt;--no-frontend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;docker run&lt;/strong&gt;: Create and run a new container&lt;br&gt;
&lt;strong&gt;--rm&lt;/strong&gt;: Remove container after process finishes as we don’t need the container after that&lt;br&gt;
&lt;strong&gt;-v&lt;/strong&gt;: Mount current working directory (in our host computer) in /app path inside container. As a result we are sharing current directory with the container&lt;br&gt;
&lt;strong&gt;-w&lt;/strong&gt;: Set container current working directory to /app&lt;br&gt;
&lt;strong&gt;sails-cli:1.4.0&lt;/strong&gt;: Our previously built Sails image&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;sails new sails-docker-example --no-frontend&lt;/strong&gt;: Sails CLI command we want to run in the container.&lt;/p&gt;

&lt;p&gt;As a result, after running &lt;code&gt;sails new&lt;/code&gt; in the container, we are going to find a new directory created with our new Sails project. &lt;/p&gt;

&lt;p&gt;Now, let’s run our project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;sails-docker-example
docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app &lt;span class="nt"&gt;-p&lt;/span&gt; 1337:1337 sails-cli:1.4.0 sails lift
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;-i&lt;/strong&gt;: Keep STDIN open even if not attached&lt;br&gt;
&lt;strong&gt;-t&lt;/strong&gt;: Allocate a pseudo-TTY&lt;br&gt;
&lt;strong&gt;-p&lt;/strong&gt;: Maps container 1337 to host computer so we can reach our app through localhost:1337&lt;/p&gt;

&lt;p&gt;It's alive!&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3chsoinwvj4pmagcqpxp.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3chsoinwvj4pmagcqpxp.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Running and debugging
&lt;/h3&gt;

&lt;p&gt;As you may notice, although our project is running, if you modify a file you will need to stop the container and launch it again to get the changes applied.&lt;/p&gt;

&lt;p&gt;Nodemon to the rescue!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app sails-cli:1.4.0 npm &lt;span class="nb"&gt;install &lt;/span&gt;nodemon &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, open &lt;strong&gt;package.json&lt;/strong&gt; and in the &lt;strong&gt;scripts&lt;/strong&gt; section add a new one, &lt;strong&gt;debug&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"debug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nodemon --inspect=0.0.0.0 app.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NODE_ENV=production node app.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And run again, but this time instead of sails lift we are going to run with npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app &lt;span class="nt"&gt;-p&lt;/span&gt; 1337:1337 &lt;span class="nt"&gt;-p&lt;/span&gt; 9229:9229 sails-cli:1.4.0 npm run debug
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, modify a file, save it and verify that the project is restarted automatically.&lt;/p&gt;

&lt;p&gt;Finally, as we are running inside a container we need a way to get the debugger connected to the process, so we are mapping the 9559 port.&lt;/p&gt;

&lt;p&gt;If you use VS Code you can use the following configuration in the &lt;br&gt;
launch.json file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"localhost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"localRoot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${workspaceFolder}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Attach to Remote"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;9229&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"remoteRoot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"attach"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"skipFiles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;node_internals&amp;gt;/**"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"restart"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Docker compose
&lt;/h1&gt;

&lt;p&gt;As we mentioned before Docker Compose is an orchestration tool. Compose allows us to define our infrastructure, let’s say, services, networks, volumes in an YAML file.&lt;/p&gt;

&lt;p&gt;As a first step we will create a very simple file defining our Sails service on it. For this service we will set image, command, ports mapping, volume mounts, working directory, etc, as we did with Docker command line tool.&lt;/p&gt;

&lt;p&gt;Our docker-compose.yml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sails-cli:1.4.0&lt;/span&gt; &lt;span class="c1"&gt;# same as with docker cli&lt;/span&gt;
        &lt;span class="c1"&gt;# Run npm install before starting sails to keep our dependencies installed and updated&lt;/span&gt;
        &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sh -c "npm install &amp;amp;&amp;amp; npm run debug"&lt;/span&gt;
        &lt;span class="na"&gt;working_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/app&lt;/span&gt; &lt;span class="c1"&gt;# same as -w with docker cli&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# same as -p with docker cli&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;1337:1337'&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;9229:9229'&lt;/span&gt;
        &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# same as -v with docker cli&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, we will use docker-compose command to lift our service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is the same as running with Docker CLI.&lt;/p&gt;

&lt;p&gt;In case we want to remove the created infrastructure, once stopped, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will remove all the containers, networks, volumes created with &lt;code&gt;docker-compose up&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Database containerization
&lt;/h1&gt;

&lt;p&gt;In most cases we will require a database for our project. In this example we will be using MongoDB but it’s possible to do the same with other db engine supported by Sails. [4]&lt;/p&gt;

&lt;p&gt;For those who don’t know, MongoDB is a free and open-source cross-platform document-oriented database program. [5]&lt;/p&gt;

&lt;p&gt;Fortunately MongoDB has an official image that we will be using to add a database service to our project.&lt;/p&gt;

&lt;p&gt;First, we need to add Sails MongoDB adapter to our project. As we did before, we can add and install a dependency to our project with Docker like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;:/app &lt;span class="nt"&gt;-w&lt;/span&gt; /app sails-cli:1.4.0 npm &lt;span class="nb"&gt;install &lt;/span&gt;sails-mongo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, modify our project config and set mongo as our default adapter.&lt;/p&gt;

&lt;p&gt;In the config/datastore.js file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;adapter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sails-mongo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_URL&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next we need to add MongoDB service to our docker-compose.yml and provision Sails service with needed config.&lt;/p&gt;

&lt;p&gt;docker-compose.yml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sails-cli:1.4.0&lt;/span&gt;
        &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sh -c "npm install &amp;amp;&amp;amp; npm run debug"&lt;/span&gt;
        &lt;span class="na"&gt;working_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/app&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;1337:1337'&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;9229:9229'&lt;/span&gt;
        &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.:/app&lt;/span&gt;
        &lt;span class="na"&gt;env_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./sails.env&lt;/span&gt; &lt;span class="c1"&gt;# set env vars using a file&lt;/span&gt;

    &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongodb&lt;/span&gt; &lt;span class="c1"&gt;# set name to the container&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongo:4.4&lt;/span&gt; &lt;span class="c1"&gt;# as of this writing, the latest version is 4.4.3&lt;/span&gt;
        &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./mongo:/data/db&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We added a db service to our compose file, and also set an env file to Sails service. We will use that file to config our database connection.&lt;/p&gt;

&lt;p&gt;sails.env&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_URL=mongodb://root:@mongodb:27017/sails
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compose allows us to connect to db using the container name as network address, that is why we can use &lt;strong&gt;mongodb&lt;/strong&gt; as the address in our connection url.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important note&lt;/strong&gt;: we are not enabling MongoDB authentication for this example but it is a good idea to do so for production environments. [6]&lt;/p&gt;

&lt;p&gt;Finally, use &lt;code&gt;docker-compose up&lt;/code&gt; to run, you will see MongoDB output along with Sails.&lt;/p&gt;

&lt;p&gt;And we are done, a fully Sails development environment running on Docker!&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlh5ipk0erii4jlnanyc.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlh5ipk0erii4jlnanyc.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you so much for reading my post, comments are welcome! &lt;/p&gt;

&lt;p&gt;Here is the link to the writter's twitter &lt;a class="mentioned-user" href="https://dev.to/vidueirof"&gt;@vidueirof&lt;/a&gt; for any questions you may have. &lt;/p&gt;

&lt;p&gt;[1] &lt;a href="https://www.docker.com/resources/what-container" rel="noopener noreferrer"&gt;https://www.docker.com/resources/what-container&lt;/a&gt;&lt;br&gt;
[2] &lt;a href="https://www.docker.com/why-docker" rel="noopener noreferrer"&gt;https://www.docker.com/why-docker&lt;/a&gt;&lt;br&gt;
[3] &lt;a href="https://hub.docker.com/_/node" rel="noopener noreferrer"&gt;https://hub.docker.com/_/node&lt;/a&gt;&lt;br&gt;
[4] &lt;a href="https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters" rel="noopener noreferrer"&gt;https://sailsjs.com/documentation/concepts/extending-sails/adapters/available-adapters&lt;/a&gt;&lt;br&gt;
[5] &lt;a href="https://www.mongodb.com" rel="noopener noreferrer"&gt;https://www.mongodb.com&lt;/a&gt;&lt;br&gt;
[6] &lt;a href="https://hub.docker.com/_/mongo" rel="noopener noreferrer"&gt;https://hub.docker.com/_/mongo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>api</category>
      <category>tutorial</category>
      <category>containers</category>
    </item>
    <item>
      <title>Improve your performance with Scrum Methodology</title>
      <dc:creator>Euda</dc:creator>
      <pubDate>Fri, 24 Jan 2020 17:00:54 +0000</pubDate>
      <link>https://dev.to/euda/improve-your-performance-with-scrum-methodology-idg</link>
      <guid>https://dev.to/euda/improve-your-performance-with-scrum-methodology-idg</guid>
      <description>&lt;p&gt;&lt;em&gt;Learn how to incorporate this agile methodology to enhance your work performance. Here are some popular tools and recommendations for integrating agile philosophies' elements into your work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Scrum methodology can help either large or small teams to achieve their work goals, satisfy their clients and develop a better team relationship. But, how?&lt;/p&gt;

&lt;p&gt;First of all, let's review what Scrum is.&lt;/p&gt;

&lt;p&gt;Born for software development, Scrum is a framework within which people can address complex adaptive problems, while productively and creatively delivering products of the highest possible value. This means, usable and worthy products, in which progress is acknowledgeable. Scrum employs an iterative, incremental approach to optimize predictability and control risk. Three pillars uphold every implementation of empirical process control: transparency, inspection, and adaptation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bxxyKDuu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tbjpte9nqhgp51ag6r8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bxxyKDuu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tbjpte9nqhgp51ag6r8n.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p36kb2f8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/pl5qen00n00jv56vbeyr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p36kb2f8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/pl5qen00n00jv56vbeyr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How does it work? Easy. You probably already apply scrum philosophy on your work with small differences or by calling it with different names. It's all about organizing work based in the previously specified objectives or goals. Two Scrum elements you can easily incorporate into your work management are: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defining a Product Backlog:&lt;/strong&gt; these are the objectives and scope of the product or service to be developed. What you want to achieve, based on the budget and customer needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organizing work into Sprints:&lt;/strong&gt; each of the phases of the project where the advances are presented to the client. This proves it as it is and suggests changes. These receive a priority according to their importance, and become urgent or are assigned to a second backlog. Dividing the product into sprints will help you reach the desired product through recurring iterations.&lt;/p&gt;

&lt;p&gt;Another important part of the Scrum Methodology are &lt;em&gt;team members and their roles&lt;/em&gt;. The Scrum Team is divided into three parts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product Owner:&lt;/strong&gt; is the person who knows the business best and decides what improvement or task has to be done in each sprint. It is the channel between managers, investors, clients and development team. Being the person who knows the market and the product best, he/she is the one who makes the final decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development Team:&lt;/strong&gt; it is recommended to be integrated between 3 and 9 members. It has to be a multifunctional team with defined internal roles required to get the job done (Frontend developers, Backend developers, QA). The interesting thing about this team is its self-management. They themselves decide the work done in each sprint (based on the priorities defined by the Product Owner), and they themselves decide how to perform each of the tasks. It is a team work, without hierarchies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scrum Master:&lt;/strong&gt; being a process that comes out of the ordinary, it is normal that there is resistance from the company or from the Scrum Team members themselves. This is where the Scrum Master comes in, to ensure that everyone follows the process correctly, gives continuous coaching when there is a blockage and eliminate any impediments that arise throughout the sprint.&lt;/p&gt;

&lt;p&gt;Depending on the size of your company and team members you can easily adapt each role and its functions. For instance, maybe in small teams Scrum Master and Product Owner tasks can be handled by a Project Manager.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4ZHzszto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f2vi3eqq76sxmb4dwm2l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4ZHzszto--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/f2vi3eqq76sxmb4dwm2l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's essential that all employees are aware of the adopted methodology and its advantages. Giving a workshop explaining how it works and how your company will put it into practice is a great starting point. This may be a very important first task for the designated Scrum Master.&lt;/p&gt;

&lt;p&gt;Also, &lt;em&gt;meetings are crucial&lt;/em&gt;. Depending on the team size, meetings can be daily, weekly, or one per sprint. It's a matter of trying what's best for each team. However, it is highly recommended to share individual progress within the team on a daily basis. These are two of the Scrum meetings to get inspired by or try implementing: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sprint Review:&lt;/strong&gt; is held at the end of the Sprint to inspect the Increment and adapt the Product Backlog if needed. During the Sprint Review, the Scrum Team and stakeholders collaborate about what was done in the Sprint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sprint Retrospective:&lt;/strong&gt; is an opportunity for the Scrum Team to inspect itself and create a plan for improvements to be enacted during the next Sprint. Often occurs after the Sprint Review and prior to the next Sprint Planning.&lt;/p&gt;

&lt;p&gt;Moreover, to start improving your performance, any agile methodology requires of some &lt;em&gt;basic tools&lt;/em&gt; in order to get an effective comunication between team members and get the work done. Here are some of the most popular ones: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K-xTpwyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6mxu839d7xrhk5uu6k2u.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K-xTpwyE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/6mxu839d7xrhk5uu6k2u.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trello, Jira:&lt;/strong&gt; get a better project control with a Trello or Jira board, organizing board columns based in the Kanban Methodology: organize work into Backlog, Doing and Done. This way, each card is a task to do, running or finished, helping the team know at a glance the project status and pending tasks. Kanban is widely used within the Scrum methodology, although it also works outside it independently. You may also add more columns, for other stages such as QA, In review and even one for each sprint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jenkins:&lt;/strong&gt; a type of open source software, Continuous Integration oriented. This allows to approach different goals such as early feedback, avoiding merge hell, enabling &lt;em&gt;merciless refactoring&lt;/em&gt; among a team and ensuring working software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git:&lt;/strong&gt; another very standardized software to use agile methodology in programming. Besides the benefits of flexibility and distribution, there are key functions of Git that support and enhance agile development. Changes can get pushed down the deployment pipeline faster than working with monolithic releases and centralized version control systems.&lt;/p&gt;

&lt;p&gt;Hope you found this useful! Do not wait and start getting great results by incorporating some elements of this agile methodology in your projects. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.scrumguides.org/scrum-guide.html%C2%A0"&gt;https://www.scrumguides.org/scrum-guide.html &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hablemosdeempresas.com/empresa/conceptos-basicos-agile/%C2%A0"&gt;https://hablemosdeempresas.com/empresa/conceptos-basicos-agile/ &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.muktek.com/scrum-para-principiantes-qu%C3%A9-es-y-c%C3%B3mo-funciona-ec1eb8a70702%C2%A0"&gt;https://blog.muktek.com/scrum-para-principiantes-qu%C3%A9-es-y-c%C3%B3mo-funciona-ec1eb8a70702 &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.atlassian.com/agile/software-development/git%C2%A0"&gt;https://www.atlassian.com/agile/software-development/git &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.agilealliance.org/jenkins-you-can-take-the-evening-off/"&gt;https://www.agilealliance.org/jenkins-you-can-take-the-evening-off/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;More about Eudaimonia: &lt;a href="https://www.eudaimonia.com.ar"&gt;https://www.eudaimonia.com.ar&lt;/a&gt;&lt;/p&gt;

</description>
      <category>scrum</category>
      <category>agile</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
