<?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: Jairo andres</title>
    <description>The latest articles on DEV Community by Jairo andres (@jairoacastaneda).</description>
    <link>https://dev.to/jairoacastaneda</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%2F989149%2F6e0cb9db-fe81-4a95-aa6f-cf38533dd183.jpg</url>
      <title>DEV Community: Jairo andres</title>
      <link>https://dev.to/jairoacastaneda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jairoacastaneda"/>
    <language>en</language>
    <item>
      <title>Serverless takeaways</title>
      <dc:creator>Jairo andres</dc:creator>
      <pubDate>Tue, 13 Dec 2022 03:26:33 +0000</pubDate>
      <link>https://dev.to/jairoacastaneda/serverless-takeaways-jia</link>
      <guid>https://dev.to/jairoacastaneda/serverless-takeaways-jia</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I don't start to writing because I know all the answers, I start to writing because I know that I need to figure out the answers - &lt;strong&gt;&lt;em&gt;Ilya Grigorik&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--odTRCrAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/michal-kubalczyk-WecngmAT-KY-unsplash.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--odTRCrAs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/michal-kubalczyk-WecngmAT-KY-unsplash.jpg" alt="Serverless takeaways" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Serverless is a trend that has been growing in the last two years. Datadog shared state serverless study in 2020, this study showed the growth of serverless across different cloud providers, Show Figure 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ukrDdgs9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ukrDdgs9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/image.png" alt="Serverless takeaways" width="880" height="523"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1 Datadog study about serverless Got from &lt;a href="https://www.datadoghq.com/state-of-serverless/"&gt;https://www.datadoghq.com/state-of-serverless/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Real definition of Serverless
&lt;/h3&gt;

&lt;p&gt;Serverless has different definitions, for instance &lt;a href="https://aws.amazon.com/serverless/"&gt;AWS&lt;/a&gt; has its definition and also Martin flower has another &lt;a href="https://martinfowler.com/articles/serverless.html"&gt;definition for serverless&lt;/a&gt;, these definitions are so accurate.&lt;/p&gt;

&lt;p&gt;However, I prefer the definition described in the book called “Serverless an architecture on AWS”, where the author remarks the thought that serverless is more about &lt;a href="https://learning.oreilly.com/library/view/serverless-architectures-on"&gt;“management less”&lt;/a&gt; using all the benefits of public cloud and cloud native.&lt;/p&gt;

&lt;h3&gt;
  
  
  Serverless first strategy?
&lt;/h3&gt;

&lt;p&gt;Serverless is a complete universe of different technologies, which means a lot of services classify in this category. A big mistake it is trying to compare serverless only to FaaS (function as a services) Show Figure 2. Therefore, it is important to answer the next question, how serverless technologies could be divided?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a8McSrZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/Screenshot---2022-11-20T135209.408.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a8McSrZC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/Screenshot---2022-11-20T135209.408.png" alt="Serverless takeaways" width="880" height="316"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2: Tweet about FAAS and Serverless got from &lt;a href="https://twitter.com/tjholowaychuk/status/902999008674594816?lang=en"&gt;https://twitter.com/tjholowaychuk/status/902999008674594816?lang=en&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We can analyze serverless in two main levels&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code&lt;/strong&gt; , that is related with the business logic, libraries, and frameworks, in fact the code doesn't change a lot, in some cases the code need to add some lines of code to support different invocations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture&lt;/strong&gt; , that focuses in the components and their interactions, the architecture level is the key when we use serverless, you can see some types of serverless technologies in the Figure 3 &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ONfTx0Zb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/Untitled-Diagram-Page-2.drawio--21-.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ONfTx0Zb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/Untitled-Diagram-Page-2.drawio--21-.png" alt="Serverless takeaways" width="880" height="536"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 3: Classification of serveless technologies based in the book serverless architecture on AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the last years I had to make different decisions about what technology o architecture I should implement, however &lt;a href="https://learning.oreilly.com/library/view/both-and-thinking/"&gt;decisions don't have to be either-or&lt;/a&gt;, with the correct strategies I could change the questions, and dilemmas to figure out better solutions.&lt;/p&gt;

&lt;p&gt;Below I will share some takeaways using serverless architecture which could help you to understand if serverless architecture is the correct choice for you&lt;/p&gt;

&lt;h3&gt;
  
  
  Mindset
