Hi, I'm
a S|
👋

Real Problems, Creative Solutions: I’m Here to Make Tech Work Harder So We Don’t Have To.

My Skills

Versatile Full Stack Developer Committed to Mastering Diverse Tech Stacks

  • JavaScript

  • python

  • reactjs

  • nodejs

  • java

  • html-5

  • css3

  • npm

  • sql-database

  • aws

  • firebase

  • git

  • docker

  • Figma

  • Terraform

✅ Architect highly scalable, robust full-stack applications optimized for performance and maintainability.

✅ Academically trained with a forward-thinking approach to software engineering, actively applying theoretical knowledge to practical, real-world problems.

✅ Actively looking for full-time opportunities in Software Development.

Proficiency

AWS Cloud Services

Terraform

MERN

Python

ReactJS

Java

Agile Methodologies

Software Testing

Education

Dalhousie University
Dalhousie University
Master of Applied Computer Science

September 2022 - Current

Mastering the craft in progress...

  • Built projects using React, Node, MongoDB, AWS, ...
  • Conducted research on Tangible User Interfaces
Charotar University of Science and Technology
Charotar University of Science and Technology
Bachelor of Technology in Information Technology

July 2015 - April 2019

Learned core concepts of Computer Science and Information Technology

  • Took courses in Data Structures, Algorithms, DBMS, Operating Systems, Java, Computer Networks
  • Built projects using C, C++, Java, Python, HTML, CSS, JavaScript, MongoDB
  • Participated in various Hackathons and Coding Competitions

Professional Experience

OPAS Mobile
OPAS Mobile
Software Developer Co-op
September 2023 – December 2023

Co-op role focused on DevOps methodologies, cloud solutions, and containerization

  • 🚀 Architected nightly server with Terraform, achieving a 150% boost in deployment frequency and 90% reduction in downtime.
  • 🔧 Configured Kiwi TCMS on AWS Fargate, overcoming documentation gaps through independent problem-solving.
  • 🐳 Containerized OPAS Mobile’s React and Node.js applications, enhancing deployment stability and consistency.
  • 📚 Contributed to the company’s knowledge base through technical documentation, architecture diagrams and process walkthroughs, improving overall project clarity.
Crest Data Systems
Crest Data Systems
Software Engineer
May 2019 – July 2022

Software Engineer specializing in full-stack development and system architecture

  • 🚀 Developed high-performance APIs in Python and Node.js with PostgreSQL, serving over 200,000 daily users.
  • 🎨 Created interactive dashboards using JavaScript, ReactJS, and Bootstrap for high-profile customer-facing apps.
  • 🔗 Integrated third-party APIs into Splunk apps using Python, increasing usability by 15%.
  • 🔧 Implemented Jenkins-driven CI/CD pipelines for automated testing and deployment.
  • 💡 Spearheaded the migration and testing of legacy Splunk apps from Python 2 to 3, ensuring future compatibility.
  • 🛠️ Developed a Python automation script for JIRA ticket grooming, saving 15 hours per week.
  • 🤝 Utilized JIRA and Confluence for task tracking and documentation, enhancing team efficiency and agile collaboration.

Open Source Projects

QuizCraft

A serverless trivia game app

JavaScript

0

1

1.1 MB

Reboundr

An alternative job search application

JavaScript

0

1

739 KB

minimalist-stream

A twitch-like streaming app built using React with core features only.

JavaScript

0

2

384 KB

Triplify

Java

0

1

742 KB

Hackerrank-Problem_solving

Python

0

0

26 KB

videolivery-hooked

Videolivery clone but, refactored with hooks.

JavaScript

0

0

190 KB

Projects

Some projects that I built/collaborated on to enhance my skills and learn new technologies

MockPI
MockPI

A Personal Interview Platform startup.

QuizCraft
QuizCraft

An interactive online trivia game that facilitates real-time competition, tracks player progress, and enhances user engagement through a scalable multi-cloud serverless platform.

Rebounder
Rebounder

An AI Powered Mock Interview Platform to enhance interview skills and boost success rates in job and college admission interviews.

Achievements And Certifications 🏆

Achievements, Certifications, Award Letters and Some Cool Stuff that I have done !

AWS Badge
AWS Cloud Practitioner

I'm a certified AWS Cloud Practitioner

Blogs

With Love for Developing cool stuff, I love to write and share with others what I have learnt.

A Guide to Setting Up AWS EC2 and RDS Instances Inside a Secure VPC

