Back to Portfolio
Career

The Internship That Changed Everything

How my 6-month internship at ICEICO Technologies taught me more than 4 years of college. Real projects, real deadlines, and real growth.

Suhas Dhawale
December 5, 2024
7 min read
1.8k views
The Internship That Changed Everything
7 min read1.8k views


The Internship That Changed Everything: 6 Months That Shaped My Career

This is the story of how a 6-month internship taught me more about software development than 3 years of college combined.

The Application: Shooting My Shot

It was December 2024, and I was scrolling through LinkedIn when I saw a post from ICEICO Technologies looking for web development interns. Most of my classmates were applying to big tech companies for summer internships, but something about this smaller company caught my attention.

Why ICEICO Appealed to Me:
- They were working on real client projects
- Small team meant more responsibility
- Focus on web development (my interest area)
- Based in Nagpur (close to home)

My Application Strategy:
Instead of sending a generic resume, I did something different. I built a simple website showcasing three projects and wrote a personalized email explaining why I wanted to work specifically with them.





Suhas Dhawale - Aspiring Web Developer



Hi ICEICO Team! 👋


I'm Suhas, a 3rd-year CSE student who's passionate about web development.
Here are three projects I've built to show my skills:




Personal Portfolio Website


A responsive portfolio built from scratch


Tech: HTML, CSS, JavaScript






The Email I Sent:
> Subject: Web Development Intern Application - Suhas Dhawale
>
> Dear ICEICO Team,
>
> I've been following your work on healthcare and e-commerce solutions, and I'm impressed by your focus on creating practical, user-friendly applications.
>
> As a 3rd-year CSE student, I've been building web applications for the past year. Instead of just sending my resume, I've created a simple website showcasing my work: [portfolio-link]
>
> I'm particularly excited about the opportunity to work on real client projects and learn from experienced developers. I'm available for a 6-month internship starting January 2025.
>
> Looking forward to hearing from you!
>
> Best regards,
> Suhas Dhawale

The Response:
Three days later, I got a call for an interview. The HR person mentioned that my personalized approach and the simple portfolio website stood out among 200+ applications.

The Interview: More Conversation Than Interrogation

The interview was with the technical lead and the founder. Instead of typical coding questions, they asked about my projects and thought process.

Questions They Asked:
1. "Walk us through your portfolio website. What challenges did you face?"
2. "How would you approach building an e-commerce website?"
3. "What's the difference between frontend and backend development?"
4. "Why do you want to work with a smaller company instead of a big tech firm?"

My Honest Answers:
1. I explained the responsive design challenges and how I solved them
2. I broke down e-commerce into user authentication, product catalog, cart, and payments
3. I gave practical examples from my projects
4. I said I wanted hands-on experience with real projects, not just assigned tasks

The Technical Test:
They gave me a simple task: "Build a basic todo app with HTML, CSS, and JavaScript in 2 hours."

I built it with:
- Add/delete functionality
- Local storage persistence
- Responsive design
- Clean, commented code

The Result:
I got the internship offer the next day!

Week 1: Reality Check

My Expectations:
- I'll be building features immediately
- My college knowledge will be directly applicable
- I'll work on cutting-edge technologies

The Reality:
- First week was setup and understanding existing codebases
- College taught theory; industry needed practical skills
- Most work was on maintaining existing applications

Day 1 Shock:

My first task: Set up the development environment


git clone https://github.com/iceico/healthcare-platform.git
cd healthcare-platform
npm install

47 vulnerabilities found, 23 high severity


npm start

Error: Node version mismatch


Error: Missing environment variables


Error: Database connection failed


It took me 3 days to get the project running locally. In college, everything "just worked" in our controlled environment.

What I Learned in Week 1:
- Real projects have dependencies and configurations
- Documentation is often outdated
- Environment setup is a skill in itself
- Asking for help is not a weakness

Month 1: Learning the Ropes

My First Real Task:
"Fix the contact form on the healthcare website - it's not sending emails properly."