&lt;/h3&gt;

&lt;p&gt;Serverless is a new way to build software, therefore coming with new strategies and new technologies, nevertheless the idea of abstraction should be kept, because at the end of the day serverless is one of many possible solutions.&lt;/p&gt;

&lt;p&gt;In architecture, we talk about the big picture. This 'big picture' must be easy to understand for every architect, even if they do not know anything about the cloud provider. Having said that, the diagrams about the architecture should be draw in different levels, following the  &lt;a href="https://c4model.com/"&gt;c4model&lt;/a&gt;. I always try to consider it in three levels.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Solution level&lt;/em&gt;, it is only about abstractions (frequently I use &lt;em&gt;c4model&lt;/em&gt; o another type of diagrams)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Implementation level&lt;/em&gt;, it is when the cloud providers apear, &lt;em&gt;Show Figure 3&lt;/em&gt; in this level cloud provider names icons are used.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Code level&lt;/em&gt; (structure of project), it is when the structure of the code is defined, the project structure should be related with the architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n7qWdCH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n7qWdCH_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-5.png" alt="Serverless takeaways" width="880" height="792"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 4: Serverless architecture using AWS got from &lt;a href="https://aws.amazon.com/serverless/"&gt;https://aws.amazon.com/serverless/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A big advantage of drawing diagrams in different levels is that it become the final solution more understandable, because you can see different patterns that are implemented in each solution&lt;/p&gt;

&lt;h3&gt;
  
  
  Quickly is different to easy
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;With serverless You can jump in and prototype something quickly, but you’re gonna need to think about what does that mean to build a production application - &lt;a href="https://open.spotify.com/episode/3j8HSjVp7CjFTSIKpFXMn9?si=2c63c09d8a19485b"&gt;Mike Roberts&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Less&lt;/em&gt; and &lt;em&gt;complexity,&lt;/em&gt; are two words to remark, because these words make the base of serverless. For instance in AWS you have available interfaces to create a QUEUE connect with a lambda in minutes Show Figure 5.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LWw6O9xm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/Screenshot---2022-12-08T125257.223.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LWw6O9xm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/Screenshot---2022-12-08T125257.223.png" alt="Serverless takeaways" width="880" height="433"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 5: Interface to create a SQS in AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is like magic, as you can see in the Figure 5 you don't need to struggle with complex configuration o technologies, nevertheless, starting with services only because seems easy to use it is not the better approach.&lt;/p&gt;

&lt;p&gt;In order to avoid create a Frankenstein with a lot of services sticks around this I would like to give some questions that  I try to answer before to decide which service to use&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;is it the implementation necessary? Or is it only for trending?&lt;/li&gt;
&lt;li&gt;What is the price model?&lt;/li&gt;
&lt;li&gt;What other options could work well when the technology is not enough? Is it difficult to migrate to another technology?&lt;/li&gt;
&lt;li&gt;Are there libraries to support easy integration?&lt;/li&gt;
&lt;li&gt;Who is behind the stack? What patterns are implementing it?&lt;/li&gt;
&lt;li&gt;Trying to imagine some complex use case, is it possible to resolve it with serverless technology? &lt;/li&gt;
&lt;li&gt;What about documentation? Serverless is relatively new, and the documentation could be a challenging to find, it is basically about trying and learning from the errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Serverless partners
&lt;/h3&gt;

