<?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: mohamed habeebulla</title>
    <description>The latest articles on DEV Community by mohamed habeebulla (@mohamed_habeebulla_41748b).</description>
    <link>https://dev.to/mohamed_habeebulla_41748b</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4121549%2Ff4d0c63c-3e05-4a8b-9e4f-aa7ee0d2e388.png</url>
      <title>DEV Community: mohamed habeebulla</title>
      <link>https://dev.to/mohamed_habeebulla_41748b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mohamed_habeebulla_41748b"/>
    <language>en</language>
    <item>
      <title>From Almost Zero AWS Experience to Deploying a Real-World Application</title>
      <dc:creator>mohamed habeebulla</dc:creator>
      <pubDate>Sat, 12 Sep 2026 00:18:11 +0000</pubDate>
      <link>https://dev.to/mohamed_habeebulla_41748b/from-almost-zero-aws-experience-to-deploying-a-real-world-application-4o9b</link>
      <guid>https://dev.to/mohamed_habeebulla_41748b/from-almost-zero-aws-experience-to-deploying-a-real-world-application-4o9b</guid>
      <description>&lt;p&gt;Building an application is one thing. Taking that application from a development environment and making it actually work in production is a completely different experience.&lt;/p&gt;

&lt;p&gt;I learned this while working on Meezo, a food delivery application that started from an idea I had. I invited one of my friends to work on the project with me, and together we developed the application. When it came to deployment and cloud infrastructure, however, I handled that part myself.&lt;/p&gt;

&lt;p&gt;At the beginning, I had almost no practical AWS experience.&lt;/p&gt;

&lt;p&gt;I didn’t have a step-by-step course that taught me everything I needed. Instead, I learned by actually trying to deploy the application, facing problems, researching them, and fixing them one by one. I used ChatGPT heavily as a learning assistant. Whenever I got stuck, I would take screenshots of the AWS console, errors, or configurations and use them to understand what was happening and what I needed to change.&lt;/p&gt;

&lt;p&gt;That process taught me much more than simply following a tutorial.&lt;/p&gt;

&lt;p&gt;Why I Chose AWS&lt;/p&gt;

&lt;p&gt;I chose AWS because I wanted to work with an industry-standard cloud platform and gain real-world experience with cloud infrastructure.&lt;/p&gt;

&lt;p&gt;For Meezo, reliability and the ability to scale were also important. A food delivery application can have very different traffic patterns depending on the number of users and orders, so I didn’t want to think only about getting the application running. I also wanted to understand how a system could be deployed and scaled properly.&lt;/p&gt;

&lt;p&gt;More importantly, I wanted to learn AWS by actually using it.&lt;/p&gt;

&lt;p&gt;My First Architecture: Docker, ECR, ECS and Fargate&lt;/p&gt;

&lt;p&gt;The first production deployment of the Meezo backend was built around containers.&lt;/p&gt;

&lt;p&gt;I created the Dockerfile myself and containerized the Node.js backend. The Docker image was then pushed to Amazon Elastic Container Registry (ECR).&lt;/p&gt;

&lt;p&gt;From there, I deployed the container using Amazon ECS with AWS Fargate.&lt;/p&gt;

&lt;p&gt;The basic flow looked like this:&lt;/p&gt;

&lt;p&gt;GitHub → Docker → Amazon ECR → Amazon ECS → AWS Fargate&lt;/p&gt;

&lt;p&gt;I also used an Application Load Balancer (ALB) in front of the ECS service. The application was connected to a custom domain and HTTPS was configured using AWS Certificate Manager.&lt;/p&gt;

&lt;p&gt;The PostgreSQL database was hosted separately using Supabase rather than inside AWS.&lt;/p&gt;

&lt;p&gt;This was my first time dealing with concepts such as containers, task definitions, load balancers, target groups, health checks, IAM permissions, networking and production configuration at this level.&lt;/p&gt;

&lt;p&gt;My First Real Production Problem&lt;/p&gt;

