You’ve just hung up the phone and you’ve received an offer for an internship. The excitement is overwhelming as the countless months of applications, assessment centres, interviews and rejections become obsolete. You’ve done it! This is your first step gaining valuable experience about being a software engineer and bridging the gap from theoretical university to real-world application. You’re faced with excitement and questions. What is it like to work on a large codebase? What will my team be like?
My internship served as a great opportunity to gain the skills needed to go from working on small scale university projects to being able to independently contribute code to a massive codebase. This is an insight into some of the challenges I faced, overcame and learned from throughout my time as a software engineering intern at FreeAgent.
Starting Construction:
One of the toughest challenges I faced when building my own bridge was having the confidence to start on this journey in the first place. The size of the bridge that each person must build will vary depending on their previous experience, although the feeling of impostor syndrome is something most people will experience. It’s difficult to start building a bridge if you don’t believe you can do it in the first place. In the period from accepting the position through to the first few days of my internship, I frequently considered myself a fraud who’d received this opportunity due to luck. I believed I didn’t have the skillset required, and that the recruiters had just overlooked a more qualified applicant, mistakenly choosing me. I felt nervous as I believed I had to prove myself and not be outed as the fraud I believed I was. I was worried that I wouldn’t be able to do anything correctly. Naively, I forgot that an internship is a learning opportunity. If there is one time to start messing things up in your professional career, it’s now! Fortunately, the team here at FreeAgent provide the blueprint and materials to build and cross this bridge!
There’s a lot of structure in place to support you. This includes having your own personal buddy, frequent 1:1s with your manager, and extremely helpful and friendly co-workers. Within the first few weeks, my feeling of impostor syndrome evaporated as I found myself becoming more familiar with the codebase and with FreeAgent’s software development process. This led to me having more confidence in my work. It turns out that I knew a lot more than I thought I did! I also quickly learned that it is not a solo venture, as you’re paired with your buddy and you share the journey with your fellow interns.
Git good:
Another major challenge at the start of my internship was learning my way around Git. I had used Git in my second and third years at university, which gave me the idea that I was knowledgeable about source control. Little did I realise, I’d barely seen the tip of the iceberg. The skills taught in university provide a basic foundation, although they aren’t the most helpful when working on a large scale application like FreeAgent, where there are dozens of developers working on it daily.
I found myself often getting tangled up in merge conflicts with myself when working on multiple tickets to implement or update a feature. At first, these were difficult to resolve on my own, but thankfully, the Git magicians within my team were able to help. Through more practice and a lot of support from my team members when wanting to perform certain actions, I found that a lot of the issues I was having at the beginning were no longer happening.
One piece of advice I would give to myself before starting this internship, would be to spruce up my Git skills and better understand how it works as opposed to just remembering certain commands. These skills are essential for when you are working collaboratively on software, and they’re definitely some of the most valuable ones I’ve gained throughout my internship.
Stress testing:
Any bridge being constructed must be stress tested to ensure that it is structurally sound. Part of the process of building my bridge to being a software engineer was writing tests for my code. My university courses had often put emphasis on the why for writing tests, although they had provided little practice on how to write the tests and what to test for.
There were occasions when I could implement the functionality for a feature within a couple of hours but then found myself spending days trying to write their tests. To begin with, I had difficulty writing tests using Ruby’s testing tool RSpec but with more practice I found writing the code for the tests easier.
A more persistent issue was knowing where and how much to test. I often found myself trying to walk the line between too much test coverage and too little. You don’t want to create redundant tests, as test suites can be expensive, but you also want to make sure you’re adequately testing your new feature. There was also uncertainty about whether I was testing in the right places. I still find writing tests difficult, although nowhere near as much as when I started. Practise and support from others have allowed me to develop this skill from nothing. I owe a big thank you to all the Workflow engineers who consistently lent a helping hand during their busy schedules. Without their help, this is definitely a challenge I would have struggled to overcome.
Crossing the bridge:
Looking back at this summer, and where I was when I started this journey, has allowed me to understand how much I’ve developed and appreciate the value of having real-world experience. A key motivation for me to do an internship was to gain experience and also create work with impact. Within my first few weeks, that goal had already been achieved, as my work was shipped to production as it was completed. I overcame personal doubts and found confidence in the work that I produce. I also learned from and overcame the technical hurdles of Git and testing.
None of this would have been possible without the support from my team, and from my buddy in particular. The working culture and experience here is unrivalled. So, whether you’re considering applying or have just received an offer for an internship position here at FreeAgent, I would say have confidence in yourself, treat failure as an opportunity to learn and most importantly enjoy it. My time at FreeAgent has allowed me to learn, and has most importantly bridged the gap between education and the real world.