&lt;p&gt;Serverless was not created to work only with another serverless services, In the real world the better solution is the hybrid architecture. For instance, a common use case it is tried to split a monolithic into microservices, Show Figure 6.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWfeEyMT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWfeEyMT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-4.png" alt="Serverless takeaways" width="501" height="483"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 6: MindTouch serverless architecture got from here&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The last is &lt;a href="https://www.youtube.com/watch?v=mxKhbU_ToMs&amp;amp;list=PLKnVwO5e7SXR2c_1GVIz6EUAUGIrkNHaZ&amp;amp;index=13&amp;amp;ab_channel=AmazonWebServices"&gt;MindTouch&lt;/a&gt; serverless architecture, which is an fascinating architecture because of its legacy component, which is connected with a new serverless architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LmJwwbQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LmJwwbQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-1.png" alt="Serverless takeaways" width="789" height="590"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 7: Transactional architecture + event driven architecture&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As you can see in the &lt;em&gt;Figure 3&lt;/em&gt; there is another example of the hybrid architecture (transactional+event driven). Therefore, using serverless architecture to potentiate a legacy system and develop new features around it, could be a good choice&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;p&gt;As software developers, our work is to put things together and try to avoid reinventing the wheel. There are some tools o libraries that I consider useful if you are working with serverless:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5W6v7WqQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5W6v7WqQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-3.png" alt="Serverless takeaways" width="880" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://jairoandres.com/serverless-takeaways/serverless.com/framework/docs/getting-started"&gt;Serverless Framework&lt;/a&gt;:&lt;/strong&gt; this is a complete framework to develop serverless architecture, serverless framework allows you to integrate with AWS and whole its ecosystem. Serverless framework use a powerful CLI, basing its configuration on YAML files. In addition, serverless abstract complexity allowing developers to be more productive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html"&gt;CDK&lt;/a&gt;:&lt;/strong&gt; This is a framework which allows you to write code as infrastructure the main different with common frameworks it doesn't use YAML instead it uses languages such as python, go, and typescript indeed you can write lambdas functions and different serverless architectures&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://awslabs.github.io/aws-lambda-powertools-python/2.4.0/"&gt;&lt;strong&gt;AWS Lambda Powertools:&lt;/strong&gt;&lt;/a&gt; These are a couple of libraries that could help you to write lambdas functions in python, for instance &lt;a href="https://awslabs.github.io/aws-lambda-powertools-python/2.4.0/utilities/middleware_factory/#middleware-with-before-logic"&gt;the middleware factory&lt;/a&gt; is a library which can execute code in different moments: before the lambdas is invoked, after the lambda is invoked and when some exceptions are generated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://middy.js.org/docs/"&gt;MiddyJS&lt;/a&gt;:&lt;/strong&gt; This is a simple but incredible library that allows you to create middleware using the express style.  Re-use of code is a significant part of best practices in software development. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/typestack/typedi"&gt;typedi&lt;/a&gt;:&lt;/strong&gt; This is a light tool to work with dependency injection in TS. With it, you can build well-structured and easily testable serverless applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xtbBHm-g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xtbBHm-g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/12/image-2.png" alt="Serverless takeaways" width="780" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/localstack/localstack"&gt;LocalStack&lt;/a&gt;:&lt;/strong&gt; This is a framework to simulate different AWS services using Docker, it contains a useful CLI, which allow you running test without execute any deploys. There are two versions, standard and pro, the pro contains some advanced features but in general the standard is enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Observability
&lt;/h3&gt;

