Reflecting on my first three months as a junior software engineer at tails.com
Wow. What a company. I can say with all honesty that my first few months at tails.com have been nothing short of spectacular. Like many of us, the pandemic prompted a huge re-evaluation of what was important to me in my career. I made myself a promise that I would never work for a company whose ethos I didn’t believe in, one which didn’t respect my time and my hobbies, or one which put profit above all else. And what can I say, so far tails.com has been the perfect match. Who knew ‘work’ could be this… fun?
What makes tails.com different
Unfortunately, it’s often the case that as a company matures and develops its technology, the work gets more and more distanced from what they initially set out to do. Many companies start with the goal of ‘making the world a better place’, yet, in the constant pursuit to make things more efficient, more intelligent, and more profitable, many will end up losing sight of their initial purpose. All too often, this results in a culture where engineers become disconnected from the product they are building and management becomes driven more by appeasing stakeholder targets than innovating new ways to better solve their initial goal.
At tails.com, the purpose is just as clear now as when they began back in 2014: we are using modern technology coupled with the expertise of veterinary experts to ‘change the world of pet food for good’ and improve the lives of dogs and their owners. At the heart of each decision is this omnipresent company ethos, and I think it’s this simple motivation that has birthed the extraordinary culture I’m experiencing today. Before all else, the core aim of improving the lives of dogs and their owners always comes first - the business just happened to become very successful in the process.
The culture
On top of this, tails.com take their culture very seriously. They strongly advocate that every employee 'brings their whole self to work everyday', and encourage every single person to be unequivocally themselves. Through embracing the quirks which make us different, tails.com has built teams of diverse individuals from all walks of life who are encouraged to bring their own unique perspective to each and every problem they face. (It also means we have some really fun socials.)
Now, this all may just sound like generic marketing talk, but let me tell you… the positivity and wholesomeness this generates across the company is entirely real - and it’s incredibly infectious. You can feel it in every Wednesday ‘bagel chat’ with a random employee across the business, every company-wide Monday midday meeting, and every Friday engineering team social. You can feel it as you walk through the beautiful Richmond office surrounded by people smiling and playing with their dogs. But, most importantly, you can feel it in the work you do day-in, day-out.
The hiring process
As many of you may be familiar with, applying for software engineering positions can be absolutely exhausting. It’s not unusual for companies to require passing exam-style coding problems (aka Leetcode) which can take upwards of two hours to complete before you are even placed in front of a real person. Now, on its own, that doesn’t seem too bad, right? Why shouldn’t you be expected to pass a competency test before being considered for a job?
Well, the issue is that these problems are often so abstracted from the day-to-day work of a software engineer that even the most competent engineers will choose to spend weeks or months preparing to solve these very specific problems. Couple this abstract complexity with the fact that during a job search you will typically complete these assessments for dozens upon dozens of companies. Now stack that with getting rejection after rejection without ever speaking to a real human. You can see how this could be potentially exhausting and draining, right?
This is where tails.com first stood out to me. This wonderful paragraph in their job advert:
“We don’t use algorithm puzzles in the hiring process. After a phone interview with an engineer, you’ll get a short take-home test directly related to the work we do every day. After that, we’ll bring you in for a round of interviews”.
So, of course, I brushed the dust off my CV and submitted my application. From the first interaction with my manager to be, Tom, I knew tails.com was a place I would love to work. After a quick chat about the role, my experience, my skill set, and the culture of the company, he pushed me through to the next stage and sent over a short take-home test. In this, I was given a weekend to create a basic web application that incorporated and displayed some simple business logic. It wasn’t overly complex and I could research anything I needed whilst working on my submission.
Compared to the exam-style questions I described earlier, I felt that this approach more accurately reflected the job I would be doing and, in removing all of the artificial pressure, it really enabled my skills and my aptitude to shine. Sure, it took a bit more of my time, but I thoroughly enjoyed the task and I’d choose this approach over using recursion to solve yet another abstract binary tree problem any day. The effort clearly paid off because after my submission was reviewed, I was enthusiastically invited to the next rounds of informal interviews and subsequently offered the job!
The first month
Onboarding remotely will always be a struggle, and I’ll be honest, my onboarding wasn’t perfect. There were some teething issues in setting up my dev environment on my shiny new MacBook with the new M1 chip as many dependencies for our projects had not been updated to support the new arm64 architecture. However, technical problems aside, I think my team did an outstanding job of welcoming me to the pack and helping me get through the initial issues. At the end of the day, the remote onboarding struggles are a small price to pay for the phenomenal freedom and work-life balance that tails.com’s hybrid working approach offers so I wouldn't have it any other way.
From the very first week I was simultaneously given both the space and the support to get up to speed with everything at my own pace with very little pressure to complete tasks within a set time frame. This meant I was free to explore the codebase, research the tech stack, learn the design patterns, and experiment as I saw fit. This approach took away almost all of the stress in starting a new company and enabled me to focus my time on soaking up as much new information as I could in order to quickly become as knowledgeable and productive as possible.
Additionally, as part of the onboarding process, I was invited to a week of ‘indogtion’ sessions with a small group of new-starters. This involved meeting with every single department in tails.com and exposed me to all areas of the business.
For example, there was a very insightful session with the head vet, Sean, about the importance of dog nutrition; a session with the CEO, James, explaining the origins, purpose, and history of the company; and an engaging discussion about tails.com’s data-driven culture with the head of data, Alan. These sessions really helped form a bigger picture view of the entire company outside of engineering and gave me an excellent feel for the vibe of the company.
The next two months
Over the next two months, I really began to settle into my role and started to become a little more productive. During this period, I genuinely feel like I learnt more about writing clean, elegant and scalable code than I did in my entire three-year computer science degree. I’ve become so much more knowledgeable in areas such as domain-driven design, test-driven development and agile project management, all whilst enjoying every single day of work to the extent that it’s never once felt like I was studying.
This was, of course, thanks to the fantastic mentoring and support I received from all those around me. This came mostly from the other engineers on my squad who regularly offered their time to hop on a call and pair-program, unblock me when I got stuck, review my code, and, most importantly, just give their time to share knowledge and talk about their experience.
I also found that those outside my team were more than willing to share their time and offer support. Whether that be through answering a quick slack message, demonstrating a project to get me up to speed, or in presenting a weekly lightning talk. These weekly sessions provided a half an hour slot every Friday for an engineer to give a short presentation to share their knowledge on any topic they choose. From these, I've learnt about a range of topics such as functional programming or advanced GitOps, and even given my own talk about brewing barista grade coffee from home.
On top of the regular mentoring, I was also given one afternoon a week (10% of my time) to focus on my own personal development. For a junior engineer eager to learn, this time has been absolutely invaluable and has allowed me to focus on getting my skills up to speed in the areas I knew were lacking.
So, every Wednesday afternoon, I break my week up by popping to a local cafe with my laptop and a book (currently Clean Code by Robert C Martin) to take a break from everyday work to focus on myself. My manager completely supports this and genuinely makes it his mission to support my professional growth every way he can. I’m literally getting paid to learn… What more could I really ask for?