Over the last few months, the folk here at endjin have embarked on a journey to recruit a new cohort of graduate apprentices and interns. The interview process has been intense, somewhat emotional, and incredibly rewarding.
One of the main questions that we were asked during this process is "what does your average day look like?", as I'll go on to explain, that was quite a tricky question to answer, so we expanded this to the broader "what does your average week look like?"
A large part of the apprenticeship, especially the first year, is focused on training and development.
In the first year, we dedicate 50% of a graduate's time to structured training. This includes:
- Working through learning materials (books, online courses)
- Working through small coding exercises (relevant to projects that we're working on!)
- Adding small features, fixing bugs, or adding tests, benchmarks and documentation to our OSS projects
- Mentoring calls with experts in the team
- Writing, presenting, and reflecting on what they've learned
As you progress through the graduate scheme, the time dedicated to structured training is reduced, as we shift graduates towards a "learn as you work" approach, where the time needed to assimilate new information is built into the estimates for a project. The skills needed to "learn as you work" are crucial when you work in an industry, such as technology, that is constantly changing!
(Also, this definitely doesn't mean that we are expecting anyone to be doing the necessary training outside of their "working" hours, it just means that we are able account for the upskilling as part of our project planning. And, we are able to do this because we have ensured that those working for us are able to form a solid base of knowledge on which they are able to build new concepts).
Every new graduate is provided with a Pluralsight subscription. This gives them access to a huge range of courses, ranging from C#, to Git, to Azure, to Agile working. We also provide them with relevant books (including "Programming C#8 by Ian Griffiths!).
The exact materials that graduates end up covering depends on what they're working on at the time, what will help them with upcoming projects, and, most importantly, what they're interested in!
These courses and books provide graduates with a well-rounded base knowledge on which they can start to build experience.
Alongside training materials, we think it's vital that graduates get a chance to put what they're learning into practice. Alongside pairing on projects with others in the team (which I'll talk more about shortly), we think it's important that they get the chance to work through some problems on their own.
We do this in the form of small exercises, with a well defined outcome, that the graduate can work through and receive feedback on.
These exercises will always be relevant to a project that the company is working on, it won't be wasted work! But they provide graduates with the space in which to apply their problem solving skills in these new domains.
Throughout the week, graduates have mentoring sessions with different members of the team. Who exactly these sessions are with depends on what the graduates are working on at the time. But, generally, these sessions will be with someone who has a lot of relevant experience who is able to give insight and answer any questions around what they've been learning.
This may consist of the graduate asking questions about something they've been reading about. Or, it might be a chance to talk through their solution to an exercise they've been working on and get in-person feedback on their approach.
A great example of this was when I was working through Advent of Code a couple of years ago (which is a daily coding challenge which runs throughout December). I had a weekly call with Ian in which we talked through my solutions. During these calls I learnt a huge amount about standard algorithms that are often applied to the types of problems I was solving.
Writing and presenting
One of the most important parts of the apprenticeship (and beyond!) is honing the ability to communicate. During the apprenticeship, we ask that graduates spend time each week blogging or recording short videos about what they've been learning.
The benefit of this is two-fold:
- It allows graduates to start developing those communication skills which will be vital when it comes to explaining complex ideas. These skills are especially important in the world of technology consulting, where not only do we work in a field which is constantly growing and changing, but we also need to constantly communicate these new ideas to our Customers.
- It allows us to quickly ascertain whether the graduates have understood the subjects that they've been learning about, and provide feedback / additional information where it would be useful.
The mechanism by which we review any blogs that the apprentices produce is the same that is used for our code. Blogs are written in markdown and a pull request is issued into our site repository. Feedback is then given on the PR, and this is also how we verify the understanding.
The developing of these communication skills brings with it a huge amount of confidence (at least personally!). Five years ago I was incredibly uncomfortable talking in front of an audience. But, the blogging that I started doing during my first year of the graduate scheme has taken me on a journey that I would never have thought possible.
Through the encouragement of those that I work with I transitioned from blogging to vlogging (and got somewhat used to listening to the sound of my own voice!). From here, I ended up (somewhat reluctantly) signing up to speak at user groups and a number of conferences and found that public speaking wasn't quite so terrifying when you are totally comfortable with the material. And finally, at the end of last year, the content team at LinkedIn Learning contacted me to ask if I'd be interested in recording a course, which was released in April 2021!
The culture at endjin allows you to learn and grow in a safe and encouraging environment. And, through this encouragement I have been to places that my anxious 18 year old self would never have thought possible!
As part of the training we sometimes ask people to take certification exams, e.g. certifications in Microsoft Azure, or Power BI. These are low-pressure exams (it's totally fine if you don't pass first time! In fact we're actively encouraged to take the exam to understand which topic areas need most focus), but the certifications give graduates a specific goal to work towards, look great on a CV, and also contribute towards the company's "Microsoft Partner" status!
Outside of the structured training, graduates will also be working with the rest of the endjin team on our current projects (both Customer and internal).
Throughout the week, graduates will be involved in sessions focusing on one or more of the current projects that endjin are working on.
The projects we work on are very varied, they could be, for example:
- Designing and building data platforms
- Designing and building applications
- Helping Customers make strategic decisions
- Working with Microsoft to increase engagement with a variety of services
- Facilitating cloud transformation
Which projects apprentices get involved in is largely driven by what they are most interested in.
Designing / Planning
Throughout our projects we run many planning and design sessions. These planning sessions might be estimation sessions, weekly planning meetings, or retrospectives. Involving apprentices in these sessions gives them experience of how agile project planning is put into practice.
Usually, for each project, we'll have a planning session on a Monday which involves laying out the goals for the week. We'll also have a weekly retrospective on a Friday where we can reflect on what went well, and where we can improve.
We also run design sessions. Generally these happen more towards the start of the project when we are making big-picture architectural decisions. But, we continue to run them throughout as we discuss the different options for implementing a certain feature, meeting a requirement, or if new information means we need to change tack on our overall design.
In these sessions we encourage everyone to participate as much as possible. We say that at endjin we have "strong opinions, weakly held". We are a company of people that will argue passionately for what we believe in, but are very ready to change our mind should we realise we're wrong. And everyone's opinion is treated equally, from intern to company founder, everyone's input is valuable.
When working on a project, graduates will also pair with different members of the team on the sprint goals for that week.
As a company, we are firm believers in the benefits of pair programming in increasing productivity. Not only does it generally produce higher quality code faster, but it also enables you to spread knowledge around the organisation. Therefore, we use this style of working on almost all projects we work on, whether we are working with apprentices or lead engineers!
These sessions normally involves one person "driving" (typing, moving the mouse, screen sharing - though still very much contributing to the design!), and one person guiding the process. We usually switch up who's filling which role each time we work on a project. We find that this collaborative problem solving is much faster and produces a lot better results - after all, two brains are always better than one!
This can also be a pretty exhausting experience for both parties (and certainly not something I'd be able to do 8 hours a day, 5 days a week!). As the driver you are contributing to the design whilst simultaneously transforming the design into code. And, if you are guiding the process, it is an exercise in effective explanation and communication.
Throughout the week, graduates will regularly be pairing with other members of the team. These pairing sessions help to solidify the knowledge that they have gained through their training, while allowing them to actively contribute to project work.
Alongside the pairing sessions, most of our Customer-facing projects involve at least a few calls each week. These calls could be:
- Check-ins about progress
- Targeted sessions aimed at dealing with a problem
- Weekly sessions where we specifcally help individuals within the organisation to succeed. This could be by helping them to identify what's blocking them, finding ways in which they can overcome these issues, or just letting them vent (we call these "brain trust" sessions)
- Full workshops that we facilitate - for example, when running a data transformation project we might run a workshop with a Customer to help them define what insights they need to run the business more effectively. We then work with them to design the best platform to support their business needs. This could, for example, be a dashboard of graphs, or an alerting system that tells them when things are going wrong!
Initially, graduates will likely be listening in on the calls (though we always warmly encourage people to participate as much as they're comfortable with!). But, as the apprenticeship progresses, our graduates build up their own relationships with our Customers and begin to lead these calls themselves.
Taking part in these calls is an important way to gain real-world consulting experience and build confidence in taking part and leading this kind of meeting.
Calls with the Microsoft product teams
As well as these Customer calls, we also often have calls with members of the Microsoft product teams. These calls give us the opportunity to provide feedback on the technologies and services we use every day. This could be requesting new features, highlighting things in the services that are slowing us down, or sometimes even contributing the the technologies ourselves!
These calls allow us, as a company, and as individuals, to have a real impact on the roadmap for Microsoft's technologies. Our input into these technologies helps to drive the way in which our industry moves and transforms. It is also incredibly valuable to the product teams, as it gives them insight into what it's actually like for people who are working with these technologies every day.
Not only this, but they are also a great way to meet people that are on the cutting edge of this technology space!
Case studies and marketing
As part of our projects we also take the opportunity to create marketing content. This can include internal and external case studies, blogs, conference talks, etc. This is incredibly valuable as it helps us distil down the value that we have provided. It also allows us to promote the company, and, as individuals, our own contributions, skills and impacts!
And with the team...
The last regular weekly component are our internal catch ups. We run three of these a week, on a Monday morning, a Thursday morning, and on a Friday afternoon. Monday and Thursday are "team sync ups" and Friday is more of a "show & tell" session.
Monday sync up
Our Monday morning sync up is mainly focused on laying out the plan for the coming week for each of our current projects. We set out where we think we're going to get to in each project, check that everyone knows what they're working on, and raise any concerns that anyone has.
Alongside this, we use this meeting to identify any opportunities to share knowledge across projects, resuse intellectual property, or make sure we're not duplicating similar work!
We also highlight anything out of the ordinary that might be happening that week - e.g. if there's a full day workshop happening, if someone's got some time off, or if we have a call with one of the Microsoft product teams, or a customer, that we need to prepare for.
It's a great way to start the week as it gives people the opportunity to hear about each other's weekends and see each other's faces before diving into project work!
Thursday sync up
We then have a sync up on a Thursday morning. Here we'll usually check in on whether we think we're going to meet the goals for the week, highlight things that have gone well (and complain about those that haven't...), and again raise any concerns that people have.
Show and tell
The final team call that we have each week is the "show & tell" on Friday afternoon.
Personally, I think that this is one of the best things that the company does to enable us to work effectively remotely.
The session consists of extremely ad-hoc demos or walkthroughs on anything that people have been working on that has been particularly interesting or useful. Each show and tell could last 15 minutes (or 2 hours...), and it's a great way to keep up to date with what people have been up to.
We'll sometimes also use this call to talk about wider organisation-level updates, like any work that we might have coming up, the holidays that people might have coming up, or how we are doing financially this quarter / year.
Again, these calls are a great way to round off the week by hearing and seeing what people, and the company as a whole, have been working on.
Alongside these calls, the other way that we keep up with what each other are doing are "daily updates". We have a Slack (instant messaging) channel in which each morning people post an "update" on what they did the day before. E.g.:
Morning everyone 😊 Yesterday 🔈 Some edits to talk on serverless architectures 🔈 Joined speaker training call from SQLBits team 🧔 General catch up with James 🎃 Caught up with James about Career Canvas 🎃 Paired with Ed on converting role data to new structure 🎃 Started looking at implementing roles/skills endpoints over new data 🔈 A couple of reads through Matthew's API talk deck Today 🔈 Record new intro to serverless talk (they want the speaker to be full screen for the intro) 🔈 Work out what I'm going to say for the ADLS talk and do a runthrough 🧔 Catch up with Matthew about presenting 🧔 Catch up with Ian 🤙 Team sync up 🧔 Catch up with Howard about CLI and content platform 🎃 Carry on updating endpoints
Scanning through these updates each morning is a really quick way of seeing what people are up to. (It also serves as an excellent mechanism for reminding people that you have a call scheduled!)
Not all weeks are equal
It is definitely worth mentioning that not every week will be laid out exactly as above. For example...
Team meet ups
As a company, we run regular full-team meet ups. We think that it's extremely important, even working for a remote organisation, that seeing people face to face is a vital part in building relationships.
Again, this has been a bit harder over the past year and a half. But, prior to March 2020, we were running these about once every six weeks. Usually this was in London as it was easiest for everyone to reach, but as our team grows and changes we will continue to find times and locations that work best for everyone.
At these meet ups we'll usually run longer show-and-tell sessions, get company-wide updates, do exercises around company strategy, and eat an unbelievable amount of food.
These meet ups are a great way to catch up with everyone, both in what they've been up to at work, and socially (we'll usually end up going out for a team meal (or two) whilst we're all together!).
We're very excited to start running these regularly again, and to meeting all our new graduates over the next few months!
Though we carry out a lot of our day-to-day work remotely, sometimes we also get the opportunity to go in and meet our Customers face-to-face (though this has been harder over the past year and a half!). These in-person meetings can be a great opportunity for relationship building, and are a great way for apprentices to experience what life is like at companies outside of endjin.
We are excited to be able to start doing this again soon, not only because it's a really valuable opportunity, but also because we actually really enjoy spending some time with our Customers!
User groups and conferences
Every now and then we also get the opportunity to participate in user groups / conferences. Often this is because someone in the team happens to be speaking at the event - as was the case when 6 of us attended NDC London in January 2020 (this was my first conference talk!). But as a company we also recognise the importance of our graduates being able to attend these events, and (before I'd ever even considered speaking at a conference!) I also attended NDC Oslo in 2019. At the conference I learnt a huge amount about a wide range of topics, including the inner workings of neural networks.
I was also encouraged to take some time off whilst out in Norway, to walk up some hills and see some of the incredible sights that the country has to offer!
Both user groups and conferences are great ways to hear about exciting new technologies, and to meet other like-minded people from the world of tech.
Outside of work
A huge focus at the company has always been around supporting people in maintaining a healthy work-life balance (this was a big part in our decision to go fully remote in 2017!). Working remotely enables you to do things that would otherwise be difficult to do, not only by freeing up time that might otherwise be spent commuting, but also by allowing you to work from wherever happens to be convenient (internet allowing!).
For me this means that I can go for a cycle (or a run if I feel like punishing myself...) on my lunch break. It means that I can work from my parents' for a few days and spend more time with them. It once even meant that I could work from a hostel in the lake district in training for climbing to Everest Base Camp!
Remote working, and the culture at endjin (where no-one is expected to work late or at the weekend), mean that you have a lot more time to do the (non-work) things that you love!
Our apprenticeship is about constant learning and growth. This growth happens gradually over the three years, and is about much more than just the technologies we are working with. But these small weekly increments of development mean that, after three years, when you look back at where you started you'll hardly be able to believe the progress that you've made!