The more I think about my experience as a software intern at Xerris, the more amazed I become. Being able to witness the process of onboarding a software development team and working together with bright-minded individuals to overcome challenges is an opportunity I will always be grateful for. Throughout this internship, I was given the opportunity to learn about software development and all the critical positions in a team required to build a successful product. From the technological decisions made by the solution architect, the resilient nature of the developer required to overcome challenges, to the much-appreciated effort by a scrum master to ensure a smoothly managed project. All this bundled up into one internship. This was a summer well spent, and I am thrilled to share my experience.
I am Papa Kobina Kwegyir-Aggrey and I will be starting a Computer Engineering degree at the University of Waterloo this fall, September 2022. My goal is to become a software developer and apply my skills to real-life problems. I also wish to be a lifelong learner as I believe there are no boundaries to academic and intellectual pursuits. Prior to this internship, I had little to no experience in front-end development as I had focused more on object-oriented programming languages such as C++, Java, and Python, which I learned through online courses. My lack of front-end experience coupled with anticipation led to an overwhelming night before my first day.
That night, I was nervous, yet excited simultaneously. I pondered various scenarios:
“Would I become yet another annoying intern who breaks the website on his first day or impedes the team’s delivery efforts?”;
“Am I good enough for this job?”;
“Can I provide value for the company?”
Little did I know these doubtful thoughts would soon become a distant memory. The support network at Xerris was nothing short of amazing, allowing me to quickly settle in and become comfortable. There was always someone willing and ready to help. The culture at Xerris is another factor that allowed me to settle in quickly. My co-workers always stressed the importance of having fun while working, and I believe that such a culture is what cultivates the most productivity.
The biggest highlight of this internship was gaining the experience of working on an impactful project at Xerris that provided immense value to the client. I actually wrote code that was deployed to production and is being used to this day. This is still extremely mind-blowing for me to comprehend. Throughout this fantastic opportunity, I got the chance to not only build upon my skills but add more than I could imagine to my repertoire.
Equally amazing was the one-on-one advice that was given to me. The support I received extended beyond the scope of coding. One piece of advice that resonated with me was given to me by Dave Robertson. “Look ahead one hour, one day, one week, and one month”. I’ll be honest. I initially didn’t think much of this, but after trying it out I can testify as to how much more productive and organized I have become. I have hence created a folder where I have laid out my daily and weekly tasks. These meetings were a great caveat in the internship as many of the conversations will be echoed in my life.
As stated above, prior to this internship I had little to no front-end experience. Consequently, I had to do a lot of research for every task that I was given. The hardest and more insightful of these tasks included updating a Mobx state. Mobx is a state management library built into React. One thing that makes it different from using Hooks such as useState is the fact that its values can be accessed outside the UI framework, allowing for it to be scalable. Though I had no experience with Mobx beforehand, I completed half of the task using the useSate hook in React but quickly ran into an issue. After a few hours of trying to solve this issue, I hopped on a call with one of the senior developers(Sandeep Chopra) on the team who informed me that I needed to “update the Mobx state.” I was dumbfounded! I had no idea what this meant. For the next few hours, I slowly made my way into Mobx heaven, scouring Google and YouTube to learn as much as I could. Then it clicked! This was one of the biggest “aha” moments I had in this internship as I realized how much easier it is to use Mobx. Furthermore, I could refactor some of the projects I had to include Mobx to make the code cleaner and easier to understand. It was precious moments like this that made my internship gratifying. These impactful moments were where I learned the most, and where I felt the most accomplished. After all, the whole point of taking this internship was to LEARN!
Who knew Github had so much functionality? I certainly didn’t. I did not expect to be learning something new straight out the gates, but I was so wrong! From the first hour of starting my internship, my mentor, Sandeep Chopra, showed both me and the other intern, Ezra Huang, how to set up our machines properly in order to code and contribute to the project. In that hour we learned how to clone the project, how to push our changes to the Github repository, and how to update our local branches to keep up to date with the repositories. After he showed us I was a bit unclear about how it actually worked, but Sandeep hopped on a call with me and thoroughly explained it to me.
This was another huge “aha” moment, as I realized I could be doing this with my personal projects as well. Instead of coding my projects and only uploading the whole file manually to a repository, I could be pushing my changes to a repository which would save me the hassle of uploading the files to Github. This method is way more efficient and less time-consuming as this could be done by typing out one line in the command line.
Coming to grips with Machine Learning!
Out of all the amazing aspects of the internship, I truly think I learned more about myself and what I enjoyed the most during the machine learning phase. During this section, I learned step by step how to build a machine learning module from scratch. With the help of Sebastian Crites my co-intern and I were able to make a machine learning module that could predict what number was written. Here is the project on Github.
I found myself having the most fun and enjoyment during the machine learning section. Though it took me a whole workday to set up my device to start the project, the journey to the end goal was worthwhile. The fact that I could integrate math with coding was another aspect that made me grow to love machine learning. Due to this, I’m looking to grow upon my machine learning and data science skills by taking courses on the topic and practicing what I learn. I have always been a fan of math, so why not combine it with the other thing I love doing, coding? My passion for machine learning extended beyond this section as I began researching more about the topic and small projects I could do to practice what I learned even after this section was over. I believe this internship helped me to find something I am ecstatic about and I hope to pursue this even further.
The diagram above is one of the solution architect diagrams that I personally created during this internship. The task was to make a solutions architect diagram for a company that was looking to add a feature to its website. The feature was to allow users to upload CAD files to the website and get an estimate of how much it would cost to 3D print the contents of the file via email. Using AWS services, I was responsible for finding a viable solution. Here is a walkthrough of the diagram.
For the longest time, I wanted to learn about cloud computing and what it entailed. With the help of Patrick Withams, I learned a lot about AWS services and how they can be implemented on large-scale projects. I am looking to make a file storage system via AWS and perhaps use it instead of my Google Drive.
This section of the internship really brought everything together as we looked over the roles of everyone in a scrum team and how a team is run. During this section, Marcela Wang taught us about Waterfall workflow vs Agile workflow.
The Waterfall Workflow essentially means that when a project is started, it follows a waterfall-like nature as we can not go back to revise the previous step. For example, if the client wants Xerris to make the button on a website yellow and the client wants a blue button instead a week later, we cannot adjust to that change.
Agile, on the other hand, as the name suggests, permits us to “change the direction” of the project, which allows us to adhere to the client's demands as the project progresses. With this workflow, we hold a sprint review every 2 weeks in which we present to the client the progress we’ve made. In this meeting, the client asks questions and can also suggest new changes they would like to make.
At Xerris, we follow the Agile workflow. This was a positive aspect of the internship for me as it showed me how the software development team interacts with the client. The Scrum section is where I believe the most responsibility was given to me as I was entrusted to run the daily stand-ups as well as some sprint review and sprint planning meetings. I truly realized how much work goes into each of the presentations and how much the scrum master does behind the scenes that many developers are unaware of. I loved that the Scrum section pushed me outside my comfort zone. I am not one who is comfortable in group settings, yet I was pushed to present in front of both the client and my team. There is a level of accomplishment that goes along with something I genuinely was scared to do.
My biggest challenge during the internship was learning to take things slow. One thing I failed to keep in mind at the beginning of the internship was the fact that this whole experience was meant for me to learn. However, after a couple of reminders, I believe that this is where I started to see the biggest learning experience. Instead of taking the task and quickly trying to finish it, I started to take my time to truly understand each line I was writing. This is a lesson I will keep in mind. It is more productive to approach tasks in a calculated manner and remember to break them down into tiny issues. Another problem I struggled with was learning to stay calm and solve issues. There were certain periods when my whole screen would be full of bugs and it would seem impossible. The Papa before this internship would panic and after a few minutes of trying to solve this issue either give up or ask for help. The Papa after this internship approaches these bugs one by one in a calculated and calm manner. This allows me to stay level-headed making solutions easier to find.
Aside from all of the technical skills I learned, I learned a great deal of soft skills pertaining to working with a team and how to work coherently in a team. These are skills I look to hone and expand upon more as I believe they are as valuable as technical skills. This internship was unique in the sense that it gave me a sense of many aspects of the software development world, such as Solutions Architect, front-end development, machine learning, and Scrum Master.
The opportunity to explore different jobs in the industry has given me invaluable insights into my strengths and weaknesses. I believe an experience like this would be of great fortune to many people, not just High School students, just due to the plethora of skills you learn. This internship has been instrumental in my career development as it has reassured me about my dreams to become a software developer. I would encourage any High School student who is curious about the tech industry to apply for this internship, as not only will you learn, but you will also make great connections with amazing people that want to see you succeed.
Papa Kobina Kwegyir-Aggrey