← ~/blog
2026-10-14

Beyond Personal Projects: What Building a Discord Bot Taught Me About Software Engineering

Software EngineeringInternshipTypeScriptNode.jsDiscord.jsTeam Collaboration

Most of my early programming experience came from personal projects.

I could choose the technologies, design the features, and decide how everything should work.

However, contributing to a project within a team introduced a different set of challenges.

During my software engineering internship at Elephia, I worked on a Discord bot using TypeScript, Node.js, and discord.js.

This experience helped me better understand the difference between building software independently and developing something that needs to work within an existing team’s workflow.

Working with Discord APIs

The bot involved implementing Discord commands and integrating them with Discord’s application and server permissions.

One of the challenges I encountered was getting slash commands to register and function correctly.

Initially, some commands did not appear or failed because of access and permission issues.

Debugging the problem required investigating command registration, application permissions, and how Discord handles access to different servers.

It was a useful experience because the problem was not simply a syntax error.

The application code, external API, and platform configuration all needed to work together.

Deployment Is Part of Development

Another important part of the project was making the bot available outside my local development environment.

Running a bot locally is useful during development, but it does not solve the problem of hosting it for continued use.

Working through deployment and verifying command behavior helped me appreciate the operational side of backend development.

A service must not only perform its intended function. It also needs an environment where it can run and be maintained.

Learning to Work in a Team

Unlike a personal project, collaborative development requires communication and coordination.

I became more familiar with using GitHub issues and pull requests to organize changes and communicate progress.

I also learned the importance of making code understandable to other developers.

A solution that works on my machine is not necessarily sufficient if someone else needs to review, maintain, or extend it.

This encouraged me to think more carefully about code structure, documentation, and explaining implementation decisions.

The Bigger Lesson

One of the most important things I learned is that software engineering involves much more than writing code.

Understanding requirements, investigating unexpected behavior, communicating technical decisions, and verifying that a feature works in its intended environment are all part of the job.

Even relatively small projects can provide valuable engineering experience when they involve real constraints and collaboration.

This internship has helped me approach my personal projects with a more professional mindset.

As I continue studying backend development, Java, cloud infrastructure, and system design, I want to apply these lessons to increasingly complex systems.