Let’s take a closer look at the rules we’ve set up for our EC2 and RDS instances. Think of security groups as the bouncers of your AWS party. They decide who gets in and who gets a hand stamp to come back later. They keep things orderly and ensure that only the right connections are being made.. Starting with the EC2 instance, we’ve got some strict rules in place. Firstly, we allow SSH access only from “My IP”. It’s like saying, “Hey, Mr. Hacker, you can’t just waltz into our party uninvited. This is an exclusive event reserved for trusted folks like me.” Secondly, we’ve opened up HTTP connections from anywhere because our EC2 instance is hosting a public-facing service. We want people to be able to access it, but with great power comes great responsibility, so we need to keep an eye on this. Lastly, we’ve given the EC2 instance permission to access our RDS cluster in the private subnet of our VPC.. Now let’s move on to our RDS instance. We’re not here to let just anyone have a taste of our database, so we’ve set up some fortress-level security. Inbound connections are limited to only the security group associated with our EC2 instance. It’s like having a secret handshake that only a select few know. No direct internet access for you, Mr. Random Stranger. And when it comes to outbound connections, we’ve locked it down tight. The RDS instance has no direct internet connectivity. It’s like going off the grid and leaving no trace. Stealth mode activated!. But wait, my fellow cloud enthusiasts, we must remember the sacred code of security group configuration: be thorough, be vigilant, and never, ever underestimate the power of a misconfiguration. Review and validate those rules like you would double-check your sunscreen application at the beach. Stay safe, my friends!. Now that we’ve covered the basics of securing our architecture, let’s dive into VPCs. Picture it as building your own private little universe within the vast expanse of AWS. It’s your slice of the cloud, your own personal galaxy far, far away.. To create our VPC, we divided it into four subnets spread across two Availability Zones (AZs). It’s like carving up the land into different neighborhoods, where some are more public and others are hidden away like secret gardens.. Each subnet gets its own unique block of IP addresses, known as a CIDR block. It’s like giving each neighborhood its own zip code. In our VPC, we’ve got two public subnets strutting their stuff with addresses like 10.0.1.0 and 10.0.3.0. On the other hand, we’ve got two private subnets minding their own business with addresses like 10.0.2.0 and 10.0.4.0. It’s like having VIP sections in the club versus private cabanas by the pool.. Now, let’s talk routing. We created not one, not two, but three route tables to keep the traffic flowing smoothly within our VPC. The public route table is like the master of ceremonies, allowing traffic to flow to and from the internet for our public subnets. The private route tables are more like the backstage managers, keeping things running smoothly between our private subnets without divulging their secrets to the outside world.. By configuring these route tables with the precision of a tightrope walker, we ensure that our public subnets have internet access while our private subnets selectively rely on a NAT gateway for their outbound internet connection. It’s like having a secret agent who discreetly handles all your internet needs without exposing the true location of your private services. Talk about James Bond-level secrecy!. In this section, we’ll delve into the process of setting up a public-facing service in our VPC. Picture it as creating a visible storefront in a bustling city, just without the noisy street vendors and crowded sidewalks.. To access the EC2 instance from your Windows machine, we’ve got you covered. AWS you with a special key pair while creating an instance that grants you exclusive access. You’ll have the confidence of a VIP, knowing that your commutes to the EC2 instance are secure. Special formats, like PPK for WinSCP and PPM for the OpenSSH terminal, are to be used, depending on your preferred environment.. But don’t forget, setting up a public-facing service is not just about flashy features and fancy keys. It’s crucial to implement proper security measures. Configure those security group rules responsibly, choose secure authentication mechanisms, and stay up-to-date with software updates. It’s the recipe for a successful and secure cloud architecture.. This is where our AWS RDS instance resides, ready to serve in its own private subnet.. Our RDS database uses MySQL/Aurora DB Engine.. In a production environment, consider adding additional layers of protection, such as enabling encryption at rest and in transit. Think of it as adding dragon fire to the already formidable fortress. Your data deserves nothing less.. In our case, we harnessed the power of Node.js and the ‘mysql’ module to interact with our RDS instance programmatically. However, due to the secure communication established within our VPC, we didn’t need the AWS SDK for authentication purposes. Think of it as having a VIP pass that bypasses the long line at the entrance.. AWS libraries and SDKs are like the Swiss Army knives of the cloud. They provide convenient abstractions and methods to interact with AWS services and perform operations efficiently without breaking a sweat. So, my fellow developers, don’t be afraid to dive into the vast ocean of AWS libraries and discover the tools that perfectly mesh with your programming language of choice. These libraries will become your trusty companions as you navigate the realms of AWS and gain impressive hands-on experience.. Remember, unlocking the full potential of the cloud requires embracing the power of automation and exploring the magical realm of AWS libraries. Put on your coding cape, my friends, and let the cloud adventure begin!.

Troubleshooting Microservices Setup with Docker: Lessons Learned

