Yesterday, I gave a short talk on what the first half of the Apprenticeship were like for me. Today’s post will be a transcript of what I talked about yesterday, so that everyone can get a sense of what an Apprenticeship @ HolidayCheck can be like.

Introduction

Let me tell you a story:

I studied Design. That means, my first contact with code was all about graphics on a screen and user interactions. The reason I kept going with it was because it made me feel empowered. Words I typed became images on a screen that reacted to what people did with them. For the Designer me, that ability felt awesome.

Fast forward to around September of last year, when I decided to join HolidayCheck: I didn't feel that anymore. Writing Software was losing its appeal and after thinking about it, I figured it was because for the first time since I had started, I felt like I wasn’t learning anything new.

I wanted to learn.

No, I needed to learn.

Just around the time I was coming to this realization, Tobias told me about the Apprenticeship program, a six month long safe space for learning, where my only responsibility was to improve myself. If that sounds too good to be true for you, it definitely sounded too good for me too.

Turns out it was true. It still is and if everything goes according to plan, it will continue to be.

The Learnings

Embracing Ignorance

The first thing I learned was how to embrace my own ignorance. And it was liberating. Understanding that there’s so much I didn’t know (and still don’t), has made me realize that the potential to grow is always infinite. As a sample, this is the first version of a list of 5 things I didn’t know (but wanted to learn).

  • Bash
  • Infrastructure
  • Visual Regression Testing
  • NoSQL
  • Next CSS

Every couple weeks, I’ve been going back to it and removing studied topics, while adding some, always keeping the number of items at 5 or 4. Here’s how it looked like after the first update:

  • Bash
  • Infrastructure
  • Visual Regression Testing
  • NoSQL
  • Next CSS
  • Custom Elements
  • TC39

Learning how to Learn

After measuring how much I didn’t know, I had to learn how to learn. In my case, I found out that I learned more by reflection. What that means is I had to discuss something or write about it (sometimes multiple times) to really understand it. In that sense, the apprenticeship has amplified my ability to learn, giving me a space to write every day and to discuss at length with our mentors. And even though I should’ve learned this at school years ago, better late than never, right? Anyway, in this sense, the Apprenticeship has greatly increased my ability to learn, giving me lots of time to write a blog every day and discuss at length with my mentors and colleagues. I learn more from discussion than from a class, so it’s not surprising that I learned to love Unconferences.

Before I started at HC, I didn’t know what an Unconference was. Now I’ve been to 2 of them: our internal allDevs unconf and Socrates Canaries. I can safely say they’ve become my go to dev events. The amount of knowledge that gets shared and thrown around during the couple of days they last is intoxicating and unlike anything I’d ever experienced.

Putting myself out there

Combined, all the talking, blogging and Unconference going has helped me lose the fear of putting myself out there, to express opinions and show vulnerability in the internet or a room full of people. I’m usually a very introverted person, so this is a big deal for me. Looking back, I've:

  • Written 64 blog posts (and counting)
  • Organised and hosted 6 Code, Coffee and Conversation sessions, a space where we discuss a topic without the need to come up with any conclusion.
  • Held 2 very impromptu Unconf sessions at Socrates Canaries on Core Beliefs and Learning Haskell as a JS person.
  • And very recently, wrote and sent an abstract for a conference’s Call for Papers. First time ever for me and something I had wanted to do for a while but never got around to doing.

The apprenticeship has helped me go far and beyond my limits by both pushing me and giving me the space to do it. Now, speaking of leaving comfort behind:

Haskelling

I’ve been learning Haskell ❤️. After 5 years of focusing mostly on Javascript and other Frontend Technologies, learning a purely functional language has been another big leap out of my comfort zones. But it’s been immensely worth it. And although it’s not a language we use extensively at HolidayCheck (yet), the principles I’ve been learning will surely help me in the future.

Something else I learned and have spent a lot of time on, can be summarized as:

Communication > Code

I believe most engineers spend more time communicating in one form or another than writing code. Reviews, pairing, tech talks and scrum meetings, they all have one thing in common, and it’s not lines of code, it’s collaboration. And when we’re working together with other human beings, being able to communicate our thoughts and ideas honestly, respectfully and effectively is of paramount importance. It’s also hard, and requires a lot of reflection and practice, forcing us to be less opinionated and keep in mind what we went through to build up our opinions before passing judgement around. In the end, it’s all about developing our empathy to others.

Testing

I’ve written more tests in the past 4 months than I had in the past 5 years of my career. I’ve studied and practiced Test Driven Development using both Unit Testing and Property Based Testing. But perhaps more importantly, I’ve understood the value of tests and why we always want to have them. It’s become one of my core beliefs when it comes to Software Development.

Division of Time

The Apprenticeship proposes 6 different categories to work on:

  • Communication
  • Learning
  • Testing
  • Tools
  • Software Design
  • Agile Methodologies

According to my Notion board, I have 96 “completed” tasks. But out of those 96, there are about 80 that have multiple categories assigned to them, so there’s no really accurate way for me to say how much time I’ve spent on each. But if I had to, I would say that:

  • Communication => 30%
  • Learning => 20%
  • Testing => 20%
  • Tools => 10%
  • Software Design => 15%
  • Agile Methodologies => 5%

If you’re wondering why the separation looks like this, I have a very clear answer for that:

I don’t know 🤷🏽‍♂️

No, seriously. The six categories wrap almost, if not all of Software Development. They serve a really important purpose in creating structure for our learning process, but the separation will probably vary a lot between participants of the program. Everyone’s path looks different. We all got here by doing this and that, but no 2 people ever have the exact same experiences under their belts. In my case, I found out early on that Communication was to be my biggest focus point, perhaps because I felt it was important and considered myself weak in it. But someone else’s may be completely different, and just as valid.

Then again, that’s what makes this program so great, that even if it’s not personally tailored to everyone, it’s so flexible that each person tailors it by themselves, even if they don’t realize it.

Parting Words

The apprenticeship may be coming to an end. But it sparked a drive to learn, improve and share my knowledge that will remain after it’s over.

From what I’ve seen so far, HolidayCheck is full of people who share that drive. And we should do everything possible to avoid losing it. I know I’ll do my part.