My 15-Week Internship
Journey in Software
Development
This report outlines my transformative 15-week internship at a healthcare
technology company. Starting with beginner-level skills, I gained hands-on
experience in real-time software development, contributing to a paperless
IPD system that manages hospital records digitally. My role involved
backend and full-stack development, working with tools like GitHub, Linux,
Django, and ReactJS.
Through learning by doing, I enhanced my technical skills and collaborated
with a professional team using Agile practices. This internship deepened my
understanding of software product development, testing, deployment, and
maintenance in real-world environments.
by Niranjan Shetty
Mastering Git and
GitHub for Version
Control
At the start of my internship, I learned Git and GitHub from scratch. Git is a
distributed version control system that tracks code changes and enables
collaboration through branches and merges. GitHub hosts repositories
remotely, allowing teams to synchronize and review code.
I practiced cloning repositories, creating feature branches, committing
changes, and raising pull requests. Understanding branches and merging
helped maintain a stable main branch while developing features in parallel.
Key Git Commands
git clone, git status, git add, git commit, git push, git pull, git branch,
git checkout, git merge
Benefits Experienced
Effective collaboration, version tracking, and code management in a
professional environment.
Deep Dive into Python Programming
Python was the primary language used during my internship. I applied core concepts like Object-Oriented Programming, including
encapsulation, inheritance, abstraction, and polymorphism, to structure the backend using Django.
I also learned advanced topics such as decorators for modifying function behavior, byte objects for handling binary data, buffer
and I/O management for file operations, and robust error handling with try-except blocks. Learning by solving real issues helped
me grasp these concepts deeply.
Core Python Topics
Functions and Classes
OOP Principles
Decorators
Byte Objects and Buffers
Try-Except Error Handling
Working with Django Framework
Django was the backend framework used for rapid development and clean design. I worked with views, models, the admin panel,
and migrations to manage the database and application logic.
I also handled background tasks using Django signals and Celery, and participated in migrating frontend components from Django
templates to ReactJS, gaining insight into API-first architecture and frontend-backend separation.
Key Django Components Frontend Migration
Views (Function and Class-based) Converted Digital Summary feature from Django templates to
Models and ORM ReactJS, connecting frontend components to backend APIs.
Admin Interface
Migrations
Signals and Background Tasks
Managing Data with
PostgreSQL
PostgreSQL was the primary database system used to store patient and
application data. I learned to export live databases using pg_dump and
import dump files locally to test features with real data.
Most interactions were through Django's ORM, allowing me to write Python
queries instead of raw SQL. I also learned query optimization and debugging
database issues to ensure efficient data access.
Task Description
Exporting Dump File Used pg_dump to copy
production database
Importing Dump File Loaded .sql file into local
PostgreSQL
Connecting with Django Mapped models to tables via
ORM
Query Optimization Used filters and indexes
Debugging DB Issues Fixed issues with SQL and
migrations
Deployment with
Gunicorn and Handling
Errors
Gunicorn served as the WSGI HTTP server bridging Django and web servers
like Nginx. I learned to deploy the backend using Gunicorn, Nginx, and
Supervisor on a Linux server.
During deployment, I faced a 504 Gateway Timeout error caused by long-
running tasks like digital summary generation. I resolved this by increasing
Gunicorn's timeout, optimizing tasks with Celery, and managing server
processes effectively.
Key Learnings
WSGI server role, timeout configuration, error debugging, and
production readiness.
Deployment Setup
Gunicorn, Nginx reverse proxy, Supervisor, Ubuntu/Linux server.
Optimizing Performance with Process
Management and Celery
I encountered performance bottlenecks when processing many patient summaries simultaneously, leading to high CPU and RAM
usage. Understanding process vs. thread, I used Linux tools like top and ps to monitor resources.
To optimize, we implemented asynchronous task execution with Celery and Redis, limiting concurrent tasks and using batch
processing. This improved server stability and performance under load.
Process Management Tools Celery & Redis Task Queue
top, htop for monitoring Handled background tasks asynchronously to prevent timeouts
ps aux for process details and improve scalability.
kill commands to terminate processes
free -h and df -h for memory and disk checks
Front-End Migration and
AI Integration
I contributed to migrating the Digital Summary feature from Django
templates to ReactJS with TypeScript, creating reusable components and
integrating APIs for dynamic data rendering. This enhanced UI
responsiveness and modularity.
Additionally, I integrated Google's Gemini API to automate digital summary
generation using AI, handling authentication, prompt formation, and
response parsing. This reduced manual effort and ensured consistent
patient summaries.
ReactJS Migration Gemini API Integration
Component-based UI, hooks, API Automated AI-powered summary
integration, TypeScript usage. generation with Google Cloud and
Python requests.