Around now, the bigger CS companies are making their internship decisions, leaving many students either ecstatic that they finally got their dream job or disappointed in their lack of success. As someone who had no success last fall in finding internships, I know what it feels like to watch everyone else succeed and wonder if you'll manage to net an internship at all. A lot of people want to intern at a big company that will give you a lot of money and a lot of cool perks, and people tend to look down on small companies as a result, but there are benefits to interning at smaller companies, too. I interned at a very small company last year that had somewhere between 60-70 employees in total, and it was a valuable experience that I wouldn't trade for anything.
My favorite thing about working at a small company was how quickly things moved. If I had an administrative question, I could ask the HR person and get a response within minutes. If I needed time off, I could email my manager and CEO and be approved by the end of the day. If I had a question about the specifications of my project, I could ask my mentor. If he didn't know, he could ask the manager and get an answer very quickly. My mentor was always readily available if I had any questions, and he usually got back to me pretty quickly with answers, help, and resources. Everything moved very smoothly and very quickly in a way that big companies usually cannot.
Along those lines, I also had a lot of freedom to make decisions. If there was something unclear in the specifications of my project, I was allowed to pick whatever behavior that made the most sense to me. I was a frontend engineer, so I also got to make all the design decisions about how the project would look to the end user. It was intimidating at first to have to much freedom, especially with design: I had never trusted myself to design anything before. However, freedom translated to responsibility. I had the freedom to make decisions because my employer assumed I would learn enough on my own to make smart decisions. Since I had never done any frontend work before, I had to learn the skills that I was missing pretty quickly. I learned how to design the user interface through trial and error; I learned good frontend style through code reviews and constantly asking my mentor questions. I had big shoes to fill, and being expected to grow so quickly enabled me to learn a lot in such a short amount of time.
Another good thing about working at a small company was that I was truly treated like an employee rather than an intern. There was only one other intern there for the summer, and so the two of us were treated as if we were full-time employees. We were given full-time benefits, were expected to go to meetings as if we were full-time employees, and got to participate in Employee Appreciation Week. Meetings weren't one-way; I had as much input as my mentors did when making decisions about where to take the project next. The other employees in the office talked to me as if I was their equal, and working in a small office meant that I became acquainted with most of my coworkers-- and we even talked regularly about things unrelated to work.
Also, since I was working on the project with only one other person, I was very familiar with all of the code for the project, even the code that I didn't write. I got significantly more exposure to backend code than I would have expected to as a frontend intern, which of course meant I learned even more.
Plus despite the company being quite small, I was paid quite well, too. And that's always a plus.
So if you're still looking for an internship and you haven't tried talking to any smaller companies, give it a shot. You'll still get a great internship experience, and at the very least, you'll figure out if small companies are the right fit for you.