&lt;p&gt;One of the first problems I faced was something that looked simple but stopped the deployment from working correctly: the ECS health check was failing.&lt;/p&gt;

&lt;p&gt;At first, seeing an unhealthy task was confusing. The container was running, but the load balancer was not considering it healthy.&lt;/p&gt;

&lt;p&gt;After investigating the configuration, I found that the health-check path was incorrect.&lt;/p&gt;

&lt;p&gt;I corrected the health-check path in the ALB target group configuration.&lt;/p&gt;

&lt;p&gt;After that, the target changed from Unhealthy to Healthy, and the service started working as expected.&lt;/p&gt;

&lt;p&gt;It was a small configuration mistake, but it taught me an important lesson:&lt;/p&gt;

&lt;p&gt;A container being “running” does not necessarily mean that your application is healthy from the perspective of the infrastructure around it.&lt;/p&gt;

&lt;p&gt;This was one of the first moments where I started understanding how production systems differ from simply running an application on localhost.&lt;/p&gt;

&lt;p&gt;Learning About CI/CD&lt;/p&gt;

&lt;p&gt;I also wanted to avoid manually rebuilding and deploying the application every time I changed the code.&lt;/p&gt;

&lt;p&gt;So I implemented a GitHub Actions workflow.&lt;/p&gt;

&lt;p&gt;The deployment process became approximately:&lt;/p&gt;

&lt;p&gt;GitHub Push → Docker Build → ECR Login → Docker Image Push → Deployment&lt;/p&gt;

&lt;p&gt;This helped me understand the value of CI/CD in a real project.&lt;/p&gt;

&lt;p&gt;Instead of treating deployment as something I had to repeat manually, I started thinking about deployment as part of the software development workflow itself.&lt;/p&gt;

&lt;p&gt;It also forced me to understand IAM permissions, because the deployment process needed appropriate permissions to interact with AWS services.&lt;/p&gt;

&lt;p&gt;Security, Networking and Configuration&lt;/p&gt;

&lt;p&gt;Another area that took me a significant amount of time was networking.&lt;/p&gt;

&lt;p&gt;Security Groups, ports, application access, Nginx, domain configuration and HTTPS all had to work together.&lt;/p&gt;

&lt;p&gt;I had to understand questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which ports should be accessible?&lt;/li&gt;
&lt;li&gt;Which traffic should be allowed?&lt;/li&gt;
&lt;li&gt;How does the domain reach my application?&lt;/li&gt;
&lt;li&gt;How does HTTPS reach the server?&lt;/li&gt;
&lt;li&gt;How does the reverse proxy communicate with the Docker container?&lt;/li&gt;
&lt;li&gt;What permissions are actually required?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were concepts I had previously encountered mostly as theory.&lt;/p&gt;

&lt;p&gt;Deploying Meezo made them practical.&lt;/p&gt;

&lt;p&gt;From Fargate to EC2: Learning the Cost Side of Cloud&lt;/p&gt;

&lt;p&gt;Getting the application running was not the end of the story.&lt;/p&gt;

&lt;p&gt;After deployment, I started looking at the actual AWS costs using AWS Cost Explorer.&lt;/p&gt;

&lt;p&gt;The monthly cost was around $120, and the Application Load Balancer was one of the significant contributors I noticed.&lt;/p&gt;

&lt;p&gt;That made me realize something important:&lt;/p&gt;

&lt;p&gt;Cloud architecture is not only about technical performance. It is also about understanding cost.&lt;/p&gt;

&lt;p&gt;I started looking for a more cost-effective approach for the current stage of the project.&lt;/p&gt;

&lt;p&gt;Eventually, I moved the backend deployment from Fargate to an EC2-based setup.&lt;/p&gt;

&lt;p&gt;Instead of running the container through Fargate, I ran the Docker container directly on an EC2 instance.&lt;/p&gt;

&lt;p&gt;I kept the deployment automated with GitHub Actions, while using SSH when I needed direct access to the server.&lt;/p&gt;

