<?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: Arthur Pym</title>
    <description>The latest articles on DEV Community by Arthur Pym (@arthur_pym).</description>
    <link>https://dev.to/arthur_pym</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%2F109054%2F107bf563-c85a-4581-975f-5b49bb43a3d7.png</url>
      <title>DEV Community: Arthur Pym</title>
      <link>https://dev.to/arthur_pym</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arthur_pym"/>
    <language>en</language>
    <item>
      <title>Challenges when designing a new application</title>
      <dc:creator>Arthur Pym</dc:creator>
      <pubDate>Wed, 20 Apr 2022 23:11:03 +0000</pubDate>
      <link>https://dev.to/arthur_pym/challenges-when-designing-a-new-application-252</link>
      <guid>https://dev.to/arthur_pym/challenges-when-designing-a-new-application-252</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;You have to choose the move that feels right sometimes; that’s what intuition is.&lt;br&gt;
— Magnus Carlsen, Chess World Champion&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’ve been thinking about the multiple challenges we face when designing a greenfield project. There’re many things we have to analyze and define. In the end, we’ll need the correct combination of architecture, language programming, database, infrastructure, and so on. This is really difficult because several options exist, and a new one appears all the time with promising benefits and unclear drawbacks. Additionally, the combination depends on the business context and the team. In any case, we don’t need the perfect setup because it could be too time-consuming and too complicated. As we all know, a low time to market is essential when starting a project. Instead, we must have a good enough combination that allows us to maintain a healthy balance.&lt;/p&gt;

&lt;p&gt;Almost everyone knows about chess and has played it for some time. The rules are quite simple, although the possibilities are enormous. After both players move, 400 possible board setups exist. After the second pair of turns, there are 197,742 possible games, and after three moves, 121 million. What makes it even more challenging is that sometimes a simple change in a position could transform a winning move into a completely losing one. So it’s impossible for a human to calculate all the variations. That’s why strong chess players have to develop good intuition and pattern recognition to make a good move in a decent amount of time. As in system design, a good enough decision is fine and desirable.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The limits of my language mean the limits of my world.&lt;br&gt;
— Ludwig Wittgenstein, Tractatus Logico-Philosophicus (1922)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When Martin Klepmann reviewed the different data models in his fascinating &lt;a href="https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/"&gt;book&lt;/a&gt;, he cited this very interesting quote. I think it’s a great analogy to show us that any decision involves trade-offs. There’s no such a thing as a silver bullet. For instance, the data model limits how we can read, write and update the data, but it allows us to organize and query it in a particular way that might be useful. Deciding on the correct kind of model for an application is crucial to avoid future problems in terms of performance and complexity of implementation. The same applies to each technical decision we make.&lt;/p&gt;

&lt;p&gt;There’re a lot of possibilities for every aspect of our system. You don’t have to be an expert on each of them, but it’s important to know the main categories. We can mention the relational and non-relational models for databases or microservices and monoliths for architectures. These categories could be further divided, depending on the detail we need. Ultimately, these are all tools to have in our bag when the time to design a new system comes. Last but not least, keep in mind that these decisions are not immutable. We must revisit them along the way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://lozaeric.medium.com/when-good-enough-is-best-8214ecd7d487"&gt;This was originally posted by me in medium&lt;/a&gt;&lt;/p&gt;

</description>
      <category>software</category>
      <category>database</category>
      <category>architecture</category>
    </item>
    <item>
      <title>When to use Microservices</title>
      <dc:creator>Arthur Pym</dc:creator>
      <pubDate>Sun, 26 Sep 2021 01:38:44 +0000</pubDate>
      <link>https://dev.to/arthur_pym/when-to-use-microservices-29f</link>
      <guid>https://dev.to/arthur_pym/when-to-use-microservices-29f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Of all the monsters that fill the nightmares of our folklore, none terrify more than werewolves, because they transform unexpectedly from the familiar into horrors. For these, one seeks bullets of silver that can magically lay them to rest.&lt;/p&gt;

&lt;p&gt;The familiar software project, at least as seen by the nontechnical manager, has something of this character… But, we see no silver bullet.&lt;/p&gt;

&lt;p&gt;Frederick Brooks&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;During the last decade, Microservices have been very popular. It seems that a lot of people believe they will solve each of the issues in their applications. They indeed provide several benefits, but you have to carefully analyze their pros and cons to unleash their full potential. In other words, Microservices are great, but only if you know when they make sense.&lt;/p&gt;

&lt;p&gt;In general, every technology decision has multiple trade-offs. There’s no such a thing as a perfect solution. Almost always, you have to conform with a good enough one. Which one should be? Well, that’s one of the hardest things about developing and designing information systems. For instance, Microservices add a lot of complexity to your system to improve scalability, agility and robustness.&lt;/p&gt;

&lt;p&gt;Bear in mind that Microservices are just a way to achieve your goals. Before adopting them, you should consider alternatives that could be less expensive in terms of costs or/and time. If you finally decide to migrate your system to Microservices, you must constantly monitor what is happening and see if you are accomplishing your goals.&lt;/p&gt;

&lt;p&gt;I recently read a couple of books about this topic, such as Microservices Patterns by Chris Richardson and Monolith to Microservices by Sam Newman. These are great books with many considerations to keep in mind when implementing Microservices. In particular, Sam Newman wrote about a few things to consider before deciding to adopt this architecture. I find them very interesting, so let’s see what he thinks about it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three questions before adopting Microservices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What are you hoping to achieve ?&lt;/li&gt;
&lt;li&gt;Have you considered alternatives to using microservices?&lt;/li&gt;
&lt;li&gt;How will you know if the transition is working.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reasons to adopt Microservices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improve team autonomy&lt;/li&gt;
&lt;li&gt;Reduce time to market&lt;/li&gt;
&lt;li&gt;Scale cost-effectively for load&lt;/li&gt;
&lt;li&gt;Improve robustness&lt;/li&gt;
&lt;li&gt;Scale the number of developers&lt;/li&gt;
&lt;li&gt;Embrace new technology&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reasons to not do it
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unclear domain&lt;/li&gt;
&lt;li&gt;Startups&lt;/li&gt;
&lt;li&gt;Customer-Installed and managed software&lt;/li&gt;
&lt;li&gt;Not having a good reason&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>microservices</category>
      <category>systemdesign</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