What I Thought It Would Take: 2 hours
What It Actually Took: 3 days

The Journey:

// Day 1: Found the frontend form
const handleSubmit = (e) => {
e.preventDefault();
const formData = new FormData(e.target);

fetch('/api/contact', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('Message sent successfully!');
}
});
};

// Day 2: Discovered the backend API was broken
app.post('/api/contact', (req, res) => {
const { name, email, message } = req.body;

// This was failing silently
sendEmail({
to: 'info@company.com',
subject: 'Contact Form Submission',
body: Name: ${name}\nEmail: ${email}\nMessage: ${message}
});

res.json({ success: true }); // Always returned success!
});

// Day 3: Fixed the email service configuration
const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: process.env.EMAIL_USER, // This was missing!
pass: process.env.EMAIL_PASS // This too!
}
});

Lessons from My First Task:
1. Always test the full flow - frontend to backend to email delivery
2. Check environment variables - missing config causes silent failures
3. Read error logs carefully - they tell you exactly what's wrong
4. Test edge cases - what happens with invalid emails?

Month 2: Real Responsibility

The Big Project:
"We need to add a shopping cart feature to the mattress e-commerce site. Can you handle it?"

This was my first major feature, and I was terrified and excited.

The Requirements:
- Add products to cart
- Update quantities
- Calculate totals with tax
- Persist cart across sessions
- Mobile-responsive design

My Approach:

// Frontend: React component for cart
import React, { useState, useEffect } from 'react';

function ShoppingCart() {
const [cartItems, setCartItems] = useState([]);
const [loading, setLoading] = useState(true);

useEffect(() => {
loadCartFromStorage();
}, []);

const loadCartFromStorage = () => {
const savedCart = localStorage.getItem('cart');
if (savedCart) {
setCartItems(JSON.parse(savedCart));
}
setLoading(false);
};

const addToCart = (product) => {
const existingItem = cartItems.find(item => item.id === product.id);

if (existingItem) {
updateQuantity(product.id, existingItem.quantity + 1);
} else {
const newCart = [...cartItems, { ...product, quantity: 1 }];
setCartItems(newCart);
localStorage.setItem('cart', JSON.stringify(newCart));
}
};

const updateQuantity = (productId, newQuantity) => {
if (newQuantity === 0) {
removeFromCart(productId);
return;
}

const updatedCart = cartItems.map(item =>
item.id === productId ? { ...item, quantity: newQuantity } : item
);
setCartItems(updatedCart);
localStorage.setItem('cart', JSON.stringify(updatedCart));
};

const calculateTotal = () => {
const subtotal = cartItems.reduce((total, item) =>
total + (item.price * item.quantity), 0
);
const tax = subtotal * 0.18; // 18% GST
return { subtotal, tax, total: subtotal + tax };
};

// Rest of the component...
}

Backend: API endpoints

// Laravel controller for cart operations
class CartController extends Controller
{
public function addToCart(Request $request)
{
$request->validate([
'product_id' => 'required|exists:products,id',
'quantity' => 'required|integer|min:1'
]);

$user = auth()->user();
$product = Product::find($request->product_id);

$cartItem = Cart::where('user_id', $user->id)
->where('product_id', $product->id)
->first();

if ($cartItem) {
$cartItem->quantity += $request->quantity;
$cartItem->save();
} else {
Cart::create([
'user_id' => $user->id,
'product_id' => $product->id,
'quantity' => $request->quantity,
'price' => $product->price
]);
}

return response()->json([
'success' => true,
'message' => 'Product added to cart'
]);
}

public function getCart()
{
$user = auth()->user();
$cartItems = Cart::with('product')
->where('user_id', $user->id)
->get();

$total = $cartItems->sum(function($item) {
return $item->quantity * $item->price;
});

return response()->json([
'items' => $cartItems,
'total' => $total
]);
}
}

