<?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: juweria mohamood</title>
    <description>The latest articles on Forem by juweria mohamood (@juweria_).</description>
    <link>https://forem.com/juweria_</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%2F3692188%2Fbdb1b6bf-0115-47d1-91aa-6b0560786f99.png</url>
      <title>Forem: juweria mohamood</title>
      <link>https://forem.com/juweria_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/juweria_"/>
    <language>en</language>
    <item>
      <title>What I Wish I Knew Before Deploying My First Backend Application.</title>
      <dc:creator>juweria mohamood</dc:creator>
      <pubDate>Sat, 10 Jan 2026 12:02:18 +0000</pubDate>
      <link>https://forem.com/juweria_/what-i-wish-i-knew-before-deploying-my-first-backend-application-e07</link>
      <guid>https://forem.com/juweria_/what-i-wish-i-knew-before-deploying-my-first-backend-application-e07</guid>
      <description>&lt;p&gt;When I wrote my first backend application, I thought the hard part was over once the API worked locally. The endpoints responded, tests passed, and everything felt done.&lt;/p&gt;

&lt;p&gt;Deployment proved me wrong.&lt;/p&gt;

&lt;p&gt;Getting an application to run reliably on a server was a completely different challenge—one that I underestimated at the beginning. Looking back, there are a few lessons I wish I had learned earlier that would have saved me a lot of time and frustration.&lt;/p&gt;

&lt;p&gt;This post is a reflection on those early mistakes and what I do differently now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment Is Not an Afterthought
&lt;/h3&gt;

&lt;p&gt;At first, I treated deployment as something to “figure out later.” I focused heavily on writing features and ignored how the application would actually run in production.&lt;/p&gt;

&lt;p&gt;What I learned quickly is that deployment decisions affect how you write code:&lt;/p&gt;

&lt;p&gt;How configuration is handled&lt;/p&gt;

&lt;p&gt;How errors are logged&lt;/p&gt;

&lt;p&gt;How services communicate&lt;/p&gt;

&lt;p&gt;How scalable the app can be&lt;/p&gt;

&lt;p&gt;Now, I think about deployment early—even when building small projects—because it shapes better engineering decisions from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Server Is Not Your Local Machine
&lt;/h3&gt;

&lt;p&gt;One of my biggest early mistakes was assuming the server environment would behave like my laptop.&lt;/p&gt;

&lt;p&gt;It doesn’t.&lt;/p&gt;

&lt;p&gt;On a server, you have to think about:&lt;/p&gt;

&lt;p&gt;Linux file permissions&lt;/p&gt;

&lt;p&gt;Open ports and firewalls&lt;/p&gt;

&lt;p&gt;Environment variables&lt;/p&gt;

&lt;p&gt;Running processes in the background&lt;/p&gt;

&lt;p&gt;The first time my app “worked locally but not on the server,” I realized how important it is to understand the environment your code runs in—not just the code itself.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardcoding Secrets Will Eventually Hurt You
&lt;/h3&gt;

&lt;p&gt;In my early projects, I didn’t give much thought to secrets. API keys and credentials lived in config files or environment-specific code.&lt;/p&gt;

&lt;p&gt;This is risky.&lt;/p&gt;

&lt;p&gt;Now, I make it a rule to:&lt;/p&gt;

&lt;p&gt;Use environment variables&lt;/p&gt;

&lt;p&gt;Never commit secrets&lt;/p&gt;

&lt;p&gt;Treat configuration as a first-class part of the application&lt;/p&gt;

&lt;p&gt;It’s a small habit that prevents big problems later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Logging Matters More Than You Think
&lt;/h3&gt;

&lt;p&gt;When something breaks in production, you don’t have a debugger attached.&lt;/p&gt;

&lt;p&gt;Early on, I had very little logging, which made debugging production issues painful. Today, I always make sure:&lt;/p&gt;

&lt;p&gt;Errors are logged clearly&lt;/p&gt;

&lt;p&gt;Logs are meaningful, not noisy&lt;/p&gt;

&lt;p&gt;I can understand what happened without guessing&lt;/p&gt;

&lt;p&gt;Good logging turns production issues from stressful mysteries into solvable problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Do Differently Now
&lt;/h3&gt;

&lt;p&gt;With more experience, my approach has changed:&lt;/p&gt;

&lt;p&gt;I keep deployment setups simple&lt;/p&gt;

&lt;p&gt;I document steps clearly&lt;/p&gt;

&lt;p&gt;I automate where possible&lt;/p&gt;

&lt;p&gt;I test deployments early, even for small apps&lt;/p&gt;

&lt;p&gt;Most importantly, I treat deployment as part of the development process—not a separate task.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;If you’re new to backend development, struggling with deployment is normal. Everyone goes through it.&lt;/p&gt;

&lt;p&gt;The good news is that each mistake teaches you something valuable. Over time, deployment stops feeling scary and starts feeling like just another engineering problem you know how to solve.&lt;/p&gt;

&lt;p&gt;In upcoming posts, I’ll share practical guides on deploying backend applications step by step, including FastAPI and cloud platforms like DigitalOcean.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>deployment</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