&lt;p&gt;Observability is specially important in serverless because there are a lot of services working together at the same time, and it is probably that something fails. Effective monitoring is not only about logs, it is a complete strategy, and I would like to remark three points.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metrics&lt;/li&gt;
&lt;li&gt;Logs &lt;/li&gt;
&lt;li&gt;Distributed tracing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each cloud provider has its own tools or services to implement observability, however in some cases that couldn't be enough. Underneath, I'll show some tools that have been useful for me.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://docs.datadoghq.com/serverless/"&gt;Datadog:&lt;/a&gt;&lt;/strong&gt;Datadog is a complete platform for monitoring cloud services and serverless applications, in addition Datadog come with an intuitive platform which you can create different dashboards&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://lumigo.io/"&gt;&lt;strong&gt;Lumigo:&lt;/strong&gt;&lt;/a&gt; Lumigo is similar to Datadog, but the main different is that lumigo focuses on traceability. The more incredible feature it is the graphs and the following to the transaction to the time of live.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.elastic.co/what-is/elk-stack"&gt;&lt;strong&gt;ELK:&lt;/strong&gt;&lt;/a&gt; ELK stack are three main technologies Elastisearch, Kibana, and Logstash they are powerful tools to implement an observability solution, the only inconvenient could be that ELK is a general solution, if you want to use in serverless you need to adapt the solution&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://grafana.com/docs/grafana/latest/getting-started/get-started-grafana-prometheus/#:~:text=Prometheus%20is%20an%20open%20source,a%20server%20monitored%20by%20Prometheus."&gt;&lt;strong&gt;Grafana + Prometheus:&lt;/strong&gt;&lt;/a&gt; That stack is similar to ELK, Grafana is a tool to create dashboard and Promethus have the responsibility to recollect logs and expose information using a query language called PromQL, in the same way that ELK that stack is not focuses on serverless, but that can be adapted&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Software engineering is always a game of tradeoffs, hence the correct tool always depends on the context which could be related with money, libraries, experience, etc. In my perspective the tool is not the more essential thing, the deal is that whatever solution you decided should allow you centralized logs, metrics, traceability, and dashboards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mentions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to &lt;a href="https://www.linkedin.com/in/jeissonrangel/"&gt;Jeisson Rangel&lt;/a&gt; for reading drafts and give me feedback of this&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>python</category>
      <category>typescript</category>
      <category>eventdrivenarchitect</category>
    </item>
    <item>
      <title>Remote Work</title>
      <dc:creator>Jairo andres</dc:creator>
      <pubDate>Sun, 06 Nov 2022 18:10:47 +0000</pubDate>
      <link>https://dev.to/jairoacastaneda/remote-work-48dm</link>
      <guid>https://dev.to/jairoacastaneda/remote-work-48dm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Remote work processes have freed the organization from space and time. The Async Mindset is the philosophical underpinning required to cultivate and facilitate that freedom. - &lt;a href="https://www.runningremotebook.com/"&gt;Running Remote&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U8-kz6D0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/kornel-mahl-mV4GwTDD8Tw-unsplash.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U8-kz6D0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/11/kornel-mahl-mV4GwTDD8Tw-unsplash.jpg" alt="Remote Work" width="880" height="1173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In February 2020, &lt;strong&gt;17&lt;/strong&gt; percent of U.S. employees worked from home 5 days or more per week. By March of the same year, more than &lt;strong&gt;40%&lt;/strong&gt; employees of the US employees moved to remote working 5 days per week (&lt;em&gt;Show Figure 1&lt;/em&gt;). Companies looking for talent in different countries made the concept of remote work quite popular a long time ago among developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OUr338eU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Screenshot---2022-10-30T192942.231.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OUr338eU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Screenshot---2022-10-30T192942.231.png" alt="Remote Work" width="880" height="537"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 1: Stats about remote work took from &lt;a href="https://www.statista.com/statistics/1122987/change-in-remote-work-trends-after-covid-in-usa/"&gt;https://www.statista.com/statistics/1122987/change-in-remote-work-trends-after-covid-in-usa/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It is important to clarify the different between &lt;strong&gt;work from home&lt;/strong&gt; and &lt;strong&gt;remote work&lt;/strong&gt; :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Work from home&lt;/strong&gt; : consists in making your home your place of work. In most cases it uses the same practices as work in place (some companies strictly that others)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote work&lt;/strong&gt; : It is a new mindset, in which people can work from wherever location that they want. Indeed, it comes with new challenges, such as insurance policy, taxes models and &lt;em&gt;asynchronous management&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having said that, this article is focuses in some learnings made from &lt;strong&gt;working remote&lt;/strong&gt; , these are summarized in the next five points&lt;/p&gt;

&lt;h3&gt;
  
  
  Over communication
&lt;/h3&gt;

&lt;p&gt;One of the most important things in remote work is &lt;em&gt;effective communication&lt;/em&gt;, a strong reason for that could be that communication it's one of the &lt;a href="https://www.linkedin.com/pulse/four-crisis-principles-help-your-business-survive-turmoil-kullman/"&gt;four rules principles to survive in time of crisis&lt;/a&gt;. However, in remote work, communication would be a challenge, making small talk in the workplace with colleagues and coworkers is lost. Furthermore, a lot of companies only work as an autonomous team, which means each team in the company &lt;a href="https://www.businessinsider.com/jeff-bezos-on-type-1-and-type-2-decisions-2016-4"&gt;can take decision for themselves&lt;/a&gt;. But, &lt;em&gt;with a great power comes with a great responsibility&lt;/em&gt;. As a developer part of your responsibility is keeping the context in the more quantity of features, bugs, and situations as possible, to reach these goals it is necessary to communicate effectively those.&lt;/p&gt;

