<?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: Renato Cordeiro Ferreira</title>
    <description>The latest articles on DEV Community by Renato Cordeiro Ferreira (@renatocf).</description>
    <link>https://dev.to/renatocf</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%2F95563%2Fe4a10238-98e5-4c3a-8c19-ae62b607e89b.jpg</url>
      <title>DEV Community: Renato Cordeiro Ferreira</title>
      <link>https://dev.to/renatocf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/renatocf"/>
    <language>en</language>
    <item>
      <title>Is it time for Data Science / Engineering patterns?</title>
      <dc:creator>Renato Cordeiro Ferreira</dc:creator>
      <pubDate>Sat, 05 Jan 2019 00:06:33 +0000</pubDate>
      <link>https://dev.to/renatocf/is-it-time-for-data-science--engineering-patterns-1782</link>
      <guid>https://dev.to/renatocf/is-it-time-for-data-science--engineering-patterns-1782</guid>
      <description>&lt;p&gt;Most software engineers have already read &lt;a href="https://www.goodreads.com/book/show/85009" rel="noopener noreferrer"&gt;Design Patterns&lt;/a&gt;, the seminal book by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (the &lt;strong&gt;Gang of Four&lt;/strong&gt; a.k.a. &lt;strong&gt;GoF&lt;/strong&gt;) that made most programmers of object-oriented languages talk in terms of &lt;em&gt;singletons&lt;/em&gt;, &lt;em&gt;iterators&lt;/em&gt;, &lt;em&gt;strategies&lt;/em&gt;, etc.&lt;/p&gt;

&lt;p&gt;For those who don't know the concept, here it's the definition from &lt;a href="https://en.wikipedia.org/wiki/Software_design_pattern" rel="noopener noreferrer"&gt;Wikipedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In &lt;a href="https://en.wikipedia.org/wiki/Software_engineering" rel="noopener noreferrer"&gt;software engineering&lt;/a&gt;, a &lt;strong&gt;software design pattern&lt;/strong&gt; is a general, &lt;a href="https://en.wikipedia.org/wiki/Reusability" rel="noopener noreferrer"&gt;reusable&lt;/a&gt; solution to a commonly occurring problem within a given context in &lt;a href="https://en.wikipedia.org/wiki/Software_design" rel="noopener noreferrer"&gt;software design&lt;/a&gt;. It is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized &lt;a href="https://en.wikipedia.org/wiki/Best_practice" rel="noopener noreferrer"&gt;best practices&lt;/a&gt; that the programmer can use to solve common problems when designing an application or system. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I remember reading this book &lt;strong&gt;cover-to-cover in two days&lt;/strong&gt; (a not so common approach since this book is a kind of catalogue) in 2014. I had some experience with &lt;a href="https://en.wikipedia.org/wiki/Object-oriented_programming" rel="noopener noreferrer"&gt;object-oriented programming&lt;/a&gt; (OOP) from my undergraduate courses. However, I still had some difficulties to design new systems with this paradigm. Suddenly, someone gave me a guide to make new projects. The idea really appealed to me!&lt;/p&gt;