The Challenges I Faced:
1. State Management: Keeping cart state synchronized between components
2. Data Persistence: Handling both logged-in users and guests
3. Price Calculations: Handling discounts, taxes, and currency formatting
4. Mobile Responsiveness: Making the cart work on all screen sizes

Time Taken: 2 weeks (including testing and bug fixes)

Month 3: The Healthcare Project

The Challenge:
"We need to build a patient management system for a local clinic. You'll be the lead developer on this."

Lead developer? I had been an intern for only 2 months, but they trusted me with this responsibility.

Project Scope:
- Patient registration and profiles
- Appointment scheduling
- Medical records management
- Doctor dashboard
- Billing system

The Tech Stack Decision:

// Frontend: React with TypeScript (my suggestion)
interface Patient {
id: string;
name: string;
age: number;
phone: string;
email: string;
medicalHistory: MedicalRecord[];
appointments: Appointment[];
}

interface Appointment {
id: string;
patientId: string;
doctorId: string;
date: Date;
time: string;
status: 'scheduled' | 'completed' | 'cancelled';
notes?: string;
}

// Component for appointment scheduling
const AppointmentScheduler: React.FC = () => {
const [selectedDate, setSelectedDate] = useState(new Date());
const [availableSlots, setAvailableSlots] = useState([]);
const [selectedSlot, setSelectedSlot] = useState('');

useEffect(() => {
fetchAvailableSlots(selectedDate);
}, [selectedDate]);

const fetchAvailableSlots = async (date: Date) => {
try {
const response = await fetch(/api/appointments/available-slots?date=${date.toISOString()});
const slots = await response.json();
setAvailableSlots(slots);
} catch (error) {
console.error('Failed to fetch available slots:', error);
}
};

// Rest of the component...
};

Backend: Laravel with proper architecture

// Models with relationships
class Patient extends Model
{
protected $fillable = [
'name', 'age', 'phone', 'email', 'address', 'emergency_contact'
];

public function appointments()
{
return $this->hasMany(Appointment::class);
}

public function medicalRecords()
{
return $this->hasMany(MedicalRecord::class);
}
}

class Appointment extends Model
{
protected $fillable = [
'patient_id', 'doctor_id', 'appointment_date',
'appointment_time', 'status', 'notes'
];

protected $casts = [
'appointment_date' => 'date',
'appointment_time' => 'datetime'
];

public function patient()
{
return $this->belongsTo(Patient::class);
}

public function doctor()
{
return $this->belongsTo(Doctor::class);
}
}

// Service class for business logic
class AppointmentService
{
public function scheduleAppointment($patientId, $doctorId, $date, $time)
{
// Check if slot is available
$existingAppointment = Appointment::where('doctor_id', $doctorId)
->where('appointment_date', $date)
->where('appointment_time', $time)
->where('status', '!=', 'cancelled')
->first();

if ($existingAppointment) {
throw new Exception('Time slot is already booked');
}

// Create appointment
$appointment = Appointment::create([
'patient_id' => $patientId,
'doctor_id' => $doctorId,
'appointment_date' => $date,
'appointment_time' => $time,
'status' => 'scheduled'
]);

// Send confirmation SMS/Email
$this->sendAppointmentConfirmation($appointment);

return $appointment;
}

private function sendAppointmentConfirmation($appointment)
{
// SMS and email notification logic
}
}

What I Learned:
1. Architecture Matters: Proper separation of concerns makes code maintainable
2. User Experience: Healthcare software needs to be intuitive for non-tech users
3. Data Security: Patient data requires extra security measures
4. Testing: Healthcare software needs thorough testing

Project Timeline:
- Week 1: Requirements gathering and database design
- Week 2-3: Backend API development
- Week 4-5: Frontend development
- Week 6: Integration and testing
- Week 7: Deployment and training

The Result:
The clinic is still using the system today, and it handles 50+ appointments per day.

Month 4-5: Becoming a Mentor

New Responsibility:
Two new interns joined, and I was asked to mentor them. Teaching others taught me how much I had learned.

