Having joined the co-op program relatively late in my university career, I decided to string along my four required work terms in a span of 16 consecutive months. When I began looking for my third work term placement I was still on vacation. Since it was still relatively early in the application cycle, (as much as I should’ve) I didn’t want to spend an excessive amount of time applying for jobs while still on vacation. I spent my time only on companies that I had keen interest in working for. One of the companies that had caught my eye was Bench Accounting.
Earlier that year, I was part of a UBC club called eProjects and was involved in facilitating an office tour for our club members. Although I wasn’t able to attend that day, I heard many great things from those who went, some of which include a great working culture, stunning office space and an innovative engineering project. Since I felt that I had some connection with Bench already, I decided to spend a little bit more time perfecting my application. Luckily a few weeks later, I received a call from their recruiter asking to set up an interview.
The overall interview structure was pretty standard. It was an hour long interview which included a few behavioural questions, a technical portion followed by time for any questions at the end. The technical portion of the interview was fairly different from any of the previous interviews I’ve had so far. Rather than focusing on writing an algorithm to a problem, the question was more oriented towards database design which I actually enjoyed.
Funny enough, when re-confirming the time of the interview on the day it was happening, the number I attached on my email to recruiter was off by a digit. It wasn’t until a few minutes into the interview when I hadn’t received a call yet did I realize that I sent the wrong number. Despite my blunder, the interview process as a whole was a very pleasant and positive experience.
On my first day, I was greeted by other various new hires (co-op and full time) that belonged to a variety of roles such as sales, accounting and design. I would be the only engineering intern for this work term. As part of on-boarding, we went through training which they call Bench Academy. It was a three day journey of learning about the culture, company setup, communications, and values. At the end, it was a rewarding experience as I gained insight on the many intricate processes involved in the day to day of a bookkeeper and provided additional context for the application I’d be developing for.
At the very moment my computer and setup was all sorted out, I was assigned a few bug tickets to begin investigating. The tickets ranged from some simple front end and back end bugs. I found this to be a good way of allowing myself to get familiar with each repository and the code base as a whole. As Bench is a relatively young startup, the technology stack incorporated many of the newer technologies and frameworks such as React and GraphQL. Alongside the newer technologies, the code base also incorporated Scala, Java and Go. I found it to be a very enriching experience to be able to have the opportunity to work with so many new (to me) technologies all at once.
The first few weeks at Bench featured an incredibly steep learning curve for me. Having had the first two of my co-op work terms as an iOS software engineer, my experience with web development was slim to none (played with a few HTML components here and there — so basically none). Bench however held up to their side of the bargain. On the job posting, one of the benefits for working at Bench was world class mentoring and let me tell ya, it really was world class. Throughout my work term, everyone on the team was extremely willing to help out with any of the questions that I had along with providing extra context on the problem to help me understand concepts better. I went from barely knowing what an API endpoint was to feeling comfortable in attempting web development side projects of my own and this was all thanks to the supportive and encouraging mentors from Bench.
Throughout the term, I was tasked with creating a form that allows members of the Bench sales team to create clients in our database. As development progressed, the form would increase in complexity to include searching for existing users in the database, attaching new clients to existing users and optionally sending automated welcome emails to the newly created users. Developing this project involved diving into a variety of repositories and ensuring that dependencies were set correctly was a fairly tedious task. However despite the hurdles, it is quite satisfying to see everything come together in the end.
Every quarter, the engineers at Bench host a two day hackathon which allows engineers to work on a prototype that follows a certain theme. The most recent hackathon was Bench to the Future themed which featured two categories: Bench 2020, some prototypes that can be applicable and/or shippable in the near future and Bench 2030, prototypes that are still a ways away into the future. The team that I joined worked on porting our iOS app to work on Android. This actually proved to be a bigger challenge for us than initially anticipated. Still fun though!! While being in a small team has its perks, it can be nice (especially as a co-op) to work with the engineers on other teams.
Working here at Bench has allowed me to experience another classification of company which is that of an established startup. This is a contrast to my first two work terms included an early stage startup and a large enterprise. Another one of the goals I had for my third co-op was to (temporarily?) deviate away from iOS and explore other types of software development. I was fortunate to have great support and mentors for my time here at Bench — they gave me the confidence to build web projects of my own in the future.