Setting up a microservices architecture with Docker can bring many benefits, but it can also introduce certain challenges. In this article, I’ll share my experience and the pitfalls I encountered while configuring multiple microservices using Docker. I’ll dive into the issues I faced during the setup and explain how I identified and resolved them.. When working with Docker and setting up multiple microservices, several challenges may arise. These can include container networking, data sharing, and coordinating services. I encountered similar challenges during my project, which required careful analysis and troubleshooting to find the best solutions.. Setting up microservices with Docker can be complex, and there are several pitfalls to be aware of during the process. By understanding these pitfalls, you can navigate potential challenges more effectively. Here are some common pitfalls to watch out for:. 1. Improper Networking Configuration. One common pitfall involves improperly configuring the networking between microservices within Docker. It’s essential to ensure that each microservice has a unique network identifier, such as a hostname or IP address, to allow seamless communication. Neglecting proper networking configuration can lead to connection failures and unexpected behavior.. 2. Data Sharing and Persistence. When dealing with data in microservices architecture, it’s crucial to define a strategy for sharing and persisting data. Avoid the temptation to tightly couple microservices by sharing databases or file systems between them. Instead, opt for decoupled data management approaches, such as utilizing APIs or event-driven architectures, to maintain loose coupling and promote scalability.. 3. Incorrect Dependency Management. Managing dependencies in a microservices environment can be challenging, especially when using different programming languages or frameworks. Ensure that each microservice has its own separate dependencies defined accurately. Avoid relying on global dependencies or mixing incompatible versions, as this can lead to conflicts and runtime errors.. 4. Lack of Service Monitoring and Observability. Failing to implement proper monitoring and observability can hinder the identification and resolution of issues in a microservices setup. It’s crucial to have comprehensive logging, monitoring, and distributed tracing mechanisms in place. Embrace tools like Prometheus, Grafana, or ELK stack to gain insights into the runtime behavior, performance, and potential bottlenecks of individual microservices.. 5. Neglecting Container Size and Performance Optimization. Containers should be lean and optimized to ensure efficient resource utilization. Neglecting container size and performance optimization can lead to increased resource consumption, slower deployments, and higher costs. Pay attention to optimizing images, reducing unnecessary dependencies, and ensuring proper container resource limits to achieve optimal performance and scalability.. 6. Insufficient Testing and Continuous Integration. Microservices architecture often involves intricate interactions between multiple services. Failing to implement comprehensive testing, including unit tests, integration tests, and end-to-end tests, can lead to unanticipated issues in production. Establish a strong continuous integration and deployment (CI/CD) pipeline to automate testing and guarantee a smooth release process.. 7. Scaling and Orchestrating Microservices. Scaling microservices is essential for handling increased loads and ensuring high availability. However, scaling individual microservices independently can be complex. Consider employing container orchestration tools like Kubernetes or Docker Swarm to simplify the scaling process, automate service discovery, and manage the lifecycle of your microservices effectively..

Case Study: Enhance the experience of working from home.

Let’s dive right in!. This is the first and most important stage of the process as this is where we converse with the users and identify their problems through a series of questions.. Though different, the users had similarities in their stories which I noticed after interviewing 3 users. I’ll discuss them in the next stage.. I sorted the problems into the following categories:. Then I created 8 problem statements from the users’ stories.. Now that we have defined problem statements, it is time to put on our creative hats and form ideas to solve the problems defined in this stage. I was excited about this stage the most. I had a lot of ideas flowing through my head but, most of them unreal or impractical. I used the crazy 8 technique (8 ideas in 8 min for each problem) and noted down the ones which were viable.. Out of all these, I had to choose the top 3 ideas:. I chose Idea #1 to progress to the next stage of prototyping.. Let's get a brief of what we’ve done up till now.. I sketched out my idea onto a piece of paper and it looked something like this:. This recliner chair will have the following features:. The chair will have adjustable leg rest and recliner features with lumbar support (to support the spinal cord and prevent health issues) that will give its user maximum comfort while working, studying, entertainment, or just chilling.. After this stage, we need to immediately test it and iterate to eliminate any preliminary issues that may render the prototype unuseful.. Time to test our prototype by taking it back to the users.. I immediately made a few changes to my design to fix the issues that’d outright render my design useless.. After revising, the users were satisfied enough.. From the feedback that my users gave, I figured out that the scope mentioned above would improve my prototype but the changes weren’t necessary..

Reach Out to me!

Discuss a project or just want to say hi? My Inbox is open for all.

"CS | MACS @Dalhousie University | SWE @ OPAS Mobile"

Canada
Open for opportunities: Yes
Naqeebali Shamsi