Note: I wrote this a while back. A loooong while back. For some reason it was never published, so here it is, in all of its outdated glory.

It’s been almost 2 months since I finished my journey in HolidayCheck’s apprenticeship program. And when I say finished, I mean it more in the sense that there was a time constraint from the start, but I don’t feel like anything has really finished. Not in the usual sense at least. The six months I spent as an apprentice were a beginning, if anything.

It may seem odd that I’m only now writing about finishing the apprenticeship process, two months after the fact, but I wanted to give myself some time for a real reflection. Time changes our perception of things, and when something is too fresh in memory, it might seem better (or worse) than it actually was. Today, that time has passed, and I feel ready to put my thoughts into words.

Let’s start at the end. My final week as an apprentice had a bit of turmoil surrounding it. The product team I was joining was going through a lot of changes, and it was upon me to make an important decision, one that would change the scope and experience of my apprenticeship. I had to choose between remaining 2 extra weeks as an apprentice, or joining the product team a bit earlier than originally planned. In a sense, this decision was what I had been preparing for these past six months. In the end, it was a matter of trust. I could trust our Scrum Master in that it was the best decision for the team, or I could trust myself that I could make it work regardless of when I joined the team. I decided to put my trust in others, as I had read so many times during the apprenticeship.

In retrospect, I’m convinced this was the right decision, but I’m also quite sure that before the Apprenticeship, I wouldn’t have been able to see it that way. All those days spent thinking and learning about collaboration and communication were paying off. And in doing so, everything about the Apprenticeship and its true value clicked inside my mind.

Growth is not always about numbers

Turns out, how many hours I spent learning Haskell, or reading about Craft and XP are not as important as I initially thought they were. What really shows me I’ve grown is not what I did, but how I am acting now, after the fact. How I make decisions, both on the personal and technical level and how I communicate my intentions are the biggest consequence of all the time I spent learning about multiple topics. It’s not that I can now use VIM at a “bit better than beginner” level, or I can read and write simple Bash scripts, but how those experiences changed my view about technology, and about the work of a person that writes Software. Here’s a list of the things I now hold close to heart and mind:

  • Dogma is bad: Nothing good comes from a dogmatic approach to anything. Everything we experience is experienced in a different way by others. That applies to Software of course, to programming paradigms, languages and frameworks, but also to methodologies. Keeping an open mind to the possibility that what we’ve been doing so far is not always the best is important, and also quite difficult.
  • Code can get complex, but interaction with others always is: Everyone is an universe unto themselves, a veritable black box of information. And just like there are multiple ways to solve a problem in Software and we’re never really sure which is the best solution, there are also multiple ways to interact with others. And, you guessed it, we can never be 100% sure of which one is the best. There are more complex interactions in a team of 4 people than in the biggest piece of Software ever.
  • Explicit is usually better than implicit: Magic is nice. It’s clever. It’s also a pain to figure out how it’s working two months after you wrote it. I used to believe that the most elegant solution was always the best solution. Now, I tend to think more in terms of, which solution will be the simplest to explain to new colleagues, even if it’s ugly. This one really ties into the next one ->
  • Time spent thinking about a solution is not time lost: Being thoughtful about the code we write can be seen as a waste of time. After all, it might turn out that we went with our first idea at the end. But this isn’t necessarily the case. I believe that the time we spend thinking about how to write something, and how it will affect other pieces of our system and other people in our team is the base for good Software. It will fill our code base with compassion, both for other pieces of the code in a really abstract level and our team members in a very real level.

All of these seem really obvious to me right now. But they didn’t 8 months ago, and I can only thank the time provided to me by the apprenticeship program for that.

The product team life

The process of joining a product team after the end of my apprenticeship time was a really smooth one. I had a lot of major advantages when compared to any new team-member who hadn’t gone through such a process. There are the obvious ones: that I knew the people already, a bit of the codebase and a lot of the processes of the company. But there are also some hidden ones.

Starting something new is always challenging. There’s a lot of information coming and you still don’t have tools in place to filter what’s important and what can be safely ignored. Every new employee goes through a process of cognitive overload for the first couple months. In my case, I could extend that process to six months instead of 1 or 2, and that way I could keep my mind fresh and stress free throughout it. When I finally joined a team, I could focus 100% of my effort and energy into the things I knew were important for me now: the team dynamics and the actual code base. There was no noise in the background, because I had already dealt with all the noise beforehand. It was an enlightening experience, and by far, the best way to join a new team.

Coming attractions

Like I said in the beginning, graduating from the Apprenticeship program feels more like a beginning than an end, mostly because I will remain involved in the program for the foreseeable future. I am now part of the team that’s working on it, and also quite excited for my upcoming role as a co-mentor to the new apprentices that will start arriving soon.

It feels like the challenge and learning opportunities of being in an environment where mentorship is important never really end. And I wouldn’t want it any other way.