<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Weyler Maldonado</title>
    <description>The latest articles on Forem by Weyler Maldonado (@stillwey).</description>
    <link>https://forem.com/stillwey</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%2F234284%2F9e303b40-b675-4f74-acfe-80c1862b52a3.jpg</url>
      <title>Forem: Weyler Maldonado</title>
      <link>https://forem.com/stillwey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/stillwey"/>
    <language>en</language>
    <item>
      <title>Idempotence in API design</title>
      <dc:creator>Weyler Maldonado</dc:creator>
      <pubDate>Sat, 18 Jul 2020 16:54:05 +0000</pubDate>
      <link>https://forem.com/stillwey/idempotence-in-api-design-14ji</link>
      <guid>https://forem.com/stillwey/idempotence-in-api-design-14ji</guid>
      <description>&lt;p&gt;When you develop any kind of API, for some reason, &lt;strong&gt;idempotence&lt;/strong&gt; it's an aspect that usually goes unnoticed, but indeed that aspect could make more robust and safe your piece of software. Let me explain it.&lt;/p&gt;

&lt;p&gt;APIs based on REST use HTTP to communicate with the different clients. So, HTTP has a property called &lt;strong&gt;&lt;strong&gt;safe&lt;/strong&gt;&lt;/strong&gt;; an HTTP request it's &lt;strong&gt;safe&lt;/strong&gt; if doesn't mutate the application state. Consider the table below.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;HTTP verb&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Common use&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Safe&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GET&lt;/td&gt;
&lt;td&gt;Get resources&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POST&lt;/td&gt;
&lt;td&gt;Add resources&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PUT&lt;/td&gt;
&lt;td&gt;Modify resources&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PATCH&lt;/td&gt;
&lt;td&gt;Modify resources&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DELETE&lt;/td&gt;
&lt;td&gt;Delete resources&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Having said that, what's &lt;strong&gt;idempontence&lt;/strong&gt;? Idempotence make that multiple identical requests has the same effect as making a single request, minimizing or preventing observable side effects, if you're a functional programming enthusiast, a good analogy could be &lt;strong&gt;pure functions&lt;/strong&gt;. Mathematically speaking, consider the function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f(x) = x^2 + 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we say &lt;code&gt;x = 2&lt;/code&gt;, no matter how many times use the function, the result always will be &lt;code&gt;6&lt;/code&gt;. Now, this could be seen in programming, for example in the JavaScript case, &lt;code&gt;Math.cos(x)&lt;/code&gt; always return the same value of x. The REST specification indicates that methods &lt;strong&gt;GET&lt;/strong&gt;, &lt;strong&gt;PUT&lt;/strong&gt;, &lt;strong&gt;DELETE&lt;/strong&gt; should be idempotent. &lt;/p&gt;

&lt;p&gt;So, how can implement idempotence in our projects?&lt;/p&gt;

&lt;p&gt;There's no perfect recipe, but REST has some features that can help us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The header &lt;code&gt;If-None-Match: *&lt;/code&gt; when it is created or updated a resource, this to avoid identifier collisions and return &lt;code&gt;412 Precondition failed&lt;/code&gt; if the operation fails.&lt;/li&gt;
&lt;li&gt;The header &lt;code&gt;ETag: {etag-hash}&lt;/code&gt; in the resposponses of &lt;strong&gt;GET&lt;/strong&gt; methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But we can learn from big companies like &lt;strong&gt;Stripe&lt;/strong&gt;, they have a simple implementation for their APIs, they make that clients generate a random and unique hash (like UUID) and attached in a header called &lt;code&gt;Idempotency-Key&lt;/code&gt; for every request. This can be stored, in cache engines for example, like Redis or Memcached and handled like one unique request.&lt;/p&gt;

&lt;p&gt;Maybe never have the need to implement this, but it's important to know that exists and when you facing a similar problem, look back and consider if idempontence could solve the problem.&lt;/p&gt;

</description>
      <category>rest</category>
      <category>api</category>
      <category>softwaredesign</category>
      <category>node</category>
    </item>
    <item>
      <title>My struggle as Software Engineer</title>
      <dc:creator>Weyler Maldonado</dc:creator>
      <pubDate>Fri, 13 Mar 2020 03:01:06 +0000</pubDate>
      <link>https://forem.com/stillwey/my-struggle-as-software-engineer-23k3</link>
      <guid>https://forem.com/stillwey/my-struggle-as-software-engineer-23k3</guid>
      <description>&lt;p&gt;As Software Engineer, I spent 4 years heard and learned about QA, agile methodologies, software architecture and another topics in the college, these topics made that I loved this discipline. So, when I get my first job as backend developer, in local a &lt;em&gt;startup&lt;/em&gt;, I was the only SE, the rest of my partners are Computer Science or Computer Engineer fellas.&lt;/p&gt;

