<?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: Franck Mercado</title>
    <description>The latest articles on DEV Community by Franck Mercado (@franckweb).</description>
    <link>https://dev.to/franckweb</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%2F37374%2Fa0e11497-74a2-482b-b3d0-ef41134208cf.png</url>
      <title>DEV Community: Franck Mercado</title>
      <link>https://dev.to/franckweb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/franckweb"/>
    <language>en</language>
    <item>
      <title>Functional MCP AI System Diagram</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Mon, 15 Dec 2025 18:05:20 +0000</pubDate>
      <link>https://dev.to/franckweb/functional-mcp-ai-system-diagram-4j2p</link>
      <guid>https://dev.to/franckweb/functional-mcp-ai-system-diagram-4j2p</guid>
      <description>&lt;p&gt;Try it out at: &lt;a href="https://mermaid.live" rel="noopener noreferrer"&gt;https://mermaid.live&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mermaid Graph image
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fut2uelxqy7fi00vp3b8w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fut2uelxqy7fi00vp3b8w.png" alt=" " width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mermaid Graph code
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;graph TD

    %% Node Definitions
    U[User]
    MT(MCP Tools / Host Application)
    MS(MCP Server / Capability Provider)
    LLM(Large Language Models)
    RAG(Retrieval-Augmented Generation)
    NLP(Natural Language Processing)
    GenAI[Generative AI]
    ET[External Tools &amp;amp; Resources]
    TD["Training Data (Corpus)"]
    VDB[Vector Database]

    %% 1. User Application Subgraph (The Host)
    subgraph User Interface ["(Host)"]
        U -- submits query/intent to --&amp;gt; MT
        MT -- renders final response to --&amp;gt; U
    end

    %% 2. Core AI &amp;amp; Orchestration Subgraph
    subgraph AI Processing &amp;amp; Orchestration
        LLM -- uses foundational capability of --&amp;gt; NLP
        LLM -- is a specific instance of --&amp;gt; GenAI
        RAG -- provides augmented context/prompt to --&amp;gt; LLM
    end

    %% 3. Capabilities and Context Subgraph (The Server's Role)
    subgraph External Capabilities ["(Data Resources)"]
        MS -- provides access to --&amp;gt; ET
        RAG -- executes retrieval query on --&amp;gt; VDB
        VDB -- stores vectorized embeddings for --&amp;gt; RAG
        TD -- pre-trains base model --&amp;gt; LLM
        ET -- includes external knowledge via --&amp;gt; TD
    end

    %% 4. Cross-Subgraph Functional Flow
    MT -- sends protocol request via Client to --&amp;gt; MS
    MS -- coordinates and invokes --&amp;gt; LLM
    MS -- implements retrieval logic via --&amp;gt; RAG

    LLM -- generates final output and returns to --&amp;gt; MS
    MS -- returns protocol response/result to --&amp;gt; MT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Suggest any improvements.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>User Stories evaluation acronyms in agile software development teams</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Fri, 17 Mar 2023 21:16:20 +0000</pubDate>
      <link>https://dev.to/franckweb/user-stories-evaluation-acronym-in-agile-teams-2md4</link>
      <guid>https://dev.to/franckweb/user-stories-evaluation-acronym-in-agile-teams-2md4</guid>
      <description>&lt;p&gt;When working in an agile-ish software development team you will come to the part where, as a team, you will need to prioritize and decide how to split the user stories for your current Sprint. For these purpose there are widely accepted steps to take, that act as a checklist that will add up in quality and will favor clarity and visibility for the whole company; product, engineering, business teams.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;These criteria for evaluating User Stories is summed up into two acronyms, INVEST and SMART.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hsj6MvQB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xy7cvww0n8urn99cuxoo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hsj6MvQB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xy7cvww0n8urn99cuxoo.png" alt="Image description" width="880" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Additionally the following suggestions can be considered as guidelines to split user stories :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Functional size&lt;/strong&gt;: Amount of work required to complete the story. This can be measured in terms of the number of features or tasks that need to be completed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business value&lt;/strong&gt;: Value that it provides to the end user or customer. This can be measured in terms of the benefit that the user will receive from the completed story.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk&lt;/strong&gt;: Likelihood that the story will not be completed as planned. This can be measured in terms of the uncertainty or complexity of the work involved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependencies&lt;/strong&gt;: Tasks or features that must be completed before the story can be started. These dependencies can be internal to the team or external to the team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time constraints&lt;/strong&gt;: Deadlines or due dates that must be met in order to complete the story. These constraints can be imposed by the team or by external factors such as customer deadlines.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agile</category>
      <category>user</category>
      <category>stories</category>
      <category>scrum</category>
    </item>
    <item>
      <title>API Middleware use cases</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Sun, 22 Jan 2023 02:26:42 +0000</pubDate>
      <link>https://dev.to/franckweb/api-middleware-use-cases-1oa9</link>
      <guid>https://dev.to/franckweb/api-middleware-use-cases-1oa9</guid>
      <description>&lt;h2&gt;
  
  
  What is API Middleware?
&lt;/h2&gt;

&lt;p&gt;Is a component that participates in the processing of an HTTP Request and the consequent generation of a Response. It acts as a mediator between the client or consumer and the software application service. There are multiple types of middlewares depending on which app they connect to. We will focus on API Middleware.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95tnsaot8fkkkdkibhko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95tnsaot8fkkkdkibhko.png" alt="Image description" width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A middleware
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;can access your HTTP request and its related information  like headers, method, body, parameters, etc &lt;/li&gt;
&lt;li&gt;sends (or not) the request to the backend application for further processing through the request handler&lt;/li&gt;
&lt;li&gt;return a valid HTTP response to the client or consumer.&lt;/li&gt;
&lt;li&gt;performs actions before or/and after execution of the request handler, since is part of the processing pipeline, allowing flexible compute capabilities. &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  API Middleware use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Request/response manipulation (e.g. add headers, modify the body, etc)&lt;/li&gt;
&lt;li&gt;Session&lt;/li&gt;
&lt;li&gt;Cross-Origin Resource Sharing (CORS)&lt;/li&gt;
&lt;li&gt;Firewall&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Validation&lt;/li&gt;
&lt;li&gt;Sanitize&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Logging and monitoring&lt;/li&gt;
&lt;li&gt;Error handling and exception management&lt;/li&gt;
&lt;li&gt;Content negotiation (e.g. handling different formats for the same resource)&lt;/li&gt;
&lt;li&gt;Rate limiting and Throttling&lt;/li&gt;
&lt;li&gt;Honeypot&lt;/li&gt;
&lt;li&gt;Security (e.g. CSRF protection, Same-Site Cookie)&lt;/li&gt;
&lt;li&gt;Internationalization and localization&lt;/li&gt;
&lt;li&gt;API Versioning&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Software Architecture Patterns for common problems</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Tue, 20 Sep 2022 01:37:36 +0000</pubDate>
      <link>https://dev.to/franckweb/software-architecture-patterns-for-common-problems-1k18</link>
      <guid>https://dev.to/franckweb/software-architecture-patterns-for-common-problems-1k18</guid>
      <description>&lt;h2&gt;
  
  
  Data management
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Database per Service&lt;/li&gt;
&lt;li&gt;Shared database&lt;/li&gt;
&lt;li&gt;CQRS&lt;/li&gt;
&lt;li&gt;Domain event&lt;/li&gt;
&lt;li&gt;Event sourcing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Transactional messaging
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Transactional outbox&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Access Token (JWT)&lt;/li&gt;
&lt;li&gt;Oauth&lt;/li&gt;
&lt;li&gt;Session&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Observability
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Log aggregation&lt;/li&gt;
&lt;li&gt;Application metrics&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;Health check API&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Software Architecture and Software Design</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Wed, 27 Jul 2022 16:03:35 +0000</pubDate>
      <link>https://dev.to/franckweb/software-architecture-and-software-design-3m81</link>
      <guid>https://dev.to/franckweb/software-architecture-and-software-design-3m81</guid>
      <description>&lt;p&gt;Based on both key definitions, software architecture and software design, we can lay down an organization of software principles, methodologies and patterns currently applied in modern software development and technology innovations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Architecture
&lt;/h2&gt;

&lt;p&gt;It's a high level blueprint for a system.&lt;br&gt;
It defines the structural elements like subsystems, roles, relationships and responsibilities meaning it lays down the architecture style, patterns that will guide the software design.&lt;br&gt;
Software architecture directly deals with arranging this elements like servers, databases, APIs, clients or users of the software application, etc in order to fulfill business requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Design
&lt;/h2&gt;

&lt;p&gt;Implies decisions at a lower level of detail as it provides an implementation plans for the laid out architecture.&lt;br&gt;
Software designers will decide on the specifications, contracts used in these subsystems that later software engineers will implement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Organization of software principles, methodologies and patterns
&lt;/h2&gt;

&lt;p&gt;Index of software concepts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Software architecture style&lt;/li&gt;
&lt;li&gt;Software architecture patterns&lt;/li&gt;
&lt;li&gt;Software design methodologies&lt;/li&gt;
&lt;li&gt;Software design patterns&lt;/li&gt;
&lt;li&gt;Programming paradigms&lt;/li&gt;
&lt;li&gt;Clean code principles&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Software Architecture Style &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Based on Structure (separation of concerns)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Layered architecture (N-tier):Common for separation of concerns (e.g. presentation, business logic, data layers).&lt;/li&gt;
&lt;li&gt;Hexagonal architecture (Ports &amp;amp; Adapters): Focused in decoupling core logic from external systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Based on distribution of the application&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monolith architecture&lt;/li&gt;
&lt;li&gt;Microservices architecture

&lt;ul&gt;
&lt;li&gt;Microservices patterns&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Focuses on asynchronous communication through events.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event Driven architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cloud&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Involves event triggered functions (AWS Lambda) rather than traditional server management.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;API Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST over HTTP&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Software Architecture Patterns &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Based on data management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database per service (microservices)&lt;/li&gt;
&lt;li&gt;Shared database (monoliths)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Event driven systems&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CQRS: Common Query Responsibility Segregation, Separating read and write operations.&lt;/li&gt;
&lt;li&gt;Domain event&lt;/li&gt;
&lt;li&gt;Event sourcing: Store state changes as sequence of events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Based on transactional messaging&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ensures reliable message delivery in distributed systems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transactional outbox&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Based on security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access tokens (Authentication) &lt;/li&gt;
&lt;li&gt;Oauth (Authorization)&lt;/li&gt;
&lt;li&gt;Session&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Based on observability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essential for monitoring and troubleshooting in distributed systems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log aggregation&lt;/li&gt;
&lt;li&gt;Application metrics&lt;/li&gt;
&lt;li&gt;Exception tracking&lt;/li&gt;
&lt;li&gt;Health check API&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Software Design Methodologies &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Domain Driven Design (DDD): Focuses on modeling the domain and aligning software design with business needs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Behavior Driven Development (BDD): emphasizes collaboration between developers, testers and business stakeholders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Driven Development (TDD): involves writing tests for core domain logic before coding to ensure quality and maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Software Design Patterns &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Creational Patterns&lt;/li&gt;
&lt;li&gt;Structural Patterns&lt;/li&gt;
&lt;li&gt;Behavioral Patterns &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Expand on &lt;a href="https://dev.to/franckweb/software-architecture-design-patterns-516j"&gt;software design patterns&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Programming Paradigms &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Object Oriented Programming (OOP)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composition over inheritance&lt;/li&gt;
&lt;li&gt;SOLID

&lt;ul&gt;
&lt;li&gt;Single-responsiblity Principle&lt;/li&gt;
&lt;li&gt;Open-closed Principle&lt;/li&gt;
&lt;li&gt;Liskov Substitution Principle&lt;/li&gt;
&lt;li&gt;Interface Segregation Principle&lt;/li&gt;
&lt;li&gt;Dependency Inversion Principle&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Functional Programming: emphasizes immutability and pure functions.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Basic principles &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Clean Code&lt;/li&gt;
&lt;li&gt;DRY: Don't repeat yourself&lt;/li&gt;
&lt;li&gt;KISS: Keep it stupid simple&lt;/li&gt;
&lt;li&gt;YAGNI: You aren't going to need it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Take into account that all these architectural principles, methodologies and patterns are no substitute for making your own decisions. You need to balance them according to business requirements of your software application.&lt;/p&gt;

</description>
      <category>software</category>
      <category>architecture</category>
      <category>design</category>
      <category>patterns</category>
    </item>
    <item>
      <title>Magic in an Application Framework</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Sat, 23 Jul 2022 16:54:00 +0000</pubDate>
      <link>https://dev.to/franckweb/magic-in-an-application-framework-55oa</link>
      <guid>https://dev.to/franckweb/magic-in-an-application-framework-55oa</guid>
      <description>&lt;h2&gt;
  
  
  What is called magic in software development?
&lt;/h2&gt;

&lt;p&gt;Well maybe you are already familiar with the following gif image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C2XJ2Zcy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btx2z111mvqq75asohgi.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C2XJ2Zcy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/btx2z111mvqq75asohgi.gif" alt="Magic Code" width="220" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I first was introduced to this meme I totally understood what they meant with magic in programming or what at the time I could identify as magic code.&lt;/p&gt;

&lt;p&gt;To understand what magic is let's look at some examples.&lt;/p&gt;

&lt;p&gt;The first example is from Rails framework. Looks like there's not much going on in this code, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2K0UG-Ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqg9dya045fnme2spxmn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2K0UG-Ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uqg9dya045fnme2spxmn.png" alt="Ruby on Rails" width="655" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Taken from the same Ruby on Rails official website:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;... note that the Post class inherits from ActiveRecord::Base. Active Record supplies a great deal of functionality to your Rails models for free, including basic database CRUD (Create, Read, Update, Destroy) operations, data validation, as well as sophisticated search support and the ability to relate multiple models to one another. Another important part of this file is attr_accessible. It specifies a whitelist of attributes that are allowed to be updated in bulk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, let's see this second example. It comes from Laravel framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7b1Aox-F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bo7ohq6z4k2opa8skq38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7b1Aox-F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bo7ohq6z4k2opa8skq38.png" alt="Laravel" width="704" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In that small piece of code the application's route will automatically resolve the Service class and inject it into your route's handler. But how? Well, internally it is grabbing it from the framework's service container and thanks to dependency injection it is doing some configurations and injecting an instance of that class. Laravel does this also in controllers, event listeners, middlewares, queued jobs, etc.&lt;/p&gt;

&lt;p&gt;As you can see there's quite some functionality hidden and available for us in those two code examples. They hide some configuration as well as conventions inherit by their respective application frameworks.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Magic is great&lt;/em&gt; as it offers all this functionality with a few lines of code. And at the same time &lt;em&gt;magic is bad&lt;/em&gt; when used indiscriminately.&lt;/p&gt;

&lt;p&gt;Why? Well, remember that as part of our software engineer responsibilities we need to do short and long term planning. First keep in mind that other developers might be working in the same codebase and they will need to be aware of these conventions and read documentation beforehand in order to understand what the code does or what it offers internally.&lt;/p&gt;

&lt;p&gt;Also consider that your application might be migrated away from its original infrastructure depending on business or technology needs and being tied to a particular application framework makes it harder for decoupling.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Well this is the part where &lt;em&gt;you need to decide&lt;/em&gt; how much magic is good in your software application and also how good or bad is to be tied to the chosen application framework and depend on it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Remember that if your application framework blocks you from integrating your app with other services or makes it hard to decouple your modules to migrate them to microservices for other teams to work on it, or just slows you down in order to optimize the performance, security of your apps then I recommend you to plan ahead and spend a bit of time thinking about these implementation decisions and if using them won't slow you down later.&lt;/p&gt;

&lt;p&gt;Your future self will thank you for it!&lt;/p&gt;

</description>
      <category>application</category>
      <category>framework</category>
      <category>software</category>
      <category>magic</category>
    </item>
    <item>
      <title>Software and IT Infrastructure</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Fri, 22 Jul 2022 21:38:28 +0000</pubDate>
      <link>https://dev.to/franckweb/software-and-it-infrastructure-2akk</link>
      <guid>https://dev.to/franckweb/software-and-it-infrastructure-2akk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;From IT perspective, Infrastructure refers to all components, libraries, tools, etc that are connected to an actual physical infrastructure (hardware) or external service (software), through specific programs, drivers or other libraries which will enable such connection in order to operate or manage services or environments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With that in mind, infrastructure is considered to be our storage systems of preference such as Databases or Cache, also Logging systems or Message brokers that are supporting our software applications, even external services to your application like Email messaging, external logging services or external reporting tools are considered infrastructure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is crucial to realize that also your favorite application framework is also part or considered to be infrastructure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Software engineers that take architectural design principles into account when developing their systems, tend to guarantee, among others, these software characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flexibility&lt;/li&gt;
&lt;li&gt;Extensibility&lt;/li&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Maintainability&lt;/li&gt;
&lt;li&gt;Reusability&lt;/li&gt;
&lt;li&gt;Testability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And these features are very important for systems to last a long time and to require less resources to keep them up to date with latest technologies and keep them solid (secure, testable) and open for integrability and/or portability against new business requirements.&lt;/p&gt;

&lt;p&gt;In order to achieve this objectives we need solid &lt;a href="https://dev.to/franckweb/software-architecture-and-software-design-3m81"&gt;Software Architecture and Design principles&lt;/a&gt;, be conscious of when to apply &lt;a href="https://dev.to/franckweb/software-architecture-design-patterns-516j"&gt;Software Architecture Design Patterns&lt;/a&gt; available, as well as &lt;a href="https://dev.to/franckweb/software-architecture-patterns-for-common-problems-1k18"&gt;Software Architecture Patterns for Common Problems&lt;/a&gt; and proven industry techniques that help us keep our Software Domain &lt;strong&gt;decoupled&lt;/strong&gt; from Infrastructure, solid and extensible allowing as to fulfill above mentioned software characteristics.&lt;/p&gt;

</description>
      <category>infrastructure</category>
      <category>decoupling</category>
      <category>refactoring</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Software Design Patterns</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Fri, 22 Jul 2022 21:20:00 +0000</pubDate>
      <link>https://dev.to/franckweb/software-architecture-design-patterns-516j</link>
      <guid>https://dev.to/franckweb/software-architecture-design-patterns-516j</guid>
      <description>&lt;h2&gt;
  
  
  Creational Patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Factory Pattern&lt;/li&gt;
&lt;li&gt;Builder Pattern&lt;/li&gt;
&lt;li&gt;Prototype Pattern&lt;/li&gt;
&lt;li&gt;Singleton Pattern&lt;/li&gt;
&lt;li&gt;Abstract Factory Pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Structural Patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Adapter Pattern&lt;/li&gt;
&lt;li&gt;Bridge Pattern&lt;/li&gt;
&lt;li&gt;Composite Pattern&lt;/li&gt;
&lt;li&gt;Decorator Pattern&lt;/li&gt;
&lt;li&gt;Facade Pattern&lt;/li&gt;
&lt;li&gt;Flyweight Pattern&lt;/li&gt;
&lt;li&gt;Proxy Pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Behavioral Patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Chain of Responsibility Pattern&lt;/li&gt;
&lt;li&gt;Command Pattern&lt;/li&gt;
&lt;li&gt;Iterator Pattern&lt;/li&gt;
&lt;li&gt;Mediator Pattern&lt;/li&gt;
&lt;li&gt;Observer Pattern&lt;/li&gt;
&lt;li&gt;State Pattern&lt;/li&gt;
&lt;li&gt;Strategy Pattern&lt;/li&gt;
&lt;li&gt;Template Method Pattern&lt;/li&gt;
&lt;li&gt;Visitor Pattern&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>software</category>
      <category>architecture</category>
      <category>design</category>
      <category>patterns</category>
    </item>
    <item>
      <title>Hello I'm Franck!</title>
      <dc:creator>Franck Mercado</dc:creator>
      <pubDate>Tue, 12 Oct 2021 21:17:56 +0000</pubDate>
      <link>https://dev.to/franckweb/hello-im-franck-59o8</link>
      <guid>https://dev.to/franckweb/hello-im-franck-59o8</guid>
      <description>&lt;p&gt;I live in Cusco.&lt;/p&gt;

&lt;p&gt;I love coding and software architecture.&lt;/p&gt;

&lt;p&gt;Find me on Twitter as @franckmercado&lt;/p&gt;

&lt;p&gt;Happy to be in Dev! :)&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
