<?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: Pietro</title>
    <description>The latest articles on Forem by Pietro (@pietro-swe).</description>
    <link>https://forem.com/pietro-swe</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%2F643102%2F0a407dfe-0f93-4ab4-b86c-f4464640de35.jpeg</url>
      <title>Forem: Pietro</title>
      <link>https://forem.com/pietro-swe</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pietro-swe"/>
    <language>en</language>
    <item>
      <title>Doing Science: What I learned while building RouteBastion as a Master’s Thesis project</title>
      <dc:creator>Pietro</dc:creator>
      <pubDate>Tue, 17 Jun 2025 01:42:47 +0000</pubDate>
      <link>https://forem.com/pietro-swe/doing-science-what-i-learned-while-building-routebastion-as-a-masters-thesis-project-279d</link>
      <guid>https://forem.com/pietro-swe/doing-science-what-i-learned-while-building-routebastion-as-a-masters-thesis-project-279d</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;📝 Note: I’m not an academic guru, just a developer navigating the world of research for the first time. Everything in this post comes from what I observed and learned the hard way. Use it as a perspective, not a prescription.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I decided to build RouteBastion (my SaaS platform for unified VRP solutions) as my Master’s Thesis, I thought the hard part would be the code, and boy, I was wrong.&lt;/p&gt;

&lt;p&gt;Entering the world of Academic Research and R&amp;amp;D while coming from a full-time software engineering background was a whole new game. Here's what I learned and what I wish someone had told me earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Searching for Related Work is both easy and hard
&lt;/h2&gt;

&lt;p&gt;Let me break it down for you like I did for my friend Mark:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes it’s easy: you find papers solving exactly your problem, cite them, highlight your difference.&lt;/li&gt;
&lt;li&gt;Sometimes it’s tricky: you find papers solving similar problems, still cite them, but explain the nuances.&lt;/li&gt;
&lt;li&gt;Sometimes it’s overwhelming: there are too many directions to explore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I learned to think of related works in terms of age and citation count:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Paper Type&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📅 Very recent (&amp;lt;5 years), no citations&lt;/td&gt;
&lt;td&gt;Cite with caution, it's new, might be unstable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📅 Very recent, with citations&lt;/td&gt;
&lt;td&gt;Cite, it's gaining traction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📅 Older (&amp;gt;5 years), with citations&lt;/td&gt;
&lt;td&gt;Cite, it's validated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📅 Older, no citations&lt;/td&gt;
&lt;td&gt;Avoid, there's probably a reason it’s ignored&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Disclaimer: This table isn't a strict rule or academic standard, it's based on patterns I observed during my research process. Your advisor or field might have different expectations, and exceptions always exist. Use it as a starting point, not a rulebook.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And here’s a tip I picked up from a professor: the quality of your research often depends on the quality of the papers you use as foundation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything needs Scientific Backing
&lt;/h2&gt;

&lt;p&gt;When you're building a product in the real world, you're used to justifying decisions with experience, benchmarks, or “it works.” That doesn't fly in academia.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Want to use gRPC? You better explain why with references or comparisons.&lt;/li&gt;
&lt;li&gt;Implemented a caching strategy? Show benchmarks or cite existing work.&lt;/li&gt;
&lt;li&gt;Picked Go instead of C#? You need more than a GitHub star count, you need research to back it up.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;No evidence = no credibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if no one has done the benchmark you need? Congratulations, now you have to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nothing can be implicit
&lt;/h2&gt;

&lt;p&gt;One of the biggest mistakes I made in my first paper was assuming that the novelty of my work would be understood by the reader, just because I wrote an ok related work section.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wrong.&lt;/strong&gt;&lt;br&gt;
In academia, everything must be explicit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If your system is novel, say it.&lt;/li&gt;
&lt;li&gt;If no one has combined technologies X, Y, and Z in this way before, say it.&lt;/li&gt;
&lt;li&gt;Don’t expect the reader to “get it”, tell them.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;TL;DR: Assume nothing. Explain everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Lessons from my first paper
&lt;/h2&gt;

&lt;p&gt;Some lessons hit hard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never leave writing to the last minute, &lt;strong&gt;ever&lt;/strong&gt;: Writing is the research, and it takes way longer than you expect.&lt;/li&gt;
&lt;li&gt;Professors are your best search engine: They know how to navigate Scopus, IEEE, ACM, and Google Scholar like pros!&lt;/li&gt;
&lt;li&gt;Don’t write “we use PostgreSQL”, write “we use a relational database”: Abstract your tech stack, Academia wants generalization, not product endorsement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;My journey building RouteBastion has taught me that software engineering and academic research speak different languages, and that translating between them is a skill in itself.&lt;/p&gt;

&lt;p&gt;But once you learn the rules, academia becomes a powerful tool to validate your work, communicate it clearly, and make a real contribution, not just to users, but to knowledge itself.&lt;/p&gt;