&lt;p&gt;The software methodology was a little mess, not even talk about the software architecture, I wasn't a pro with but I had some ideas to improve these processes, but when you start talking about agile methodologies and unit testing with people who love develop neural networks and embedded systems, you look like a weirdo (don't misunderstanding me, I've been learned a lot of them and I really appreciated them &amp;lt;3).&lt;/p&gt;

&lt;p&gt;Well, in this post I want to write about the things I learned while I motivated to develop the bases of a &lt;em&gt;"testing"&lt;/em&gt; culture. The first thing was to read, research and study a lot about testing, specifically unit testing, because they're the pillars.&lt;/p&gt;

&lt;p&gt;At this point of my life as developer, I really believe that the motivation of implement testing (at least unit) in our projects should come from the inside, from our &lt;strong&gt;"developer's soul"&lt;/strong&gt; just for gave a name; the soul that give us the craving to grow as developer, to create projects with high quality, the same soul that provides that feeling to experiment and learn with new things. Otherwise, you just look them like extra work, maybe like unnecessary work.&lt;/p&gt;

&lt;p&gt;So, what I learned?&lt;/p&gt;

&lt;p&gt;First, I found a Dijkstra's quote that blow my mind and really want to share:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Testing shows the presence, not the absence, of bugs"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With this in mind, make sense when I read about &lt;em&gt;regression testing&lt;/em&gt;, and what it's that? Well, is a type of software testing to confirm that a recent program or code change has not adversely affected existing features. In simple words, if you add a new feature in your project, the unit testings shows if some current feature is affected and you can track the issue.&lt;/p&gt;

&lt;p&gt;Other thing that I want to share, it's about how to write a good test case, I've seen some developers try to optimize and create reusable code in their test cases, in some cases, making that one test case depends on to another. Please, never do that, the more autonomous is one test case, it's perfect, because you can run a single test case, for debug purposes or whatever, without concern about the rest. The thing you really need to do, it's keep in mind that isn't production code, you need to keep it simple, short, without abstractions, readable for another developers.&lt;/p&gt;

&lt;p&gt;Here comes some tips for write good test cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The test case anatomy:&lt;/strong&gt; A good definition could answer three questions: &lt;em&gt;What is being tested?&lt;/em&gt;, &lt;em&gt;Under what circumstances and scenario?&lt;/em&gt; and &lt;em&gt;What is the expected result?&lt;/em&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;// What is being tested?&lt;/span&gt;
   &lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User singup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Under what circumstances and scenario?&lt;/span&gt;
     &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; Whitout name filed, should return a 422 HTTP Status code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// What is the expected result?&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&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="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The AAA design patter:&lt;/strong&gt; When you write your test case, it's highly recommended use the AAA (&lt;strong&gt;Arrange - Act - Assert&lt;/strong&gt;) pattern, what means:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A - Arrange&lt;/strong&gt;: All the setup code to bring the system to the scenario the test aims to simulate. This might include instantiating the unit under test constructor, adding DB records, mocking/stubbing on objects and any other preparation code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A - Act&lt;/strong&gt;: Execute the unit under test. Usually 1 line of code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A - Assert&lt;/strong&gt;: Ensure that the received value satisfies the expectation. Usually 1 line of code.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User service&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nx"&gt;describe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;User singup&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; Whitout name filed, should return a 422 HTTP Status code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Arrange &lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Act&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Assert&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&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="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The tests are documentation:&lt;/strong&gt; The tests should have an intuitive name that describe what it's testing. Unlike the appointment of functions in the application code, when naming a test it is preferable to use a long and explicit name that clearly describes what the test is verifying.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Don't&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Add user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="c1"&gt;// Arrange &lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Act&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Assert&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Do&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;it&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Whitout name filed, should return a 422 HTTP Status code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="c1"&gt;// Arrange &lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// Act&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// Assert&lt;/span&gt;
        &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;be&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;422&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And exists a lot of good practices and guidelines you can search, improves and apply on your existents projects, these are the cornerstone; but I  really hope you have learned something new or at least you have motivated to improve your &lt;em&gt;developer soul&lt;/em&gt; ;)&lt;/p&gt;

</description>
      <category>develop</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