&lt;p&gt;For the new setup, I also configured Nginx and a new domain with HTTPS.&lt;/p&gt;

&lt;p&gt;The cost reduction was not dramatic, but it was enough to teach me an important lesson: the best architecture depends not only on what is technically possible, but also on the scale, requirements and budget of the application.&lt;/p&gt;

&lt;p&gt;What I Learned From This Experience&lt;/p&gt;

&lt;p&gt;The biggest value of this project was not just getting Meezo online.&lt;/p&gt;

&lt;p&gt;I learned several things that I would probably have understood very differently if I had only studied them theoretically.&lt;/p&gt;

&lt;p&gt;I learned how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containerize a Node.js application using Docker&lt;/li&gt;
&lt;li&gt;Create and manage Docker images&lt;/li&gt;
&lt;li&gt;Push images to Amazon ECR&lt;/li&gt;
&lt;li&gt;Deploy containers using ECS and Fargate&lt;/li&gt;
&lt;li&gt;Configure an Application Load Balancer&lt;/li&gt;
&lt;li&gt;Work with health checks and target groups&lt;/li&gt;
&lt;li&gt;Configure IAM permissions and policies&lt;/li&gt;
&lt;li&gt;Set environment variables for production&lt;/li&gt;
&lt;li&gt;Set up CI/CD using GitHub Actions&lt;/li&gt;
&lt;li&gt;Monitor applications using CloudWatch&lt;/li&gt;
&lt;li&gt;Work with domains, HTTPS and Nginx&lt;/li&gt;
&lt;li&gt;Understand AWS networking and Security Groups&lt;/li&gt;
&lt;li&gt;Analyze cloud costs using AWS Cost Explorer&lt;/li&gt;
&lt;li&gt;Think about scalability and traffic&lt;/li&gt;
&lt;li&gt;Make architecture decisions based on both performance and cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there was another lesson that was even more important.&lt;/p&gt;

&lt;p&gt;You Don’t Need to Know Everything Before You Start&lt;/p&gt;

&lt;p&gt;When I started the deployment, I didn’t know all of these things.&lt;/p&gt;

&lt;p&gt;I learned them because I had a real problem to solve.&lt;/p&gt;

&lt;p&gt;When something didn’t work, I investigated it. When I didn’t understand an AWS configuration, I learned about it. When I received an error, I tried to understand why it happened instead of simply trying random fixes.&lt;/p&gt;

&lt;p&gt;I also used ChatGPT as a learning assistant throughout the process. When I encountered a confusing AWS console screen or an error, I would share a screenshot and ask for help understanding it.&lt;/p&gt;

&lt;p&gt;The important part was that I wasn’t just copying commands. I was gradually learning what each service and configuration was actually doing.&lt;/p&gt;

&lt;p&gt;From a Student Project to a Production Experience&lt;/p&gt;

&lt;p&gt;Meezo started with an idea.&lt;/p&gt;

&lt;p&gt;My friend and I worked together to turn that idea into an application. But deploying it gave me a completely different perspective on software development.&lt;/p&gt;

&lt;p&gt;Before this experience, concepts like Docker, load balancers, IAM, security groups, CI/CD and cloud infrastructure could easily feel like separate technologies to study.&lt;/p&gt;

&lt;p&gt;During deployment, I realized that they are connected pieces of one system.&lt;/p&gt;

&lt;p&gt;A small configuration mistake can stop a service from becoming healthy. A security rule can prevent an application from being reached. A load balancer can affect both architecture and cost. A deployment pipeline can save time but also requires correct permissions and configuration.&lt;/p&gt;

&lt;p&gt;That is what made this experience valuable for me.&lt;/p&gt;

&lt;p&gt;I didn’t learn AWS by memorizing services.&lt;/p&gt;

&lt;p&gt;I learned AWS by trying to make a real application work.&lt;/p&gt;

&lt;p&gt;And for me, that was the biggest lesson of the entire deployment journey.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
  </channel>
</rss>