&lt;p&gt;If you're a developer considering a Master's or PhD, I say: do it. But bring citations.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>softwareengineering</category>
      <category>writing</category>
    </item>
    <item>
      <title>I applied DDD and realized my problem wasn’t the Domain</title>
      <dc:creator>Pietro</dc:creator>
      <pubDate>Fri, 13 Jun 2025 00:13:46 +0000</pubDate>
      <link>https://forem.com/pietro-swe/i-applied-ddd-and-realized-my-problem-wasnt-the-domain-16a1</link>
      <guid>https://forem.com/pietro-swe/i-applied-ddd-and-realized-my-problem-wasnt-the-domain-16a1</guid>
      <description>&lt;p&gt;When I started building &lt;strong&gt;RouteBastion&lt;/strong&gt;, a Broker to unify APIs for solving the Vehicle Routing Problem (VRP), I was determined to design it the "right way". Clean code, separation of concerns, rich domain models... Everything! Naturally, I turned to &lt;strong&gt;Domain-Driven Design (DDD)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I went deep into DDD: Bounded Contexts, Aggregates, Entities, Value Objects, Ubiquitous language... One can say I was cooking by the (blue) book.&lt;/p&gt;

&lt;p&gt;I modeled customers, API keys, vehicles, and even constraints as domain objects. It was elegant, well, at least on paper.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Complexity Wasn’t in the Domain
&lt;/h2&gt;

&lt;p&gt;As the days passed by and I refactored parts of the code, I realized something important: &lt;strong&gt;my real complexity wasn’t in the domain, but it was in way I interacted with Cloud Providers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Being a Broker of APIs means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Massive requests can eventually come through;&lt;/li&gt;
&lt;li&gt;Dealing with quotas and rate limits;&lt;/li&gt;
&lt;li&gt;Caching strategies, concurrency, and task queues;&lt;/li&gt;
&lt;li&gt;Periodically checking statuses on the external APIs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The domain part (the "business logic" of who a customer is, or what a vehicle does) is stable, simple, and predictable. What isn’t simple is the Cloud selection algorithm, tuning performance of my database, and designing scalable queue-based execution for solving hundreds of routes in parallel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DDD shines when business rules are complex and volatile.&lt;/strong&gt; That’s not the case with RouteBastion. My complexity was mostly &lt;em&gt;technical&lt;/em&gt;, not &lt;em&gt;business-oriented&lt;/em&gt;. That doesn’t mean DDD was useless, quite the opposite. Here’s how I’ve reframed things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I still use DDD principles to &lt;strong&gt;structure my codebase&lt;/strong&gt; and isolate concerns;&lt;/li&gt;
&lt;li&gt;My &lt;strong&gt;core domain&lt;/strong&gt; is now focused on &lt;em&gt;orchestration&lt;/em&gt; of routing solutions (namely external APIs);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance, and concurrency&lt;/strong&gt; are now treated as first-class citizens in my architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That realization led me to &lt;strong&gt;offload anything that wasn’t core to my problem space&lt;/strong&gt;. For example, I used &lt;strong&gt;Kong Gateway&lt;/strong&gt; for the first time to handle things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rate limiting;&lt;/li&gt;
&lt;li&gt;Authentication;&lt;/li&gt;
&lt;li&gt;Routing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were concerns that didn’t belong in my domain layer, they were infrastructure responsibilities. Kong helped me &lt;strong&gt;focus on the actual routing orchestration and performance tuning&lt;/strong&gt;, while still ensuring production-grade API exposure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advice for Devs Exploring DDD
&lt;/h2&gt;

&lt;p&gt;If you're on a DDD journey and your domain feels "too simple", ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where does your system’s complexity &lt;em&gt;really&lt;/em&gt; come from?&lt;/li&gt;
&lt;li&gt;Are you solving a business problem, a technical challenge, or both?&lt;/li&gt;
&lt;li&gt;Could your “domain layer” be more about orchestrating processes than modeling behavior?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DDD is a great tool, but like any tool, its value depends on when and how you use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thoughts
&lt;/h2&gt;

&lt;p&gt;Building RouteBastion has taught me to appreciate the separation of &lt;em&gt;domain&lt;/em&gt; and &lt;em&gt;infrastructure&lt;/em&gt;, but also to recognize when the “domain” isn’t the main actor. Sometimes, you're not building a business system, you're building a &lt;strong&gt;high-performance system that &lt;em&gt;serves&lt;/em&gt; a business system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that’s perfectly fine. Now, I'm slowly refactoring parts of my system to gain more traction for future development.&lt;/p&gt;

&lt;p&gt;If you’ve ever wrestled with something related, I’d love to hear your story too.&lt;/p&gt;

&lt;p&gt;🤘 Thanks for reading, follow me if you're into DDD, architecture, and solving hard problems with clean code.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
