<?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: Naif Amoodi</title>
    <description>The latest articles on DEV Community by Naif Amoodi (@naifamoodi).</description>
    <link>https://dev.to/naifamoodi</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%2F3890416%2F394058f2-3160-4747-9df8-0f7b5e641b5d.jpg</url>
      <title>DEV Community: Naif Amoodi</title>
      <link>https://dev.to/naifamoodi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naifamoodi"/>
    <language>en</language>
    <item>
      <title>When a Vendor API Breaks, the Project Shouldn't</title>
      <dc:creator>Naif Amoodi</dc:creator>
      <pubDate>Thu, 07 May 2026 13:22:30 +0000</pubDate>
      <link>https://dev.to/naifamoodi/when-a-vendor-api-breaks-the-project-shouldnt-40fe</link>
      <guid>https://dev.to/naifamoodi/when-a-vendor-api-breaks-the-project-shouldnt-40fe</guid>
      <description>&lt;p&gt;One thing I've seen more than once in integration work is this: the vendor API becomes the problem.&lt;/p&gt;

&lt;p&gt;At the start, it always looks straightforward. There's an API, the docs exist, and the plan seems clear enough.&lt;/p&gt;

&lt;p&gt;Then the real work starts.&lt;/p&gt;

&lt;p&gt;A field comes back in a different format than expected. An endpoint works in one environment and then acts differently in another. Something that looked fine in testing starts failing once real data or real usage hits it. We have also had cases where the docs looked fine, but the actual response shape coming back from the API was not something we could safely trust.&lt;/p&gt;

&lt;p&gt;Or the API works, but not well enough to build the rest of the project around it with any confidence.&lt;/p&gt;

&lt;p&gt;That is usually the point where you have to make a choice.&lt;/p&gt;

&lt;p&gt;You can wait for the vendor to sort it out, which usually means your timeline starts depending on theirs.&lt;/p&gt;

&lt;p&gt;Or you can accept that the API is not stable enough and design around that.&lt;/p&gt;

&lt;p&gt;Most of the time, I would rather do the second.&lt;/p&gt;

&lt;p&gt;If an API is shaky, I do not want the rest of the system tightly tied to it. I would rather isolate it and reduce the damage. Sometimes that means putting a small layer in front of it. Sometimes it means normalizing the response before the rest of the system touches it. Sometimes it means retries, queues, or some temporary workaround so one bad dependency does not slow everything else down.&lt;/p&gt;

&lt;p&gt;Nothing fancy. Just enough to stop one unreliable piece from controlling the whole project.&lt;/p&gt;

&lt;p&gt;I think this is where a lot of teams lose time. Everyone keeps waiting for the vendor's "real fix," even when it is obvious that waiting is just blocking the rest of the work.&lt;/p&gt;

&lt;p&gt;I would rather keep things moving and clean it up later if the vendor side improves.&lt;/p&gt;

&lt;p&gt;For me, the point is simple: if a vendor API breaks, the project should not break with it.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>integration</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What an Old Oracle Database Taught Me About Not Trusting Assumptions</title>
      <dc:creator>Naif Amoodi</dc:creator>
      <pubDate>Thu, 23 Apr 2026 09:27:57 +0000</pubDate>
      <link>https://dev.to/naifamoodi/what-an-old-oracle-database-taught-me-about-not-trusting-assumptions-bcb</link>
      <guid>https://dev.to/naifamoodi/what-an-old-oracle-database-taught-me-about-not-trusting-assumptions-bcb</guid>
      <description>&lt;p&gt;We still work with a client whose entire operation revolves around an old Oracle database, so a lot of our work ends up depending on how that database behaves.&lt;/p&gt;

&lt;p&gt;And honestly, that is where a lot of the pain starts.&lt;/p&gt;

&lt;p&gt;One thing I have run into there is that not every table has a clean single primary key. In some cases, a row is really identified by a combination of several columns. That is manageable, but it becomes a headache when you are syncing data, updating records, or trying to explain row identity to another system that expects something simpler.&lt;/p&gt;

&lt;p&gt;Another issue is that the database is old enough that I have learned not to assume consistency unless I have verified it myself.&lt;/p&gt;

&lt;p&gt;A good example is dates. We ran into cases where a date would come back in one format from the CLI, but in a different format when the same data was accessed through an API layer. That is the kind of thing that can quietly create bugs if you trust the first result you see and move on.&lt;/p&gt;

&lt;p&gt;This is why I try to be careful with old systems. The problem is not always that they are broken. Sometimes the problem is that they behave just differently enough in different environments to cause trouble later.&lt;/p&gt;

&lt;p&gt;So my approach is usually to normalize early, validate what I can, and avoid building logic on top of assumptions that came from one test in one environment.&lt;/p&gt;

&lt;p&gt;My main takeaway is simple: when your work depends on an old database, do not trust anything important until you have seen how it behaves in the real flow.&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>legacy</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