What I Taught Them:
1. Git Workflow: Proper branching, commit messages, pull requests
2. Code Review: How to give and receive feedback
3. Debugging: Systematic approach to finding and fixing bugs
4. Best Practices: Clean code, documentation, testing

Mentoring Challenges:
- Explaining concepts I had learned intuitively
- Being patient with begin mistakes I had made
- Balancing guidance with letting them learn from mistakes

Git Workflow I Taught:

Feature branch workflow


git checkout -b feature/user-authentication

Make changes


git add .
git commit -m "Add user login functionality

- Implement JWT token authentication
- Add password hashing with bcrypt
- Create login/logout API endpoints
- Add form validation on frontend"

git push origin feature/user-authentication

Create pull request for code review


Month 6: The Final Project

The Challenge:
"We want to rebuild our company website. Can you lead this project?"

This was my chance to apply everything I had learned.

Project Requirements:
- Modern, responsive design
- Content management system
- SEO optimization
- Performance optimization
- Mobile-first approach

My Tech Stack Choice:

// Next.js for full-stack development
// pages/api/blog/[slug].js
export default async function handler(req, res) {
const { slug } = req.query;

if (req.method === 'GET') {
try {
const post = await getBlogPost(slug);
if (!post) {
return res.status(404).json({ error: 'Post not found' });
}
res.status(200).json(post);
} catch (error) {
res.status(500).json({ error: 'Failed to fetch post' });
}
}
}

// components/BlogPost.jsx
import { useState, useEffect } from 'react';
import Head from 'next/head';

export default function BlogPost({ slug }) {
const [post, setPost] = useState(null);
const [loading, setLoading] = useState(true);

useEffect(() => {
fetchPost(slug);
}, [slug]);

const fetchPost = async (slug) => {
try {
const response = await fetch(/api/blog/${slug});
const postData = await response.json();
setPost(postData);
} catch (error) {
console.error('Failed to fetch post:', error);
} finally {
setLoading(false);
}
};

if (loading) return

Loading...
;
if (!post) return
Post not found
;

return (
<>

{<code class="bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded text-sm font-mono text-blue-600 dark:text-blue-400">${post.title} | ICEICO Technologies</code>}





{post.title}





);
}

Performance Optimizations I Implemented:
1. Image Optimization: Next.js Image component with lazy loading
2. Code Splitting: Dynamic imports for heavy components
3. Caching: API responses and static assets
4. SEO: Meta tags, structured data, sitemap

The Results:
- Page Load Time: Reduced from 4.2s to 1.1s
- SEO Score: Improved from 65 to 94
- Mobile Performance: 95/100 on Google PageSpeed
- Conversion Rate: 40% increase in contact form submissions

The Skills I Gained

Technical Skills


1. Frontend Development: React, Next.js, TypeScript, responsive design
2. Backend Development: Node.js, Laravel, API design, database optimization
3. DevOps: Git workflow, deployment, performance monitoring
4. Testing: Unit tests, integration tests, user acceptance testing

Soft Skills


1. Communication: Explaining technical concepts to non-technical stakeholders
2. Project Management: Breaking down large projects into manageable tasks
3. Problem Solving: Systematic debugging and troubleshooting
4. Mentoring: Teaching and guiding junior developers

Business Skills


1. Client Interaction: Understanding requirements and managing expectations
2. Time Management: Balancing multiple projects and deadlines
3. Quality Assurance: Ensuring deliverables meet professional standards
4. Documentation: Writing clear, maintainable code and documentation

The Transformation

Before Internship:
- Knew syntax but not architecture
- Built toy projects, not real applications
- Worked alone, never in a team
- Focused on making it work, not making it maintainable

After Internship:
- Understood software architecture and design patterns
- Built production applications used by real users
- Collaborated effectively with designers, project managers, and other developers
- Focused on code quality, performance, and user experience

Lessons That Changed My Perspective

