My name is Gabriel Saliev, I’m software engineering student at Edinburgh Napier University and I’m currently an intern at VMware Bulgaria. I’m writing this blog post as a retrospection of my journey and the lessons I’ve learned.
Project Expectations and Goals
Our project goal was to migrate existing view services from REST to GraphQL. Achieving this would solve numerous problems — the most important being moving the services from using an internal framework to an open-source solution with a big community. Few other problems were going to be solved along the way like the infamous N+1 problem, under-fetching and over-fetching.
As the project started everything was going great, we managed to get a lot of work done in the first month, most of it was infrastructural. We’ve set up our authentication, auto-generated clients on the fly for every entity that was part of the core model, generated GraphQL schema and data loaders (mechanism in GraphQL that allows the execution of batch requests) for that model. Basically, we were able to abstract most of the puzzle pieces into auto-generatable components.
At this point of time GraphQL looked like the right solution for our problem until we’ve had to implement efficient filtration. A lot of friction occurred there since our beliefs of what the filtration should look like weren’t aligned with the GraphQL way. Trying to perform the exact opposite of what the specification states was a bad sign. This made us stop and rethink if GraphQL was the right tool for our solution, apparently, it wasn’t.
Mentorship
Mentorship is the most valuable aspect of the internship. I was paired with a great mentor who has more years of experience in the company than all of my years in school and university combined. From the very beginning, he wasn’t protecting me from any mistakes or failure, on the contrary, he was encouraging me to hit all the mistakes, experiment and expand my comfort zone through that. I liked this approach a lot because it made the learning experience a whole lot faster and more fun. Even though he was trying to teach me all the domain concepts in digestible chunks, there were days where I was blasted with information that usually took me a few days to grasp and explore more. Pair programming was another key factor for both of us to learn more since the exchange of information was bidirectional. Passion is contagious, seeing him work with such interest and enthusiasm transferred over me quickly. This sparked my hunger to learn and innovate even more.
Collaboration
Over the past 3 months, I’ve established solid connections in the Spring and GraphQL world. I was granted free access from VMware to attend SpringOne conference which was an invaluable experience. The conference helped me and my mentor meet one of the core Spring-GraphQL contributors and start a discussion with him over Slack. This triggered chain of events that allowed us to even have a meeting over ZOOM for 1:30 hours. As it was beneficial for us to explain to him our use case and problems, it was also to him to see what a GraphQL user needs are.
I was encouraged to open issues and start discussions on GitHub about the topics we wanted to explore more. I even posted a tweet to one of the core Netflix DGS Framework developers, to my surprise he responded and took the conversation to a GitHub discussion. All this positive experience brought to me a sense of collaborative community where solutions to problems often arise when we are sharing ideas and working together.
Community at VMware
Over the course of my internship, the community inside VMware amazed me. I started attending weekly meetings with the team and I was involved in them by sharing how the project is going and what I am currently working on. I’ve gotten to see the work process from the inside. Everybody was friendly and keen to start a meeting and share their knowledge the moment I’ve asked a question.
It wasn’t all work though, I started playing tennis with my manager a few times in the month. I happened to go for lunch with team members a couple of times when I was in the office. Overall, I didn’t feel isolated at all even when most of my work was done from home. I was feeling part of the VMware community and not like an outsider just doing an intern project.
Training
Learning is a continuous process in technology. Once I saw all the available training that I could enroll to I didn’t hesitate and contacted my manager to sign me up. Over the course of my internship, I will be able to complete 3 pieces of training in Spring, Design Patterns and Docker & Kubernetes. That by itself is a great opportunity to widen my scope as a developer. I wasn’t being trained only technologically though, the space for rest in the office was full of nice books. I’ve found great ones about jokes and even added a few to my artillery. That being said I’ve gotten all-around training.
Lessons Learned
If I have to point the one most important lesson I’ve learned throughout my internship I couldn’t. Everything feels equally important and is part of the bigger picture. But here are a few lessons that are worth mentioning in this retrospection. My mentor taught me that If I want to be great at what I do I have to:
- Understand how things work in depth. He was challenging me to read the code from the libraries that we use, to always ask questions and to not assume anything.
- Ask the right questions, because they were often leading to the right answers.
- Explain your problems very concisely in order for somebody else to understand it and see it from your perspective.
- Always implementing the simplest thing first, then optimizing was crucial to the speed we were developing as well.
- Adjust your mind to the specific technology you are using and think in terms of it.
Those are all great lessons, but the one that struck me the most is that recognizing if you are using the right tool for the job doesn’t happen immediately. We’ve had to hit many roadblocks to identify that GraphQL wasn’t going to solve our problem. As my mentor told me at the beginning of my internship ‘If we go against the platform, sooner or later we’ll hit a dead end’.
Moving forward
We’ve built a lot of knowledge about GraphQL during the past 3 months and there are 3 more months left from my internship. We’ll use that knowledge and build an API for a project that’s more compatible with GraphQL. I’m sure that we’ll again hit roadblocks here and there, but I feel more confident diving into that project with all the valuable experience behind me.
*This blog post was originally published by Gabriel Saliev on Medium here.