Software development internship reflections

Flaviu Vadan
Vendasta
Published in
8 min readSep 4, 2019
Sourced from BoomerangEdu

There have been multiple instances during the early years of my undergraduate degree in which I heard pursuing an internship can provide one with valuable experiences. From senior undergraduate friends to professors, the shared thoughts on pursuing an internship have always been positive and held a high regard for accumulating industry experience. In addition, they can help an individual gauge whether industry, or academia, is the right track post-graduation. Now that I am approaching the end of my internship at Vendasta, I want to share some thoughts on why I now also think pursuing a software development internship is valuable. More than anything, I hope this blog will help future software developers, interns or fresh graduates, find their way through the intricacies of joining a tech company and how to maximize learning. Note, however, that this blog describes my experience. The suggestions outlined in this blog are based on what I have pursued, what I learned, and the feedback I received from my colleagues while working at Vendasta.

Background

I spent two summers doing research prior to the internship I pursued at Vendasta so most of my software development experience came from lonesome coding endeavours I pursued during summers, or during my own time. I was familiar with algorithms, data structures, Python, Java, the Unix shell, and some SQL, among other things I have learned from the Computer Science and Bioinformatics courses I took. When thinking about the industry before the internship, I was confident that development practices must differ from the ones I was familiar with. That is the main reason I chose to pursue an internship in the first place — I wanted to experience working with people who have much more experience than what I had at the time and experience a place in which I would be a novice.

Initially, my thoughts were mainly focused on the technical side. I expected to learn things such as development practices, maybe programming languages I never used before, etc. However, looking back at the time I started, I was in for a big surprise.

First half

I was placed on a team that worked on a task management system — Task Manager [1]. Typically, interns start off with a “starter project” that does not end up being sent to a production environment. In my case, I did not end up working on a “starter project”. Instead, my team at the time agreed to allow me to jump right into development and encouraged me to figure things out. Among other things, I had to learn:

  • that I did not actually know Python and there was way more to it than what I have been exposed to before;
  • that I did not have a clue of the scale at which Vendasta builds software and how many components can be involved;
  • front-end development (Angular, KnockoutJS, HTML, SCSS/CSS) as I have never touched any of that before;
  • how a front-end is connected to the back-end. Essentially, what an API is and how components communicate with each other;
  • how to attempt to write production-level code (documentation, separation of concerns, creating specific modules, etc). Attempt because it’s a never-ending endeavour trying to improve it;
  • Elasticsearch, Golang, parts of the Google Cloud Platform etc.

It did feel overwhelming, particularly in the first 3 months. At times, specifically when I felt I was developing at a slow pace, I felt like an impostor [3]. I thought I would be told “thanks for stopping by but don’t come back” by the end of the day.

You can develop an impostor syndrome. Awareness of it may help you overcome self-limiting thoughts, in case you catch yourself having them.

This is a typical scenario that can, and likely will, happen as there is so much to learn when starting a new software development position. It was during times I felt overwhelmed that I learned something I was not aware of before I started the internship:

People are everything and teams are awesome.

I could not have done a lot of the work I did in that timeframe without the help of my team.. There have been many instances that I have reached out to my team for help by asking questions and have chatted with my Team Lead about the overwhelming amount of things I had to learn.

I absolutely loved it. I loved that my team threw me in a project that required me to reach out to others for help and encouraged me to learn a lot of new things. However, at the same time, I also wanted to make sure that I was on the right track, which is why I always asked questions.

Do not be afraid of saying “yes, I will do it”, asking questions, reaching outside the team for help.

Second half

A software development internship, or the first year as a new developer, is all about learning. Based on that, I asked whether it is possible for me to work on something different for the second half of the internship.

Do not be afraid to ask about opportunities or trying to make one for yourself; worst case is a “no”.

That lead to me working on a product called Website Pro [2]. Armed with the experience from the first half of the internship and an enriched toolkit, I was able to contribute to the product from the start. However, in comparison to the first product I worked on, Website Pro is very different. Among other things, I had to learn:

  • more Angular and much more Golang than what I have learned before;
  • Kubernetes, Redis, and PHP;
  • how the internet works (domain lookup/DNS, IPs, traffic routing, SSL certificates, etc);
  • more of the Google Cloud Platform;

