My journey with endjin began about a month ago, when, instead of starting my fourth year at university, I joined the company as an Apprentice Engineer. I was scared and excited in equal measure, but looking back now, there’s nothing about this decision I regret.
In this post, I will be going over some of the key aspects of the apprenticeship at endjin, what I have been doing these past few weeks, as well as share some reflections on how I think this month has gone.
How did this start?
Endjin was different from the moment I came across their job advert. A graduate role in software engineering that didn’t require software engineering experience, a fully remote company, and an application process that differed from most that I had been through up to that point.
The application process consisted of a first conversation with James Broome, Director of Engineering, followed by a technical interview/pairing session with Ian Griffiths, Technical Fellow, and finished with a call with the whole company. This last stage took me by surprise, since the first (and one of the few) question I was asked was "Do you have any questions for us?". More than a formal interview, it an opportunity for everyone to understand if I would be a good fit at endjin. Meeting the whole company as part of the interview process was a little intimidating at first, but also gave me a first taste of the culture of transparency that endjin has.
One of the particularities of endjin is that they have been fully remote since 2017. Being a student with a limited budget for rent in London, my flat doesn’t have a nice enough area for me to work from, but endjin offers apprentices the option to rent a co-working space. Deciding on one was not an obvious decision, as I didn’t have much experience working from an office and didn’t have a good idea of what to look for, apart from wanting a place within walking distance from home. After visiting a few offices, I ended up settling in one that was a combination of busy enough that I felt stimulated, but quiet enough that I would be able to focus on work. Other aspects I liked were the surroundings – lots of food places for a quick lunch close by –, their breakout areas with comfortable sofas, and that they let me try a few different desks before choosing mine, which allowed me to get a sense of how the people around me worked and where I would feel more comfortable. Knowing how and where you like working is important when choosing a working space, regardless of it being at home or elsewhere, as this will define how you interact with your surroundings. There is no good or bad place to work. Brightness and noise levels, the decoration, the ability to move around the space, and many other aspects will affect different people in different ways, and it is important to work those out sooner rather than later, so trial and error is your best friend!
What am I doing?
Being a small company, endjineers can easily be exposed to most parts of running the company, from the sales process to project delivery. It is for this reason that everyone at endjin is not only a software engineer with excellent technical capabilities, but, sometimes more importantly, a well-rounded individual with great communication skills. This doesn’t mean we all have a record of public speaking, but that we understand what we talk about and hence can do so confidently. This is also reflected in our training as apprentice engineers, which consists of a mix of technical and soft skills.
These are some of the topics I have covered so far:
Microsoft Azure Services
I have recently completed two online courses on Microsoft Azure Services and Concepts. These took us from the basics of cloud computing to how Microsoft, as a cloud provider, offers many services using cloud technologies.
Cloud Computing allows users to purchase compute resources without having to purchase the physical infrastructure needed to run those resources. It provides an effective way of managing resources in terms of cost, energy, physical space, and carbon footprint for companies, and some of its main benefits include a rapid elasticity of the resources and reliability.
Endjin uses cloud technologies to help their clients manage their data more effectively and create solutions for them. The amount of products that Microsoft Azure offers is very extensive and I have to admit feeling slightly overwhelmed when first being introduced to them, but it all became clearer when I tried using setting up a few applications myself.
GitHub is a platform that helps different people collaborate on the same code. It act as a “timeline” of all the times that your code has been modified, so that nothing gets lost. The main branch contains the code that is currently being implemented. When one of the project collaborators want to make a change to the code, like adding, deleting, or modifying a feature for example, they first create a branch, which is an alternate timeline where you can safely make changes to the code without affecting the main branch. When the changes made to the branch are ready to be merged into the main branch, the author can issue a pull request. This is done so others can review the changes you are proposing and modify the branch if they wish. GitHub keeps track of all the changes made to the pull request. Once everyone in the team has agreed to the changes, the branch can be merged back into the main branch. The new feature added to the software will then be available to everyone in the main branch and can later be deployed onto a cloud platform, for example.
.NET and C#
The Microsoft .NET is a generic software framework that provides all the services that the application that you build on top of it will need. It’s called a “generic” framework because of the variety of applications that can be written on top of it, like web applications, desktop applications, or Windows services, to name a few.
C# is a standardised language used to create .NET components and applications. I am currently learning C# with a mixture of online courses (mainly the C# Fundamentals course on Pluralsight), reading through Ian Griffith’s Programming C# 8.0, and pairing sessions with Ian Griffith’s himself.
BDD using SpecFlow
Two weeks ago, the other Apprentices and I attended the "BDD & SpecFlow Masterclass" given by Gáspár Nagy. I had never come across the notion of BDD development before, and my C# programming skills are far from being consolidated, so this was a real challenge.
Behaviour Driven Development is a technique used to bridge the communication gap between business managers and developers, connecting the requirements and the solution. It is a way for developers to understand the requirements that the application needs to fulfil. The three main practices of BDD are discovery, formulation, and automation. First, a user story is chosen to work on. Then examples and scenarios are used to illustrate the requirements. Finally, the automation code is created and the scenarios are turned into passing tests using SpecFlow, which is a .NET BDD framework that executes your scenarios using the automation code you provide.
Since then, the rest of the Apprentices and I have been putting our knowledge to the test by creating step definitions for a content platform using the BDD approach. This was a great opportunity to apply the concepts we had learnt the week before in a safe environment.
If there is one expression that I will always associate with James Broome is the notion of “feedback loops”. This is the idea that things should be tested quickly, so that processes can be adjusted accordingly as fast as possible to not perpetuate ineffective practices. We have been encouraged to apply this to our training as well by testing our knowledge and seeking help as soon as we need to. We do this by asking questions to the rest of the team, testing our knowledge though examples, and presenting what we have learnt during the week in our Fridays “Show and Tell” sessions. This is a meeting we have every Friday where everyone gets a chance to share anything interesting that they have come across during that week. Us Apprentices use this as a chance to present about any particularly interesting or challenging topics we have done through presentations or short demos. This is an effective way to spot anything that we don’t feel confident about, communicating is one of the best ways to check one’s knowledge on a topic.
Reflecting on the past month
During the past month I have realised that learning has to be a life-long commitment in order to have a successful career - especially with the ever-evolving nature of technology – hence why endjin invests so much time and resources in our training. This apprenticeship is going to provide me with a solid foundation to become a software engineer and a consultant, such as core development skills and exposure to how a successful business is run, so that I am later able to keep up with the sector. The learning process also has to be an active one as, for me, the majority of the learning comes from practice. I have been experiencing this on the most basic level with keyboard shortcuts: you first read about them, then practice using them a few times until you finally use them without realising.
This past month has gone by incredibly quickly, and even more so when I consider the amount of knowledge I have gained. The multidisciplinary nature of the Apprenticeship is what excites me the most. In only one month I have seen my confidence grow not only on the technical side, but also in my communication and presentation skills. I can’t wait to see what the next months will bring!