My Experience as a SWE Intern at Goldman Sachs
I did have to sign aNDA, so I can't go too in depth on certain things. But I'll do my best to capture the essence of it and my feelings.
I have been working in the tech industry since I was 18, usually with local companies and startups. Goldman Sachs however was my first big internship, and boy was I excited to get to work in FinTech for one of the largest companies in the space. I went in thinking maybe I'd get to leave a small mark on the tech ethos of the company and they'd leave a mark on me as well.
I accepted an offer to intern in person at the Salt Lake City offices.
After going through all the bureaucratic processes of getting my ID scanned, sending my proof of college enrollment, social security, etc. All the interns had to go through 2 weeks of training where we'd clock in and join zoom session after zoom session, learning all the internal technology that Goldman uses plus certain department specific technology. Later I came to realize that they have a culture of building things in-house, and it shows. The amount of in-house tech Goldman has is astounding, it can be both impressive and scary at the same time when you're not used to it. However, I did have some familiarity in some of the technology that they used like Docker, Kubernetes, Git, GitLab, etc.
After those 2 beginning weeks we finally went in person, and it was both thrilling and exciting. I had been working from home for 2 weeks in this training, finally I got to meet my team in person and see where I'd be working. I was paired with another intern, she and I got along pretty well right away. We were located on the 8th floor of the SLC office building, complimentary lunch every day, and a great coffee machine. What else can I ask for.
View from my office
I will admit, I went into it with the preconceived notion that all the bad things that you've probably heard about Goldman Sachs were true (at least to some extent). However, I can honestly say that I was pleasantly surprised. That isn't to say that there weren't bad parts, I heard from some of the finance interns that things were quite cut-throat and there was a culture of one-upmanship. Which, I'm guessing is what happens when you mix in a bunch of extremely competitive and conscientious individuals in one place. I didn't experience much of this on the tech side, most teams were really communicative and welcoming with us. One thing that was immediately apparent to me was this company-wide culture of getting things done. If you ever need help with something critical someone will step up and help you, there's a strong focus on the product, customer, and always delivering on time. You will never hear someone say, "that's not my job".
My team was quite pleasant, we organized several outings where we went out to for drinks, eat, hike, and once to just hang out at a co-worker's house. It was surreal, I was only an intern that would potentially be there only 3 months, but I found myself becoming part of a family. They were all awesome and collaborative people that I could talk to about my personal life or my career, and they had my best interest in mind. I hate the work clichés as much as the next guy, but I truly felt like I was in a good environment to thrive and push myself to be the best that I could be. I think I got really lucky with my team, and I wouldn't of picked any other team to pass that summer with.
One thing you'll see at Goldman is a lot interns coming from these prestigious (Ivy, UCs, CMU) Universities, particularly finance and business interns. I will admit that I was a bit demoralized at first, having come from the University of Utah - a state school (a good one nonetheless). But I soon came to realize that at the end of the day, we're all working in the same place and I should just do my best regardless of circumstances out of my control.
I made friends with many of the interns whom I'm still in contact with today, we regularly chat about our experience and how much fun it was. There were several Goldman organized social events throughout the summer going to different notable locations like The Leonardo Museum. The highlight of the summer was when Goldman organized for us interns to go to the Utah Olympic Park where I got to go down a zip line, eat a bunch of great food, and socialize with the other interns. Some interns took it upon themselves to organize bar hopping events, parties, and small movie watching events. I only partook in a bar hopping event once because it was a bit too wild with some drama going down, which was entertaining. But let's just say there's a work hard – play hard mentality, which can be a bit draining, but to each their own. I not only got to meet amazing engineers from different teams in the company, but I also got to meet awesome engineers from other intern teams and hear them talk about their projects and experiences.
We were given our project assignment, and we got to work! It was extending the functionality of an existing webapp to support a variety of different functions, largely it was to support a dashboard that contained a lot of aggreggated company and application data, and which interacted with an action and event system. I mostly focused on the infrastructure and architecting of the whole thing as well as the backend, while my partner focused on the frontend. After a week of gruesomely (10+ hour days) trying to familiarize myself with the code base and deciding where we could start building this, as well as some help from our team to get things going, we finally devised an initial tech spec.
The first thing I noticed was the old tech. As I mentioned before there is a lot of internally maintained technology and that's good for a few reasons, like the fact that you're just a message away from contacting the worldwide expert for the technology you're using. But it can also have its downsides, you don't fully benefit from the fruits of Open Source, and it could lead to stagnation and slow development. This was definitely immediately apparent in that they still used some older technology in their applications. This was partially remediated by the plethora of teams working on building new cloud technologies and transitioning to more modern tech solutions.
Not long after, I realized that most of the things we wanted to do were just not possible in the existing backend, thus why I think it was given to us interns. So I set out to mostly work on scaffolding work and building out the structures in the backend for us to be able to do what we wanted, which was to aggregate all this data from different sources and correctly represent it. This took a while... it was the largest chunk of time spent in the backend and was what ate up most of my development time. Mostly because when I built it, I wanted to allow for extensibility of this API and all the backend logic to be used by other projects and application in the future. After finishing this, building the endpoints was a piece of cake.
I feel like I should address this at some point, so here it is. Yes there's a lot of red tape, it's a bank, understandably they're under a bunch of restrictions and regulatory pressure from the SEC and so a lot of things from my previous job experiences were suddenly not so relevant. I can't just look up a library, pull from a public repo, and just start using it. There's internal infrastructure to handle allowed libraries and technologies. It can feel overbearing sometimes and it definitely did for me during development, but most of it is a necessary part of the business.
Finally, we finished building this backend and I realized that because of the sheer mass of data that we were sending to generate this dashboard, we would need to implement caching. At first, I implemented a client-side cache in the frontend for the more atomic data that was more closely tied to the individual user using the dashboard. I then had some time nearing the end of the internship to dedicate a complete week to just optimizing things and building some caching on the server. So I implemented a server-side instance level cache to hold most of the cold data, that wasn't changing that often. While having an asynchronous process refresh the cache every 24 hours at midnight. But even then, this wasn't enough. When the frontend sent a GET request for too many data items, we would exceed the maximum URL length for chrome. While this was mostly ok because we could simply circumvent this by just making it a POST request, there was still a need to have a shareable URL to see everything a previous user had selected. So I came up with a solution to shorten the query length by keeping only the critical query data, which reduced the character length to only 50% of the original character length allowing me to reconstruct it in the backend. Now we were able to support the load, and it even resolved faster! I also ended up helping with the frontend near the end to get some features done and implement some extra features that were not on the roadmap, but that we knew would be a good addition based on what we could do with our API and the needs of the stakeholders.
In the end we woke up at 6am, drank copious amounts of coffee, and presented the project at 7am in a department-wide Zoom session which included several Managing Directors and other leaders in our branch from across North America, aside from the sleep deprivation it went really well! They asked questions and were very pleased with the application and all the work we had put in. I can say that because of our performance, both me and my intern partner got return offers, and I even got a separate offer from another team who was at the meeting and thought my caching and optimization techniques were cool.
Overall, I had an amazing time. I got to meet some unique and remarkable individuals that have become lifelong friends and mentors. I learned so much not only about tech and the industry but also about collaboration, garnering a positive team environment, and how to grow as a person.
My team and I at the Leonardo Museum