How an intern outdid a senior engineer…
With mentoring and coaching, could a 3rd year software intern out perform a senior engineer?
Last year, Findmypast decided to create our first ever software internship program which we piloted in the Dundee office. Given the time required to set it up and select just 2 applicants while still meeting business objectives, it could have been risky - especially as we are still a relatively small company.
But we wanted to give it a go for several reasons:
- we wanted to build better relationships with the universities in Dundee
- we wanted to see if we could turn a third year student into a full stack developer
- we wanted graduates to be impressed that they would naturally want to come work for us
- and if it all worked well, we wanted to run it in our London office the following year
Now that some time has passed, we’d like to think that we succeeded. We treated those engineers as our own from the start and we hope we taught them a few things about software development in the process. They led tasks on our product delivery teams, were exposed to lean and agile practices and were given a good understanding of our delivery pipeline set up by our tools team. As a result, both engineers were exposed to more technology and tools than you could shake a stick at!
They outperformed our expectations of a 3rd year student in so many ways. They questioned our requirements, pointed out issues with coding and testing, picked up new languages and so much more. They made valuable contributions to our products and our processes and they made it a fun summer for everyone in the office.
So we think it’s safe to say they are both now full stack developers.
3rd year Applied Computing Student from Dundee University
During my time at FMP, I had the opportunity to work on all three of the engineering teams in Dundee, both product delivery teams and the tools team.
I spent my first month on Doozers working on a new user journey in order to increase site traffic and getting involved with the sitemaps service. When I joined, Doozers were at the start of the software development process and spending time making careful decisions about the projects technology and refining their tickets. Having the opportunity to see these processes was incredibly important since this is something I had learned about at university but had never seen in practice. There was a huge amount of new technology for the team to learn and learning this alongside them was hugely advantageous. This situation gave me the confidence to not be afraid to ask questions, something I previously struggled with and I’m very thankful for gaining this ability.
The next month was spent on T-Rex creating the new customer service application and breaking down the dependencies on the legacy monolith application. T-Rex were in full swing when I joined and it was incredibly rewarding to be contributing to tickets so quickly. Whilst on the team they gave me the opportunity to lead a ticket, which involved writing the C# backend on FMP, the Elixir API and the React UI. Learning how each of the parts joined together and pairing with different members of the team on each part was an amazing learning experience. T-Rex move incredibly quickly in their development and taught me to not be afraid of taking risks and to fail quickly, a valuable lesson that I will take forward.
My final month has been spent with the Spanners working creating the new tools and infrastructure necessary for the re-architecture, as well as carrying out DevOps work. Whilst there, I got the opportunity to pair on fixing the acceptance tests for FMP and fixing problems with service proxy. This taught me how to quickly identify problems and solve them. This, along with Sash’s constant reminder, taught me about the importance of logging to help identify problems which will be massively helpful for my honours project.
The teams here work using Agile Software Development, mostly KANBAN. These practices were covered at university but getting to see these practices in use was very helpful and opinion changing. Previously, I found Pair Programming distracting and didn’t care much for Test-Driven Development. Now, I love Pair Programming since I can bounce my code and skills off another person to develop the best piece of code we possibly can, and I will never write any production code without tests again.
Throughout my time, the company have run a number of workshops. Some of these included topics such as the SOLID principles and design patterns. These were topics that I’d never covered in great detail before and learning about these from people who use these every day has helped me grow as a developer. Other workshops included how to increase my employability by improving my CV, learning about interview techniques and analysing code tests, all led by the people who do recruitment. My only wish would be to have had the workshops more regularly to cover even more content and covering some content relevant to the teams earlier. Overall, the workshops that FMP ran for me as an intern were amazing. I appreciated how the workshops weren’t tailored towards just the placement, but on my future as a software engineer. They helped me to improve the practices that I applied to my software development, and grow as an individual, something I wouldn’t have gained elsewhere.
My time at FMP has been an amazing opportunity and so much more than I expected. Being a fully integrated part of the team and contributing to product delivery has been a massively rewarding learning experience. I hope that FMP decide to continue running their internship program in future years due to the great opportunity it is for students. Most internships don’t involve even half of what FMP did. Their internship program is one of the best and I would recommend it to anyone.
3rd year Applied Computing student, Dundee University
What I Expected
Not what I got! That can have good or bad connotations, thankfully in this case it wasn’t the latter and I won’t be slating the company, but I don’t really know what I was expecting since it was my first time in a professional environment. Something more business-like and boring I guess, but what I found was the office was a much friendlier atmosphere with a wide range of personalities and a huge focus on culture. I didn’t really feel like the intern or anything. I expected to be given side projects to work on that weren’t live projects but I didn’t, I instantly jumped on pairing with team members on the actual projects.
What Experience Did I Gain
I worked in two different product delivery teams and a tools team; T-Rex, Doozers and Spanners. T-Rex were creating new tools for our customer service team to do their job while Doozers were creating a new landing page with facts about surnames to help increase the sites SEO traffic and Spanners were building tools for the rest of the company. I worked with people with multiple levels of experience in different areas, with a huge array of tech and it was interesting to see a few projects from the start using tech that was new to a lot of the team members at Findmypast. Something I gained a HUGE amount of experience in was test driven development. It’s everywhere here. From uni, I had a rough idea of why we write tests but I missed out on so many reasons why you’d even consider TDD.
Working for a tools/DevOps team was interesting. I enjoyed the idea that we were developing tools for developers, especially after using the tools myself on the two product delivery teams. The challenges instead were delivering to developers who are tech savvy and internal, ending up as tech support and pushing for their tools to be adopted by the rest of the company. Regardless of team, one huge thing I took away was that sometimes things just don’t work, have to be thrown away or the difficulty curve is a steep cliff upwards, I saw and experienced this first hand and felt demoralised myself. But it’s just part of the job and happens, the more times you experience it you understand it just happens and that the code you wrote yesterday is terrible compared to today.
We had weekly workshops were we go taught about concepts ranging from agile principles to development practice’s, by people who used them every day. These helped bridge gaps of knowledge that was missing such as the SOLID principles which are a pretty big deal. We also had multiple workshops on concepts such as how to gather requirement’s properly and why they’re so important, task estimation, a wide array of design patterns, TDD, debugging and error tracing and agile principles such as the difference between Scrum/Kanban. We also has some more general workshops such as reviewing our CV’s and interview techniques, open source vs closed source, and the difference between working for a big company and a small company. One of the more unexpected things we did was have me sit in on a phone interview. It was an interesting experience anyways. During any interview I always felt the interviewer was out to get me, but being on the on the other side in this case showed me, there were no real trick questions it makes our lives easier when the candidate is what we’re looking for. Who wants to interview 10 candidates?
Overall on the program
I feel it’s a huge success for me personally as it helped me gain confidence and learn a huge amount from people who’ve been in my position and helped me understand concepts such as SOLID principles which have already seeped into the way I code or work in a team using Kanban which and introduced me to many technologies. Some parts of the program didn’t go as well as we struggled to have most of the workshops in the first month due to holidays. We had regular retros where we gave feedback and acted upon it during month 2 and 3 so we could correct anything before it was too late.
That’s my summary of my internship at Find My Past I wasn’t sure at first if I wanted my summer to myself or an internship but at the end now I feel it was worth it.