With this team, there have been many instances, that are still happening, in which I end up opening numerous Wikipedia pages to research what I am dealing with.

Fail fast, fail often, maximize learning

One thing that can help push one towards accumulating and absorbing as many lessons as possible during an internship is failing fast and often. This does not mean purposefully trying to not do well during an internship. Rather, it means one should experiment as much as possible during this time of learning. Following are several strategies that can help with this.

Ask questions

Before asking anything, try your best to do your own research first. It will help showcase that you have at least performed some “homework” before asking anything. It can happen that your question is not suited for Google because of the tech stack, which is fine. However, the general aim, to my knowledge, is for projects to have good documentation. Try to find that! If that does not result in anything, reach out!

I cannot emphasize the importance of asking questions enough. Before I started, I asked some of my new colleagues at the time what do they generally encourage interns to do. One answer I received was: “Your professional responsibility through the internship is to ask questions”. Whether you need an answer for something you are working on or not, do not be afraid to reach out and ask whatever you’d like to ask.

Clearly, openness to questions is highly dependent on the people that are part of a company. In the case of Vendasta, from personal experience, everyone is open towards helping out and are eager about telling others what they are working on, or answering interesting questions.

There will be times that might feel like you are asking foolish questions. However, it’s a small price to pay in the short-term for hopeful long-term knowledge gains.

Experiment

An important factor for one’s own learning is experimenting. Vendasta offers prime opportunities for this, such as periodic hackathons and the so-called “jam time” (short portion of a two-week period to learn new things). At the beginning of my internship, I confess I was slightly shy and did not feel fully comfortable working with others during hackathons. However, starting with the second one (based on my memory), I started reaching out to others to work with them during hackathons, specifically for the reason that I did not feel fully comfortable with my knowledge. The only way to overcome limiting thoughts, such as fear of not knowing enough, is to try, to fail, and to learn.

Meet new people

An internship opportunity is not only an opportunity to grow as a potential future software developer (or, for new graduates, the start of a software developer position) from a technical perspective. It is an opportunity to meet new people, with similar interests or not, whom you can learn from and work with.

One of the things I decided to do during my internship is to reach out to people (similar to cold-calling but easier) at Vendasta to ask for 30-minute sessions. During those sessions, I would ask them about their experience during their first year as a software developer, the things they worked on, school they went to, suggestions for new developers, etc. I used to start with several questions in my mind but I would go with the conversation (if I would not cover all my questions, I’d reach out later again). Typically, the conversations turned out to be so good that they flowed from one question into another, almost naturally. These sessions were not limited to discussions only with other developers. I have reached out to numerous people, in different positions, from developers to people in company leadership.

Learn new technologies

Try new technologies! This goes hand-in-hand with experimentation. Do not limit yourself to the tech-stack of the team you are placed on. If you have opportunities such as hackathons, “jam time”, etc, reach out and work with others, or try new technologies on your own. It is one of the few attempts you can make at keeping up with new things being developed either at the company you are working, other companies, or tech that is open-sourced.

Conclusion

I started off the blog with some of my background. The intention was to establish a bit of context of where I came from and how I ended up at Vendasta. Then, I went on to describe the first and second half of my internship, with the intention to showcase some of the technologies used at Vendasta. As I described my experience, I tried my best to leave some words of encouragement and suggestions for future Vendastians, interns at other companies, or newly graduated developers. By talking about four main themes:

  • Ask questions
  • Experiment
  • Meet new people
  • Learn new technologies

I aimed to cover some of the most important aspects of how to approach an internship. I hope the picked themes are not too broad.

There are numerous blogs that cover similar topics and provide similar suggestions (I’ve read some before my internship, [4] is a nice example). With this blog, I hope to contribute to that pool of written resources, and help provide some words of encouragement to new developers.

References

[1] https://www.vendasta.com/platform/task-manager

[2] https://www.vendasta.com/marketplace/website-pro

[3] https://en.wikipedia.org/wiki/Impostor_syndrome

[4] https://news.microsoft.com/life/internship_success/

--

--