<?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: Didier José Torres Parodis</title>
    <description>The latest articles on DEV Community by Didier José Torres Parodis (@didierparody).</description>
    <link>https://dev.to/didierparody</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%2F3899463%2F7d0a9dfc-9a5e-40f5-810b-f6e5ca106456.jpeg</url>
      <title>DEV Community: Didier José Torres Parodis</title>
      <link>https://dev.to/didierparody</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/didierparody"/>
    <language>en</language>
    <item>
      <title>Business Logic + Data: the real leverage behind software engineering</title>
      <dc:creator>Didier José Torres Parodis</dc:creator>
      <pubDate>Wed, 29 Apr 2026 14:57:39 +0000</pubDate>
      <link>https://dev.to/didierparody/business-logic-data-the-real-leverage-behind-software-engineering-3mj9</link>
      <guid>https://dev.to/didierparody/business-logic-data-the-real-leverage-behind-software-engineering-3mj9</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Gap 1&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One month ago, a professor from my Platform-Oriented Development course asked me to build a project. I called it &lt;em&gt;Deluxe&lt;/em&gt;: a nightclub reservation system.&lt;/p&gt;

&lt;p&gt;From the very beginning, I didn’t think in terms of code — I thought in terms of the system as a whole: concurrency issues, APIs, and most importantly, the data model.&lt;/p&gt;

&lt;p&gt;With that in mind, I structured my approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I analyzed the business logic.&lt;/li&gt;
&lt;li&gt;I designed the relational data model.&lt;/li&gt;
&lt;li&gt;I defined the query set that represents the backend behavior.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At that point, my next step wasn’t reading official documentation. Instead, I focused on planning: setting up my environment, selecting tools, and structuring how the system would evolve.&lt;/p&gt;

&lt;p&gt;The result?&lt;br&gt;
The system fulfilled all the requirements — not because of the framework or the language, but because I understood the business logic behind it.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Gap 2&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;At that point, I realized something: building the system wasn’t enough. I needed to expand its scope into something more meaningful — something analytical.&lt;/p&gt;

&lt;p&gt;That’s when Neo4j became the key.&lt;/p&gt;

&lt;p&gt;I wanted to introduce &lt;strong&gt;dynamic pricing&lt;/strong&gt;, but not in a naive way. To do that properly, I needed to understand relationships between customers — something that a relational model cannot express efficiently.&lt;/p&gt;

&lt;p&gt;So I defined a set of strategic questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which customers always attend events together?&lt;/li&gt;
&lt;li&gt;Who is the most influential client in the network?&lt;/li&gt;
&lt;li&gt;If a key client doesn’t show up, who else is likely to be affected?&lt;/li&gt;
&lt;li&gt;Which clients act as bridges between different social groups?&lt;/li&gt;
&lt;li&gt;What events should I recommend based on social connections?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the most important one:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If I launch a promotion for a specific client, how many other clients will I reach indirectly through their social network?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where the problem becomes clear:&lt;br&gt;
PostgreSQL can store the data, but it cannot answer these questions efficiently.&lt;br&gt;
Neo4j, on the other hand, is built exactly for this type of problem.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;From intuition to implementation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To answer these questions, I had to redesign part of my architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Synthetic data generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I started by generating synthetic data based on my relational database.&lt;/p&gt;

&lt;p&gt;But I quickly ran into a common mistake:&lt;br&gt;
creating data without respecting real-world behavior.&lt;/p&gt;

&lt;p&gt;User behavior is not rigid — it’s noisy, probabilistic, and context-dependent.&lt;/p&gt;

&lt;p&gt;So instead of generating uniform data, I modeled:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recurring groups of friends&lt;/li&gt;
&lt;li&gt;VIP clusters&lt;/li&gt;
&lt;li&gt;occasional visitors&lt;/li&gt;
&lt;li&gt;users who introduce new people&lt;/li&gt;
&lt;li&gt;irregular attendance patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allowed the dataset to reflect realistic social dynamics.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. From relational model to graph model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next, I designed a &lt;strong&gt;Neo4j graph schema&lt;/strong&gt; derived from a data mart built on top of the original relational database.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nodes: &lt;code&gt;Customer&lt;/code&gt;, &lt;code&gt;Event&lt;/code&gt;, &lt;code&gt;Reservation&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Relationships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ATTENDED&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RESERVED_WITH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CONNECTED_TO&lt;/code&gt; (inferred social relationships)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This transformation is essentially an &lt;strong&gt;ETL process&lt;/strong&gt;, where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The relational database acts as the source of truth&lt;/li&gt;
&lt;li&gt;A curated data mart serves as an intermediate analytical layer&lt;/li&gt;
&lt;li&gt;Neo4j becomes the serving layer for graph-based queries&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;3. Applying a Medallion Architecture mindset&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To structure this properly, I followed a simplified &lt;strong&gt;Medallion Architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bronze layer&lt;/strong&gt;: raw transactional data (PostgreSQL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silver layer&lt;/strong&gt;: cleaned and structured data mart&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gold layer&lt;/strong&gt;: graph model in Neo4j optimized for analytics&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;4. Querying the graph&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the graph in place, I implemented queries using Cypher and graph algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Community detection (Louvain)&lt;/li&gt;
&lt;li&gt;Influence ranking (PageRank)&lt;/li&gt;
&lt;li&gt;Bridge detection (Betweenness Centrality)&lt;/li&gt;
&lt;li&gt;Recommendation systems (graph-based filtering)&lt;/li&gt;
&lt;li&gt;Path analysis (shortest path, reachability)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What would require complex recursive queries in SQL becomes simple and expressive in Neo4j.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This project changed my perspective.&lt;/p&gt;

&lt;p&gt;At first, I thought I was building software.&lt;br&gt;
In reality, I was modeling a business.&lt;/p&gt;

&lt;p&gt;The difference is critical:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software implements logic&lt;/li&gt;
&lt;li&gt;Data represents reality&lt;/li&gt;
&lt;li&gt;But &lt;strong&gt;business logic gives meaning to both&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neo4j didn’t just improve performance — it expanded what was &lt;em&gt;possible&lt;/em&gt; to ask.&lt;/p&gt;

&lt;p&gt;And that’s the real shift:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The value is not in the system itself, but in the questions it enables you to answer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The future is not in software.&lt;br&gt;
It’s in understanding the business through data.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>softwareengineering</category>
      <category>systemdesign</category>
      <category>dataengineering</category>
    </item>
    <item>
      <title>I don’t speak English, but I’m starting anyway 🚀</title>
      <dc:creator>Didier José Torres Parodis</dc:creator>
      <pubDate>Mon, 27 Apr 2026 01:59:47 +0000</pubDate>
      <link>https://dev.to/didierparody/i-dont-speak-english-but-im-starting-anyway-33i9</link>
      <guid>https://dev.to/didierparody/i-dont-speak-english-but-im-starting-anyway-33i9</guid>
      <description>&lt;p&gt;I don’t speak English fluently yet, but I’m trying anyway.&lt;/p&gt;

&lt;p&gt;This is my first post here, and to be honest, I have a translator open in another tab to help me fix my mistakes. 😅&lt;/p&gt;

&lt;p&gt;Still, I decided to start.&lt;/p&gt;

&lt;p&gt;I’m excited to begin this new stage of my journey as a developer, to learn, build, and share what I discover along the way. 💻&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is just the beginning.&lt;/strong&gt; ✨&lt;/p&gt;

&lt;p&gt;Thanks for reading 🙌&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>devjournal</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