&lt;p&gt;There are some points that can be help you deal with communication problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://michael.team/podcast-18/"&gt;Meetings don’t have to be toxic&lt;/a&gt;: Since I read about the pyramid communication &lt;em&gt;show Figure 2&lt;/em&gt; I realized the importance to escalate ways of communication, they should always do similar work, starting with the more asynchronous tools (deep understanding, message in slack, email, discussions) and escalate to the more synchronous tool (google meet, zoom, Microsoft Teams). Nevertheless, be careful with spending a huge time in deep work, trying to guess how to work something, “know your limits”, when you can't understand something, you need to look for the expert in the topic and clarify your doubts.&lt;/li&gt;
&lt;li&gt;Inform when you do know about something or when you have blockage, it is common that your coworkers are busy, try to ask in general channel for help, tools such as pr in GitHub or Bitbucket can be a good place to discussion and resolve questions.&lt;/li&gt;
&lt;li&gt;Divide and conqueror: technology is no easy, because it has huge branches, before sending a long question, divide your problem in small problems and try to ask shorter question, it can be more effective, and it can help you find a better solution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sqpah6EK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/image.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sqpah6EK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/image.png" alt="Remote Work" width="880" height="404"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2: The Pyramid of communication took from &lt;a href="https://michael.team/pyramid/"&gt;https://michael.team/pyramid/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Let your mind become a lens, thanks to the converging rays of attention; let your soul be all intent on whatever it is that is established in your mind as a dominant, wholly absorbing idea. - &lt;a href="https://www.amazon.ca/Deep-Work-Focused-Success-Distracted/dp/1455586692"&gt;Deep Work book&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We live in a time where focusing our attention on only one task is a big challenge, what could be the reason for it? The short answer is because of notifications. Many people have the necessity to consume short videos and short content. &lt;a href="https://www.amazon.ca/Deep-Work-Focused-Success-Distracted/dp/1455586692"&gt;The book &lt;em&gt;deep work&lt;/em&gt;&lt;/a&gt; mentions the importance of working on only one thing at the time, for instance if you need to resolve a problem with math you can't resolve the problem and keep a conversation in social media. For that reason, it is better to break down tasks, assigns priorities, and take them one by one. Focus is the more important thing in the productivity, and it is a big advantage about working in office. I struggled developing this ability, however there are some ideas that helped me.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pomodoro&lt;/strong&gt; : it is a classic tool, Pomodoro is a basic strategy that can be appropriate for yourself depending on your necessities, for me pomodoro works better using the 45 minutes to work and 5 minutes to rest rule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn off notifications:&lt;/strong&gt; Social media can consume all your time in the blink of an eye &lt;strong&gt;,&lt;/strong&gt; when you start working, you must turn off your phone notifications, only leave the essential notifications like slack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booked your time to work on your calendar:&lt;/strong&gt; That is a good strategy to notified in what time you are more efficient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Focus times is no about hard work, it &lt;a href="https://twitter.com/THEROSSHARKNESS/status/1588141698303000576"&gt;is about efficient work&lt;/a&gt;, Focus is only useful if you can drive your efforts in the correct way.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://open.spotify.com/episode/0TXBMxCTT3RVUOnZyBU3pO"&gt;Learn for fun&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;When was the last time that you learned something because you like it? And not because you think in business?   &lt;strong&gt;For me there are three types of learning.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Leaning to complement your career:&lt;/strong&gt; it happens when you learned something that you intend to apply immediately in your work/ profession&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning by hobby:&lt;/strong&gt; &lt;em&gt;Do you have a personal project?&lt;/em&gt; Starting a personal a project comes with different challenges which help you to learn about different topics and get more experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learning by fun:&lt;/strong&gt; That is a beautiful way to learn, because it hasn't relation with your major. You can deeply learn about history, about poetry, fantasy, whatever thing that you want.  A good strategy could be to reduce your time of procrastination and invest this time in this type of learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Be sponge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Be sponge&lt;/strong&gt; that is a beautiful sentence, the meaning is “learning a lot”, take a breath a look around you, what can you see? I am 100% sure that you can see incredible people, so you must work collaboratively and learn a lot from your team. One manner to learn fast is being an observer, if you can't understand something, ask about it, if you are in doubt ask bout it, if you don't agree, raise your hand. I would like shared three situations in which raise your hand should be a rule.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Starting in new project: this is a common situation&lt;/strong&gt; , by nature people communicate as playing a round of the telephone game, you must do always double-check, if you do not understand 100% idea, you can try to paraphrase the problem or solution, and validate that you and your team are in the same level of understanding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unexpected behavior about functionality (?):&lt;/strong&gt; Some projects have poor documentation, that is the main reason why the users don’t know how to use the applications, i.e. a client report an error message, when trying to enter a URL that requires login, you can spend a lot of time concluding that the behavior is correct, or ask directly to the person and clarify the situation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Situations converting in too formal:&lt;/strong&gt; it is easy to detected, however it is not too easy to management, many companies that move to remotely have no idea how to deal with “over formalized” situations, send emails work well for clients, but inside the company, it’s suggested to implement applications which helps with asynchronous management i.e. Slack, Discord, JIRA.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://open.spotify.com/episode/49t4JhDXtxfgPWLte6k9Jc"&gt;Transparency = Empower&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;One beautiful thing the co-author Liam Martin said of the  &lt;a href="https://www.runningremotebook.com/"&gt;book running remotely&lt;/a&gt; said it was that running remote is about numbers, and the importance to share these with your team, how it is growing the company? What are the goals in Q3? Q4? These number are relevant, because they help to employees to take the correct decision in critical situations.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://blog.pragmaticengineer.com/efficient-software-project-management-at-its-roots/"&gt;management&lt;/a&gt;, transparency plays an important role too, such as estimation of the tasks, quality of code, security/performance and quality attributes. Perhaps, transparency is a powerful tool to help in the success of the projects because it creates more confident teams and allows the clients to understand the reality about software development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mentions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to &lt;a href="https://www.linkedin.com/in/jeissonrangel/"&gt;Jeisson Rangel&lt;/a&gt; for reading drafts and give me feedback of this&lt;/p&gt;

