Work Term 4 - FreshBooks
Company History
FreshBooks is a software company that provides accounting software as a service for small businesses. It was founded in 2003 by Mike McDerment, Levi Cooperman, and the University of Guelph’s own professor Joe Sawada.
The company started out of Mike’s basement as 2ndsiteinc, a four-person design agency. Out of the frustration of invoicing their clients using Microsoft Excel and Word, Mike decided that there must be a better way and created it himself.
Over the years the company has grown considerably. It now has over 250 employees and the platform is now used by over 24 million people worldwide. FreshBooks’ new head office is in what was previously a rubber factory located in Toronto’s West end Junction district, which despite its deceptively non-descript exterior, is bustling with excitement on the inside.
Company Culture and Values
FreshBooks is built around what they refer to as PORCHFEST, an acronym for the companies nine values: Passion, Ownership, Results, Change, Honesty, Fun, Empathy, Stretch, and Trust. These aren’t just from some mission statement hidden behind a smallprint link of their corporate site either, its really emphasised from day one that they serve as the key metrics for success and serve as the foundation for business decisions by leadership within the company.
Diversity, inclusitivity, and transparancy are also highly emphasized. Everyone from phone support to leadership work side by side in a shared open space. The company holds quarterly “All Hand meetings” and opt-in weekly “Short Hand” meetings where everyone in the company is invited to share successess and shortcommings in a townhall setting. The company has PhD consultants on staff from feminuity and TalentEd who work with employees one-one-one and company-wide to try to identify and address personal and organizational barriers to professional advancement. Additionally, they have an inclusivity circle group and hold events like their yearly LGBQT+ Pride BBQ to raise social awareness.
Working At FreshBooks
Each term FreshBooks hires about a half dozen Coop students which are spread accross their various teams. Teams are cross-functional, each having a Product Owner, Agile coach, designer, lead developer, and typically 2-5 full-stack developers. During my 8-month stay between January and September 2018 I worked on team Cortado as a full-stack developer.
Overall the office is pretty laid back. Its dog and kid friendly, has core hours so you can come in and leave more or less whenever works for you, and offers employees the option to work from home as well. Other perks of the job include, but are not limited to, free breakfast, snacks, beer, weekly catered lunch, quarterly team outings, an onsite gym, arcade area, nap rooms, as well as weekly yoga and meditation sessions.
Teams are free to chose their own management style and most chose to employ some interpretation of Scrum. In the case of my team this involved rituals like daily 5-minute morning stand up meetings, weekly task planning where we formalized the acceptance critia for tasks, a weekly grooming meeting where we estimated to effort to complete tasks, and bi-weekly retro meeting where we performed a post-mortem of the previous sprint.
FreshBooks’ tech stack uses a variety of web technologies including, but not limited to MySQL, Redis, ElasticSearch, Python, Flask, and SequelAlchemy for their data access layers; Ember.js, HandleBars templates, and SCSS for their website’s UI; Ruby for their authentication service; Capybara, Nose, and QUnit for testing; as well as Kubernetes, Docker, Jenkins, and GitHub used in their deployment pipeline.
Term One
Learning Goal 1 (Technological Literacy): Full-stack developers are generalists. The field involves a variety of skills, including aptitude with front-end, back-end, some DevOps development. Up until this point in my academic and professional career my focus has been on the latter two, so during this coop term I would like to gain more exposure to front-end development in order to be more well-rounded and marketable. This includes things like working with HTML, CSS, and JavaScript to produce the components a user interacts with on a web application.
Although I started by primarily working on backend tasks that I was comfortable with, as I got more experience and exposure to the platform I made an effort to dip my toes into more frontend-oriented ones. FreshBooks’ front-end is a single page application (SPA) built upon the Ember.js 2.0 framework which follows the Model–View–Viewmodel (MVVM) pattern. This is similar to the Model-View-Controller (MVC) pattern that we were taught in class except instead of using a controller it simply binds data between the view and model. Although Ember.js 2.0 is only about 3 years old, in the breakneck pace world of JavaScript frameworks its starting to show its age. Although it is quite capable, compared to newer frameworks like React, Vue.js, and Angular.js it has a noticeably much steeper learning curve. Nevertheless I stuck with it and by the end of my 8-months I became quite competent with it and perhaps even would go so far as say that I even liked it.
An example of a front-end heavy project I worked on during my first term was something called Other Income. To provide some context, FreshBooks’ platform is based around an invoicing workflow, one where a FreshBooks customer manages the income for their sales and services through invoices which are sent to and paid by their clients. The other side of this, the ability to manage other, non-invoiced income, e.g. less formal transactions like selling things on Ebay, sales from a farmers’ market, collecting rent from tenants, etc., had been a feature that people had been requesting for over 10 years.
Like most new features that we developed, the process starts with a mockup provided by our team’s designer and from there it is up to the developers to implement the design. At the beginning of each week we would break up features into tasks, self contained units which have their own acceptance and testing criteria which are typically worked on by a single developer on the team. Later on in the week these tasks would be costed in a grooming meeting, where we as a team would estimate how much relative effort it would take using story points.
Learning Goal 2 (Personal Organization/Time Management): Velocity is an important concept in Agile software development. It is a measure of projected vs actual work done for a given time period, and used in Scrum as a measure of team productivity. Development doesn’t happen in isolation; its important to be able to accurately estimate how long it might take to complete a given task because when one falls behind it can block others and in turn delay the shipment of features. Although I received an outstanding performance review from my previous placement at Tulip Retail, this was mentioned as a possible area for improvement. Over the next 4 months at FreshBooks I would like to take this advise and improve my ability to consistently provide accurate task effort estimations.
Other Income required a lot of custom JavaScript-based components and SCSS wizardry to get right– neither of which were my particular strong suits. Accepting and taking into account my inexperience in this area I learned to be more conservative with time estimations. An example of a tricky bit was the Other Income used to quickly add a new transaction from the website’s dashboard page. Although it looks simple enough a lot of things needed to be taken into consideration including validating fields, ensuring that it was responsive to different orientation and device sizes, error handling, and styling.
Another tricky bit was creating a visualization for Other Income entries. This entire graph is rendered and animated using JavaScript and reacts to user changes on the fly. So, for instance if the user adds an entry using the popover the graph will update without needing to refresh or leaving the page. This is achieved using computed properties in Ember.js which under the hood use the Observer pattern to listen and trigger changes on the page asychronously.
Term Two
As I mentioned previously, I decided to stay on team Cortado for my second term as well. Compared to the other teams Cortado was quite small, having only myself and two other developers. I enjoyed this dynamic because I felt asthough it afforded me more independence within the team and the ability to see the smaller features we were assigned through to completion since they had shorter timelines. For the last 4 months of my placement I primarily worked on a feature called Chart of Accounts. The Chart of Accounts works as a sort of interactive report that allows users to see all of their accounts at a glance and create what are known in the accounting world as Journal Entries.
Working with Journal Entries has probably been one of the most complicated tasks I’ve worked on in my professional career. This difficulty was twofold. On the one hand it required a reasonably detailed understanding of accounting principles– a domain I previously had no familiarity with. On the other it was technically difficult because it required reconsiling and maintaining consistency between a normalized entity-based representation of user data with a distinct denormalized log-based one. Despite these difficulties we were able to ship Chart of Account on time, something I was really proud of.
Learning Goal 3 (Written Communication): I would like to improve my ability to collaborate with others over the course of the co-op term. Soft-skills like communication are often emphasized by employers in this field. Real world software development happens in teams and the ability to communicate technical ideas with others effectively is important to hone.
Even though I tend towards introversion, I tried to take opportunities like these to step out of my comfort zone, to make the effort to participate in activities and meetings and make an impression. On my last day I volounteered to demo Chart of Accounts at the company-wide show and tell meeting. Despite my apprehention of public speaking, being able to show off everything that we’d been hard on and leaving knowing I had tied all loose ends was a great bookend to my time at FreshBooks.
Conclusion
I’d like to thank everyone at FreshBooks for what turned out to be an amazing work term. It feels almost surreal going back to University because I really started to feel like I was just another member of the team and almost forgot that I was a coop student. I’d like to thank everyone on team Cortado for their patience, mentorship, and friendship. Hopefully I’ll be able to see you all next year after graduation!