&lt;p&gt;It's a common mistake for new GoF's book readers to think that design patterns are &lt;em&gt;"the hammer that will pound all nails"&lt;/em&gt;. I made this mistake. I tried to plan everything in terms of patterns. But &lt;a href="https://en.wikipedia.org/wiki/No_Silver_Bullet" rel="noopener noreferrer"&gt;there are no silver bullets&lt;/a&gt;. I overshadowed their advantages and pitfalls. They give flexibility in one hand but increase complexity on the other hand. This is one of the biggest criticisms to the concept of design patterns (this and, for GoF patterns, &lt;a href="http://norvig.com/design-patterns/" rel="noopener noreferrer"&gt;OOP language limitations&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;My current master's and former monograph's advisor made his PhD with Ralph Johnson at University of Illinois Urbana-Champaign (UIUC). We've been working together in the refactoring of a machine learning framework created by our research group, &lt;a href="https://github.com/topsframework" rel="noopener noreferrer"&gt;ToPS&lt;/a&gt;. The framework uses patterns extensively to the point we identified and documented a new design pattern -- the &lt;a href="https://renatocf.xyz/secretart-pattern" rel="noopener noreferrer"&gt;Secretary pattern&lt;/a&gt; -- which we presented in the 11th &lt;a href="http://hillside.net/sugarloafplop/2016/" rel="noopener noreferrer"&gt;SugarLoaf-PLoP&lt;/a&gt;, the Latin American conference of Pattern Languages of Programs.&lt;/p&gt;

&lt;p&gt;Thanks to this project and the relationship with my advisor, I think I realized how and why patterns are valuable (at least to me): &lt;strong&gt;to standardize and increase the descriptive power of developers' language&lt;/strong&gt;. As I said in the beginning of this text, GoF's book made most programmers of object-oriented languages talk in terms of &lt;em&gt;singletons&lt;/em&gt;, &lt;em&gt;iterators&lt;/em&gt;, &lt;em&gt;strategies&lt;/em&gt;, etc. This spares time while it makes design / architecture discussions more concise and accurate.&lt;/p&gt;

&lt;p&gt;All this context brings me to the reason for this post. Today &lt;a href="https://twitter.com/AndrewYNg/" rel="noopener noreferrer"&gt;Andrew Ng&lt;/a&gt;, the famous Stanford professor who co-founded Coursera and made one of the &lt;a href="https://www.coursera.org/learn/machine-learning" rel="noopener noreferrer"&gt;most popular machine learning online courses of all time&lt;/a&gt;, posted this thread on Twitter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/AndrewYNg/status/1080887386488299520" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flj2qvzssvmodo0nfy9u2.png" alt="Andrew Ng's tweets" width="587" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This post is my (long) response to him.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GoF gave birth to a movement of pattern writers who document individual patterns and whole &lt;strong&gt;pattern languages&lt;/strong&gt; for things such as &lt;a href="https://www.goodreads.com/book/show/179133" rel="noopener noreferrer"&gt;domain-driven design&lt;/a&gt;, &lt;a href="https://www.goodreads.com/book/show/70156" rel="noopener noreferrer"&gt;enterprise architectures&lt;/a&gt;, &lt;a href="https://www.goodreads.com/book/show/8686650" rel="noopener noreferrer"&gt;continuous delivery&lt;/a&gt;, &lt;a href="https://www.goodreads.com/book/show/34372564" rel="noopener noreferrer"&gt;microservices&lt;/a&gt;, &lt;a href="https://www.goodreads.com/book/show/15499449" rel="noopener noreferrer"&gt;game programming&lt;/a&gt;, and many others. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But where are the data science and data engineering patterns?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As an enthusiast of this way of documenting best practices, I believe that we should search for these patterns and document them. My first realization of this was when I went to SugarLoaf Plop in 2016 and saw patterns for many areas, but none related to these. As Andrew Ng said (emphasis mine):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm also seeing many AI teams use new processes that &lt;strong&gt;haven't been formalized or named yet&lt;/strong&gt;, ranging from how we write product requirement docs to how we version data and ML pipelines.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As I said above, I think patterns are most valuable &lt;strong&gt;to standardize and increase the descriptive power of developers' language&lt;/strong&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is an exciting time for developing these ideas!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So let's create them!&lt;/p&gt;

&lt;p&gt;It's important to notice I talked about &lt;strong&gt;data science&lt;/strong&gt; and &lt;strong&gt;data engineering&lt;/strong&gt; instead of &lt;strong&gt;AI&lt;/strong&gt; or &lt;strong&gt;ML&lt;/strong&gt; as Andrew Ng said. This was a thought word-choice. I usually describe machine learning as one of the artificial intelligence techniques (statistical learning) available for data scientists when they're trying to reason about their data. However, data science is more broad and include other tasks (such as data mining or visualization) where patterns also could be useful. Meanwhile, dealing with lots of data has its own challenges, thus (big) data engineering can also benefit from this approach.&lt;/p&gt;




&lt;p&gt;Thanks for reading! What do you think? Would you read data science / engineering patterns? Do you believe this is a good way to document best practices for the area?&lt;/p&gt;

&lt;p&gt;In my PhD (which I hope will start soon), I want to explore the relationship between software engineering and data science / data engineering. I think that exploring patterns could be an interesting direction to take, hence my interest for Andrew Ng's tweet.&lt;/p&gt;

&lt;p&gt;If you liked this discussion, take a look in my other post where I wrote about software engineering for the first time. There I introduced my idea of &lt;a href="https://dev.to/renatocf/building-for-scale-make-a-radical-system-3p5j"&gt;R.A.D.I.C.A.L systems&lt;/a&gt;, which can also use AI/ML for &lt;strong&gt;I&lt;/strong&gt;ntelligent data transformation.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>machinelearning</category>
      <category>datascience</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>Building for Scale? Make a R.A.D.I.C.A.L. System!</title>
      <dc:creator>Renato Cordeiro Ferreira</dc:creator>
      <pubDate>Wed, 26 Dec 2018 23:56:44 +0000</pubDate>
      <link>https://dev.to/renatocf/building-for-scale-make-a-radical-system-3p5j</link>
      <guid>https://dev.to/renatocf/building-for-scale-make-a-radical-system-3p5j</guid>
      <description>&lt;p&gt;The year is ending, 2019 is almost here and soon the 2010s will come to an end. This decade was marked by services from companies like Netflix, Google and Facebook thriving and becoming part of our daily lives.&lt;/p&gt;

&lt;p&gt;For us in the tech field, these companies are examples. They build and operate systems that handle &lt;strong&gt;billions&lt;/strong&gt; of users, 24/7, all around the world. Just think about it. That's a scale hard to grasp and many would doubt we could have so many people connected just a decade ago. &lt;/p&gt;

&lt;p&gt;In this post I want to introduce a new concept came up with a couple days ago: &lt;strong&gt;R.A.D.I.C.A.L. systems&lt;/strong&gt;, that is, systems that are &lt;strong&gt;R&lt;/strong&gt;eactive, &lt;strong&gt;A&lt;/strong&gt;utomated, &lt;strong&gt;D&lt;/strong&gt;istributed, &lt;strong&gt;I&lt;/strong&gt;ntelligent, &lt;strong&gt;C&lt;/strong&gt;omplex, &lt;strong&gt;A&lt;/strong&gt;gile, and &lt;strong&gt;L&lt;/strong&gt;ean.&lt;/p&gt;

&lt;p&gt;I invented this acronym as a way to assemble these techniques that big companies are using to create successful systems that scale. I've been reading &lt;a href="https://renatocf.xyz/goodreads"&gt;lots of books&lt;/a&gt; and watching &lt;a href="https://renatocf.xyz/youtube"&gt;lots of talks&lt;/a&gt; about these subjects and I realized there was no term to describe systems that mix all of them. &lt;/p&gt;

&lt;p&gt;Most of the concepts here are not new, but they're becoming more and more popular thanks to the challenge of making systems -- R.A.D.I.C.A.L. systems -- capable of serving a huge number of people.&lt;/p&gt;

&lt;p&gt;I'll start backwards by introducing each letter of the acronym in the &lt;strong&gt;reverse order&lt;/strong&gt;. I believe this is the most &lt;strong&gt;constructive way&lt;/strong&gt; to introduce the concepts. Whenever possible, I'll put links for those interested in reading more about the subjects I'm talking about.&lt;/p&gt;

&lt;p&gt;This is my first public post about software engineering, so I hope you enjoy!&lt;/p&gt;




&lt;h1&gt;
  
  
  1. &lt;code&gt;L&lt;/code&gt; stands for &lt;em&gt;Lean Inception&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;Projecting systems from the scratch is hard, mainly when we don't know the business domain that we want to tackle. &lt;a href="https://en.wikipedia.org/wiki/Lean_startup"&gt;Lean Startup&lt;/a&gt; by Eric Ries taught us how to &lt;strong&gt;build, measure and learn&lt;/strong&gt; to create a &lt;strong&gt;Minimum Viable Product (MVP)&lt;/strong&gt; in an environment of uncertainty. On the other hand, &lt;a href="https://en.wikipedia.org/wiki/Design_thinking"&gt;Design Thinking&lt;/a&gt; brought to our attention the importance of &lt;strong&gt;research&lt;/strong&gt; to have &lt;strong&gt;insights&lt;/strong&gt; about problems in order to &lt;strong&gt;ideate&lt;/strong&gt; and generate &lt;strong&gt;prototypes&lt;/strong&gt; to get a specific solution. How can we mix these mindsets to create a new project?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/articles/lean-inception/"&gt;Lean Inception&lt;/a&gt; by Paulo Caroli is a methodology that joins some techniques from Lean Startup and Design Thinking to start a new product. It does that by aligning the ideas of all stakeholders, product owners and developers involved in the project. The result (by the end of the one week session) is a set of &lt;strong&gt;MVP Canvas&lt;/strong&gt; that describe the main goals, advantages and drawbacks of each iteration of development. They are accompanied by &lt;strong&gt;user stories&lt;/strong&gt; that can be used by developers during the construction of the system.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use the &lt;strong&gt;L&lt;/strong&gt;ean Inception to choose which and when features should be built.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. &lt;code&gt;A&lt;/code&gt; stands for &lt;em&gt;Agile Development&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; is 17 years old and being agile is no longer hipster but rather mainstream. It's hard to find a developer who does not agree with the core values of agility, where &lt;strong&gt;individuals and interactions&lt;/strong&gt;, &lt;strong&gt;working software&lt;/strong&gt;, &lt;strong&gt;customer collaboration&lt;/strong&gt; and &lt;strong&gt;responding to change&lt;/strong&gt; are valued respectively more than processes and tools, comprehensive documentation, contract negotiation and following a plan.&lt;/p&gt;

&lt;p&gt;The flexibility of Agile made it the default mindset when companies start developing -- whichever techniques they choose to use, prepackaged in methodologies such as &lt;a href="https://en.wikipedia.org/wiki/Extreme_programming"&gt;Extreme Programming&lt;/a&gt; (more focused on the developer-side), &lt;a href="https://en.wikipedia.org/wiki/Scrum_%28software_development%29"&gt;Scrum&lt;/a&gt; (more focused on the management side), &lt;a href="https://en.wikipedia.org/wiki/Kanban"&gt;Kanban&lt;/a&gt; (focused on the organization of tasks), and many others.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use the &lt;strong&gt;A&lt;/strong&gt;gile Development to optimize how and where features should be built.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. &lt;code&gt;C&lt;/code&gt; stands for &lt;em&gt;Complex Event Processing&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;Millions to billions of users produce many, many (did I say many?) data, all the time, and we need a way to handle it. In an era of &lt;a href="https://en.wikipedia.org/wiki/Internet_of_Things"&gt;Internet of Things&lt;/a&gt; where more and more devices are connected together, we need a way to handle all the &lt;strong&gt;signals&lt;/strong&gt; they produce when interacting with humans and other machines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Complex_event_processing"&gt;Complex Event Processing&lt;/a&gt; is a theory that advances many (big) data processing techniques to establish a well-defined method to deal with &lt;strong&gt;infinite data sets&lt;/strong&gt;, generating ways to query, transform and mix different streams. It gives a framework to &lt;strong&gt;abstract&lt;/strong&gt; dataflows, processes and exceptions that are happening inside a system.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use &lt;strong&gt;C&lt;/strong&gt;omplex Event Processing techniques to track and analyze the data inside it.&lt;/p&gt;

&lt;h1&gt;
  
  
  4. &lt;code&gt;I&lt;/code&gt; stands for &lt;em&gt;Intelligent Data Transformation&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Artificial_intelligence"&gt;Artificial Intelligence&lt;/a&gt; and, in particular, &lt;a href="https://en.wikipedia.org/wiki/Machine_learning"&gt;Machine Learning&lt;/a&gt; are trending in the last couple years since humans can no longer grasp the amount of data we are producing. &lt;strong&gt;Pattern Recognition&lt;/strong&gt;, &lt;strong&gt;Computer Vision&lt;/strong&gt;, &lt;strong&gt;Natural Language Processing&lt;/strong&gt; are some of the areas that AI/ML are making the most impact.&lt;/p&gt;

&lt;p&gt;The result is a new generation of systems that make things that we could only dream of a decade ago, such as &lt;a href="https://en.wikipedia.org/wiki/Virtual_assistant"&gt;voice assistants&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Autonomous_car"&gt;autonomous cars&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Reusable_launch_system"&gt;reusable rockets&lt;/a&gt;. As the ecosystem matures, using algorithms and models from these areas to find out valuable information to your product is no longer a task only for PhDs.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use &lt;strong&gt;I&lt;/strong&gt;ntelligent Data Transformation techniques to learn and generate insights from the data inside it.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. &lt;code&gt;D&lt;/code&gt; stands for &lt;em&gt;Distributed Environments&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;Some say that &lt;a href="https://en.wikipedia.org/wiki/Cloud_computing"&gt;Cloud Computing&lt;/a&gt; is making to computation what the first power plants made to electricity. We no longer need to lose time maintaining our own servers to run and scale a system for new users. The cloud, however, brought many new challenges for developers. We &lt;strong&gt;no longer have the control&lt;/strong&gt; of when a machine will be available, neither where exactly our systems are running.&lt;/p&gt;

&lt;p&gt;Distributed systems are as old as the first networks. It is a cheap solution to increase processing power and the cloud made it much cheaper. However, the &lt;a href="https://en.wikipedia.org/wiki/CAP_theorem"&gt;CAP theorem&lt;/a&gt; made the words &lt;strong&gt;availability&lt;/strong&gt; and &lt;strong&gt;consistency&lt;/strong&gt; known by every developer that deals with these systems. This mix of theoretical and practical challenges pushed the creation of a new generation of tools that encapsulate the best patterns to manage these environments.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use &lt;strong&gt;D&lt;/strong&gt;istributed Environments to be scalable in a simple and unrestrained manner.&lt;/p&gt;

&lt;h1&gt;
  
  
  6. &lt;code&gt;A&lt;/code&gt; stands for &lt;em&gt;Automated Infrastructure&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;If servers are out of our hands (thanks to the cloud), &lt;strong&gt;automation&lt;/strong&gt; is very important to guarantee that we can run our services anywhere (particularly with the least vendor lock-in as possible). &lt;a href="https://en.wikipedia.org/wiki/Infrastructure_as_code"&gt;Infrastructure as Code&lt;/a&gt; was the first step to enable developers to take part of operators responsibility, leading to the much broader &lt;a href="https://en.wikipedia.org/wiki/Native_cloud_application"&gt;Cloud-Native&lt;/a&gt; movement (which includes technologies for &lt;strong&gt;virtualization&lt;/strong&gt;, &lt;strong&gt;orchestration&lt;/strong&gt;, &lt;strong&gt;observability&lt;/strong&gt; and many other buzzwords) and the &lt;a href="https://en.wikipedia.org/wiki/Serverless_computing"&gt;Serverless&lt;/a&gt; movement (which tries to free developers to think in nothing but their business logic).&lt;/p&gt;

&lt;p&gt;At the same time, &lt;a href="https://en.wikipedia.org/wiki/DevOps"&gt;DevOps&lt;/a&gt; is shining as a mindset to close the gap between development (creating new things) and operations (maintaining existing things), allowing the &lt;strong&gt;full ownership&lt;/strong&gt; of products by those who created them. This heavily relies on and allows &lt;a href="https://en.wikipedia.org/wiki/Continuous_delivery"&gt;Continuous Delivery&lt;/a&gt; of new features, where they can be &lt;strong&gt;packaged&lt;/strong&gt;, &lt;strong&gt;tested&lt;/strong&gt; and &lt;strong&gt;deployed&lt;/strong&gt; with shorter cycles.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use &lt;strong&gt;A&lt;/strong&gt;utomated Infrastructure to be deployable in a safe and reproducible manner.&lt;/p&gt;

&lt;h1&gt;
  
  
  7. &lt;code&gt;R&lt;/code&gt; stands for &lt;em&gt;Reactive Microservices Architecture&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;Complex business cases may demand large systems that span many business subdomains. &lt;a href="https://en.wikipedia.org/wiki/Domain-driven_design"&gt;Domain-Driven Design&lt;/a&gt; by Eric Evans brought the concept of a &lt;strong&gt;ubiquitous language&lt;/strong&gt; that should be used to describe these systems and &lt;strong&gt;bounded contexts&lt;/strong&gt; that divide them. These are the building blocks for a &lt;a href="https://en.wikipedia.org/wiki/Microservices"&gt;Microservices architecture&lt;/a&gt;, that explores their semi-independence to create a system composed by many independent services which can be developed by standalone teams.&lt;/p&gt;

&lt;p&gt;But building microservices is not a silver bullet for modern systems since there is a set of &lt;a href="https://www.martinfowler.com/bliki/MicroservicePrerequisites.html"&gt;prerequisites&lt;/a&gt; in order to adopt them instead of a monolith. Anyway, the architecture still can become a &lt;a href="https://en.wikipedia.org/wiki/Big_ball_of_mud"&gt;big ball of mud&lt;/a&gt;. The &lt;a href="https://www.reactivemanifesto.org/"&gt;Reactive Manifesto&lt;/a&gt; indicates how creating &lt;strong&gt;responsive&lt;/strong&gt;, &lt;strong&gt;resilient&lt;/strong&gt;, &lt;strong&gt;elastic&lt;/strong&gt; and &lt;strong&gt;message-driven&lt;/strong&gt; services may help to strength systems for scale.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;R.A.D.I.C.A.L system&lt;/strong&gt; should use &lt;strong&gt;R&lt;/strong&gt;eactive Microservices Architecture to encode complex business models and domain-specific knowledge.&lt;/p&gt;




&lt;p&gt;That's it! What do you think about &lt;strong&gt;R.A.D.I.C.A.L systems&lt;/strong&gt;? I'm sure they are not easy to make, and that grasping every concept requires lots of learning -- but it's been a very nice journey.&lt;/p&gt;

&lt;p&gt;I want to thank my friends Fernando, Rafael and Victor for the valuable feedback. This post is just scratching the surface, but I want to highlight that there are systems -- R.A.D.I.C.A.L. systems -- that mix all these concepts.&lt;/p&gt;

&lt;p&gt;If you want to discuss more about these ideas, please reach me at &lt;a href="https://renatocf.xyz/twitter"&gt;Twitter&lt;/a&gt; or &lt;a href="https://renatocf.xyz/linkedin"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>techonology</category>
      <category>webdev</category>
      <category>devops</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