</description>
      <category>remotework</category>
      <category>workfromhome</category>
      <category>pyramidofcommunicati</category>
      <category>deepwork</category>
    </item>
    <item>
      <title>Management dependencies in python</title>
      <dc:creator>Jairo andres</dc:creator>
      <pubDate>Mon, 17 Oct 2022 07:19:33 +0000</pubDate>
      <link>https://dev.to/jairoacastaneda/management-dependencies-in-python-gnk</link>
      <guid>https://dev.to/jairoacastaneda/management-dependencies-in-python-gnk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Putting ideas into words is certainly no guarantee that they'll be right. Far from it. But though it's not a sufficient condition, it is a necessary one.  -&lt;a href="http://www.paulgraham.com/words.html"&gt;Paul Graham&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_8KZjNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/fernando-hernandez-JdoofvUDUwc-unsplash.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_8KZjNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/fernando-hernandez-JdoofvUDUwc-unsplash.jpg" alt="Management dependencies in python" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are a developer in python, what would be the answer to the next question: &lt;strong&gt;&lt;em&gt;How to manage dependencies in python?.&lt;/em&gt;&lt;/strong&gt; Probably the answer include &lt;em&gt;pip&lt;/em&gt;, &lt;em&gt;virtualenv&lt;/em&gt; and &lt;em&gt;requirements.txt&lt;/em&gt;. These tools are the stack that python developers have been used for a long of time in different projects. However, due to the concept &lt;em&gt;'modern python',&lt;/em&gt; new interesting features can be used as asyn/await, f string, pattern matching, type hints, walrus operator etc. Having said that, modern python come with a new &lt;a href="https://peps.python.org/pep-0621/"&gt;specification&lt;/a&gt; to management dependencies called &lt;strong&gt;pyproject.toml&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is pyproject.toml?
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;pyproject.toml&lt;/strong&gt; is a file written in human-readable syntax, it is located in the root directory of the project and contains all the metadata, dependencies libraries and configuration of additional tools like: &lt;em&gt;black&lt;/em&gt;, &lt;em&gt;mypy&lt;/em&gt; and &lt;em&gt;pytest&lt;/em&gt;. The next configuration is a basic example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[project]
name = "spam"
version = "2020.0.0"
description = "Lovely Spam! Wonderful Spam!"
readme = "README.rst"
requires-python = "&amp;gt;=3.8"
license = {file = "LICENSE.txt"}
keywords = ["egg", "bacon", "sausage", "tomatoes", "Lobster Thermidor"]
authors = [
  {email = "hi@pradyunsg.me"},
  {name = "Tzu-Ping Chung"}
]
maintainers = [
  {name = "Brett Cannon", email = "brett@python.org"}
]
classifiers = [
  "Development Status :: 4 - Beta",
  "Programming Language :: Python"
]