1. Code Quality Matters More Than Clever Code


// Before: Trying to be clever
const getUserData = (users, id) => users.find(u => u.id === id) || {};

// After: Being clear and maintainable
const getUserById = (users, userId) => {
const user = users.find(user => user.id === userId);

if (!user) {
console.warn(User with ID ${userId} not found);
return null;
}

return user;
};

2. User Experience Trumps Technical Perfection


It's better to have a simple solution that works well for users than a complex solution that's technically impressive but confusing.

3. Communication is as Important as Coding


The best code in the world is useless if you can't explain it to your team or if it doesn't solve the user's problem.

4. Learning Never Stops


Technology evolves rapidly. The ability to learn and adapt is more valuable than knowing specific technologies.

Advice for Future Interns

Before Applying


1. Build a portfolio - even simple projects show your passion
2. Learn Git basics - you'll use it from day one
3. Understand web fundamentals - HTML, CSS, JavaScript, HTTP
4. Practice problem-solving - not just coding syntax

During the Internship


1. Ask questions - it's better to ask than to assume
2. Take notes - you'll forget important details
3. Volunteer for challenges - growth happens outside your comfort zone
4. Build relationships - your colleagues are your future network

After the Internship


1. Stay in touch - maintain professional relationships
2. Apply what you learned - build projects using new skills
3. Share your experience - help other students
4. Keep learning - the internship is just the beginning

The Long-Term Impact

This internship didn't just teach me technical skills - it shaped my career trajectory:

Immediate Impact:
- Got a pre-placement offer from ICEICO
- Built confidence in my abilities
- Developed a professional network
- Gained real-world experience

Long-Term Impact:
- Started freelancing with confidence
- Built my own SaaS application
- Became a mentor to other students
- Developed entrepreneurial mindset

Final Thoughts

Six months at ICEICO Technologies transformed me from a student who knew how to code into a developer who could build real solutions for real problems.

The Most Important Lesson:
There's a huge difference between knowing how to code and knowing how to develop software professionally.

College teaches you the syntax and theory. Internships teach you how to apply that knowledge to solve real problems, work with real teams, and build real products that real people use.

My Advice:
Don't just look for internships at big tech companies. Sometimes, smaller companies offer better learning opportunities because you get more responsibility and exposure to the entire development process.

To ICEICO Technologies:
Thank you for taking a chance on a curious student and giving me the opportunity to grow. The skills and confidence I gained during those six months continue to benefit me every day.

To Future Interns:
Your internship is what you make of it. Be curious, be proactive, and be willing to learn from mistakes. The experience will shape your career in ways you can't imagine.

---

Currently looking for internship opportunities or want to share your own internship experience? I'd love to connect and hear your story! Find me through below mentioned links.

Want to see the projects I built during my internship? Check out my portfolio to see the real-world applications and the lessons learned from each one.

SD

Suhas Dhawale

Full Stack Developer & Computer Science Engineering student passionate about creating modern, responsive web applications. Currently building SaaS products and sharing the journey through real stories and practical insights.

Continue Reading

My Journey from College Student to Full-Stack Developer
Personal Story

My Journey from College Student to Full-Stack Developer

How I transformed from a curious computer science student to building real-world applications that solve actual problems. The challenges, breakthroughs, and lessons learned along the way.

8 min read1.2k views
Building My First SaaS: Lessons from the Trenches
Entrepreneurship

Building My First SaaS: Lessons from the Trenches

The real story behind creating my AI-powered SaaS platform. From the initial idea to handling 500+ users, here's what I wish I knew before starting.

12 min read2.1k views

Want More Stories Like This?

Get notified when I publish new stories about development, entrepreneurship and lessons learned from building real projects.

Suhas Dhawale

Full Stack Developer passionate about creating modern, responsive web applications that deliver exceptional user experiences.

Services

  • Frontend Development
  • Backend Development
  • Full Stack Development
  • Web Design

© 2025 Suhas Dhawale. All rights reserved.