dependencies = [
  "httpx",
  "gidgethub[httpx]&amp;gt;4.0.0",
  "django&amp;gt;2.1; os_name != 'nt'",
  "django&amp;gt;2.0; os_name == 'nt'"
]

[project.optional-dependencies]
test = [
  "pytest &amp;lt; 5.0.0",
  "pytest-cov[all]"
]

[project.urls]
homepage = "https://example.com"
documentation = "https://readthedocs.org"
repository = "https://github.com"
changelog = "https://github.com/me/spam/blob/master/CHANGELOG.md"

[project.scripts]
spam-cli = "spam:main_cli"

[project.gui-scripts]
spam-gui = "spam:main_gui"

[project.entry-points."spam.magical"]
tomatoes = "spam:main_tomatoes"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Example took from PEP 621&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;p&gt;Different tools use the &lt;strong&gt;pyproject.toml&lt;/strong&gt; specification to automate the management dependencies process. There are a lot of tools s &lt;strong&gt;&lt;em&gt;hown in Figure 1&lt;/em&gt;&lt;/strong&gt; , but the most popular are:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j-gU8IF4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/star-history-20221016.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j-gU8IF4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/star-history-20221016.png" alt="Management dependencies in python" width="880" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://python-poetry.org/docs/"&gt;Poetry&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Poetry is the most popular library for packing and managing dependencies. In additional, it has a CLI which developers can use easily interact with the &lt;strong&gt;pyproject.toml&lt;/strong&gt; file, the next code is an example of &lt;em&gt;pyproject.toml&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[tool.poetry]
name = "poetry-intro"
version = "0.1.0"
description = ""
authors = ["jairo &amp;lt;me@jairoandres.com&amp;gt;"]

[tool.poetry.dependencies]
python = "^3.7"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry-core&amp;gt;=1.0.0"]
build-backend = "poetry.core.masonry.api"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Poetry includes an incredible CLI to deal with versioning problems which is common in projects that have different environments (DEV, PROD and QA). Developers who use poetry can install dependencies by environment and create group of dependencies, for example define dependencies only for documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---1nzMHas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Screenshot---2022-10-08T103213.199-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---1nzMHas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Screenshot---2022-10-08T103213.199-1.png" alt="Management dependencies in python" width="880" height="764"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 2: CLI poetry. Took from poetry docs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;poetry has been growing in popularity, that is the reason why famous libraries like &lt;a href="https://github.com/sdispater/pendulum"&gt;pendulum&lt;/a&gt; uses poetry&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;a href="https://github.com/pypa/hatch"&gt;Hatch&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Hatch was recently added to &lt;a href="https://www.pypa.io/en/latest/"&gt;PYPA&lt;/a&gt; repositories, that is because hatch is probably the tool that implement &lt;strong&gt;PEP&lt;/strong&gt; standards in the most meticulous way, the next code is an example from &lt;strong&gt;pyproject.toml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "test"
description = ''
readme = "README.md"
requires-python = "&amp;gt;=3.7"
license = "MIT"
keywords = []
authors = [
  { name = "Jairo Castaneda", email = "me@jairoandres.com" },
]
classifiers = [
  "Development Status :: 4 - Beta",
  "Programming Language :: Python",
  "Programming Language :: Python :: 3.7",
  "Programming Language :: Python :: 3.8",
  "Programming Language :: Python :: 3.9",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: Implementation :: CPython",
  "Programming Language :: Python :: Implementation :: PyPy",
]
dependencies = [
]
dynamic = ["version"]

[project.urls]
Documentation = "https://github.com/unknown/test#readme"
Issues = "https://github.com/unknown/test/issues"
Source = "https://github.com/unknown/test"

[tool.hatch.version]
path = "test/ __about__.py"

[tool.hatch.envs.default]
dependencies = [
  "pytest",
  "pytest-cov",
]
[tool.hatch.envs.default.scripts]
cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=test --cov=tests"
no-cov = "cov --no-cov"

[[tool.hatch.envs.test.matrix]]
python = ["37", "38", "39", "310", "311"]

[tool.coverage.run]
branch = true
parallel = true
omit = [
  "test/ __about__.py",
]

[tool.coverage.report]
exclude_lines = [
  "no cov",
  "if __name__ == . __main__.:",
  "if TYPE_CHECKING:",
]

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

&lt;/div&gt;



&lt;p&gt;In comparison with other tools, The CLI &lt;a href="https://hatch.pypa.io/latest/"&gt;hatch is faster&lt;/a&gt;. This has a huge amount of configurations references to personalized &lt;strong&gt;pyproject.toml.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another good feature of Hatch, this allows execution scripts which is similar to NMP package.json scripts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[tool.hatch.envs.default.scripts]
cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=test --cov=tests"
no-cov = "cov --no-cov"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last example allows executing scripts of test coverage and defining them by environment. Managing dependencies in file pyproject.toml is less automated, but that is great at the same time because it avoids adding unnecessary data. Recently the popular framework FastAPI has changed  &lt;a href="https://github.com/tiangolo/fastapi/commit/4267bd1f4f716244a8087e5aa0e68c1de629cfa9#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711"&gt;changed flit to hatch&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://pdm.fming.dev/latest/"&gt;PDM&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;PDM, as described, is a modern Python package and dependency manager supporting the latest PEP standards. One thing to remark is that PDM doesn't use virtualenv, That is because of &lt;a href="https://peps.python.org/pep-0582/%5D"&gt;PEP 582&lt;/a&gt;the next code is an example from &lt;strong&gt;pyproject.toml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[project]
name = "pdm-project"
version = "0.1.0"
description = ""
authors = [
    {name = "Jairo Castaneda", email = "me@jairo.com"},
]
dependencies = [
    "fastapi&amp;gt;=0.85.0",
]
requires-python = "&amp;gt;=3.10"
readme = "README.md"
license = {text = "MIT"}
[project.optional-dependencies]

[build-system]
requires = ["pdm-pep517&amp;gt;=1.0.0"]
build-backend = "pdm.pep517.api"

[tool]
[tool.pdm]
[tool.pdm.dev-dependencies]
dev = [
    "pytest&amp;gt;=7.1.3",
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;PDM has an incredible console  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vgHD72Xc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Untitled.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vgHD72Xc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Untitled.png" alt="Management dependencies in python" width="880" height="297"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 3: CLI PDM&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e7nZkiHm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Untitled-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e7nZkiHm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://jairoandres.com/content/images/2022/10/Untitled-1.png" alt="Management dependencies in python" width="465" height="239"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure 4: Folder pypackages which contain libraries installed by PDM&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Other tools
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://flit.pypa.io/en/stable/"&gt;&lt;strong&gt;Flit&lt;/strong&gt;&lt;/a&gt; is other popular tool, but this tool is only for package management. In general, it is used to create and publish packages but need other tool to complement its management dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://cournape.github.io/Bento/"&gt;Bento&lt;/a&gt;&lt;/strong&gt; is other tool, like Flit, bento is used for publish and packaging. Bento has a special syntax in a file called &lt;em&gt;beto.info&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What tool I should be used?
&lt;/h3&gt;

&lt;p&gt;I have forgotten how many times I read the tittle “modern python package and dependency manager”. Python has a lot of tools for resolver problem with packaging management. But none of these tools are compatible which each other, for instance: the format in &lt;em&gt;lock file&lt;/em&gt; (which is very important because of &lt;a href="https://youtu.be/VWWgkF-0cDQ?t=637"&gt;hashes, pins, and tree of dependencies&lt;/a&gt;) is totally different in each tool.&lt;/p&gt;

&lt;p&gt;In my opinion, &lt;strong&gt;pyproject.toml&lt;/strong&gt; is the future to management dependencies in python, i.e., NodeJS uses a file as an entry point to managing dependencies. Choosing the better tool should be a task which takes time to analyze what requirements the project has, and you should have three points in mind.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review repository, starts, issues bugs compatibility with your CI/CD tools even some PaaS services don't support &lt;strong&gt;pyproject.toml&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Review standards, what standard follows? What is the status of the PEP?, is it finalized?  Is it draft? &lt;/li&gt;
&lt;li&gt;Review who is behind the project? &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mentions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to &lt;a href="https://www.facebook.com/jeissonrangelbaez"&gt;Jeisson&lt;/a&gt; Rangel for reading drafts and give me feedback of this&lt;/p&gt;

</description>
      <category>managementdependenci</category>
      <category>python</category>
      <category>poetry</category>
      <category>hatch</category>
    </item>
  </channel>
</rss>
