Intern Experience at Appfolio

My experience at Appfolio for the past 5 months has been nothing short of amazing. TL;DR - I've made more friends and participated in more 'extra-curricular' activities than my other two internships combined. If beautiful weather 24/7, programming in paradise, biking, rock climbing, D&D, dancing, or Disney World catch your fancy, read on.

# Day 1

My mentor greeted me at the door with a peach flavored smoothie to welcome me to the team. Everyone I passed by on my first day said 'hi' or waved to all us new hires on our morning tour. My computer already had most of the necessary technologies installed, and I was ready to start programming immediately! Appfolio has a well-organized onboarding program to get new hires familiar with Ruby on Rails and React - if you have no experience coming in, not to worry! You get to build a mini Rails app from the ground up - it takes about 1-2 weeks, but you can also start working on production code in parallel if you want to get your hands dirty and are comfortable with the product! Appfolio also has "Engineering Academy" sessions that they will enroll new hires in for the first few weeks after starting. They are hour-long sessions to help you get familiar with the product, the technologies, and the market around property management. This was definitely the best onboarding process I've ever experienced; it got me up to speed quickly and was a great intro to meet other new hires in the same boat. Even though I thought it was a smooth process, Appfolio is always iterating on it and trying to make it better. My manager asked specifically for input on how it could be improved, and they took my feedback into account almost immediately.

# Work and Customer Impact

My first day was Monday Jun 17. By the end of my 2nd week, I finished onboarding and made my first change to production code! (Adding CA-friendly verbiage to the Financial Diagnostics page). One week later, our team added rent-calculation columns to the Rent Roll report, which is important for property managers in determining their high-revenue units. Three weeks later, we start-to-finished the spreadsheet importer for Fixed Assets, which customers use to import information about movable items like trucks and refrigerators. This tool more than doubled the number of fixed assets in our system, from 40,000 to near 100,000 now in November! It was a dramatic increase in just a couple months. In August we created PDF Invoicing -- creating PDFs of charges that property managers can print out & deliver to tenants who don't have email. This was serious work -- it added a highly-desired feature to our most-trafficked pages: our accounting pages. It required meeting with other teams working on Corporate Accounting to ensure our work integrated with their own new features. By September, we had rolled it out and were responding to feedback. About a month later, about 10% of all customers have used this feature, generating more than 5,000 PDF Invoices with it. These are serious, legally-binding accounting documents, and we finally implemented after fiddling with PDF CSS and modals all the way to linking them to reports and work-orders in Rails!

# Technical Challenges

For those of you reading this and wanting to learn more about challenging problems my team confronts on a regular basis, this section is for you:

Working with Rails engines: Engines are a Rails design pattern that helps segment pieces of the host application into miniature Rails apps called "Engines". This reduces the main app's complexity. However, engines also add a lot of technical overhead: If engine A defines Rails models required by engine B, you need to explicitly "inject" those models into engine B in a special way. Moreover, this makes testing engine B more complex: to test engine B in isolation, you have to make a dummy object within engine B for each injected model. Luckily Appfolio has a whole ‘Engineering Academy’ session to learn how to use engines!

Selenium tests: We have been moving over to React as a frontend instead of Rails server-side-rendered frontends. This means that when the Rails server needs to serve a React page, the app has to load up a bunch of javascript that comprises the React page. In production, this javascript is pre-compiled to speed up its delivery. In local development however, it is not pre-compiled by default. Consequently, my local browser-automation Selenium tests were failing because they were timing out waiting for certain React-powered elements to appear on the page. After some investigation, we discovered that my local machine wasn't pre-compiling the React pages, but instead waiting until test-time to compile and deliver the javascript, which takes so long that the test times-out. We solved it by configuring our local testing environment to pre-compile the React pages. We also found we could speed up our Continuous Integration testing platform (Circle CI) by adding the new React javascript to a list of assets to precompile.

# Extra Curricular Activities

The best thing about Appfolio is the people that work here! Appfolio has cultivated an amazing culture that is collaborative, encouraging, and so much fun. Whenever I have a question, there are plenty of engineers who are excited to answer and take the time to explain new concepts in detail. Everyone in product and dev is open to trying new things that may even take them out of their comfort zone - such as learning Michael Jackson's Thriller dance to flash mob it in public and all over the Appfolio office! And that's not all. In the time that I've been here, I've been able to participate in more activities than I've ever done at a single point in my life:
Appfolio encourages our development teams to visit customers on site. So my team went to visit a customer an hour away in Ventura! We stopped off at a pier and ate some amazing tacos for lunch outside. We have another site visit planned for Camarillo, another town down the coastline.

MVIMG_20190724_154405.jpg

Every Wednesday a group of us Appfolians play soccer during lunch.

We go climbing at the Santa Barbara Rock Gym with other Appfolians after work.

I was able to go to Disneyland for the first time on our tech retreat!

We have hackdays a few times a year where you can make whatever you want.

Tons of Appfolians bike, and there are great trails all around SB. I get to do some fun rides around the area with pro bikers. We've biked downtown to get the best mini cupcakes in the world, we've biked to the next city over to see the beautiful beaches there, and we've biked along the cliffs overlooking the ocean. I also bike to work every day and am always blown away by the view of palm trees and mountains in the distance.

There are plenty of amazing hikes in the area from which you can get a view of the ocean and the mountains all at once!

Some of us also managed to get involved in hip hop and jiu jitsu classes after work at the University of California Santa Barbara campus.

I love Dungeons and Dragons, and another new hire started a group around the same time I started. We fight giants and save (or not) cities every other Monday night.

Once a month, a bunch of Appfolians bring in their favorite board games and play for hours on end after work. Dinner is provided!

Monday nights a group of people join the same server to play Counterstrike Go together. It's a cross-office enterprise - we coordinate with the San Diego office and spend hours in battle. Dinner is also provided!

MVIMG_20190918_130719_1.jpg

Our dev team went on an outing to Santa Cruz island, had a picnic, did some hiking, and tried to find tidepools along the beach.

All of these activities really helped me build great relationships with my co-workers and create a little home-away-from-home. I felt so comfortable learning how to climb, playing soccer with people who actually compete in games, and riding around town with competitive bikers, because the people here are so encouraging and accepting, no matter what skill level I am. Even at work, no matter what knowledge you come in with, Appfolio is a great place for cultivating your skills in a supportive environment. The company culture really focuses on being collaborative (I do a lot of pair programming!), encouraging, fun, and blame-free (if you mess up, you aren't fired, you just get to learn from your mistakes). For example, our team unknowingly made a breaking change to part of the app that generates PDF Invoices for charges. This happened because we changed an API in a separate repo to provide an object instead of an object ID, since we were also in the process of changing the code in our app to expect an object instead of the object ID. However, I Code Reviewed and we merged the JSON API change before we finished CRing and testing the code in our app. Another team who was running through a demo of that portion of the app found the break, and told us about it. We then started brainstorming ways to avoid this type of bug in the future!

# Closing Notes

On your first or second week, you'll be introduced to the rest of the company and asked the question "What is one thing that, if you didn't tell us now, we would never know about you?" When I started, I told everyone that I flash mobbed Thriller with my mom every Halloween in middle and high school. Five months later in October, because of some amazing Appfolians and the support of a very excited VP of engineering, the Thriller dance team went on the road and surprised all of Appfolio with our dance skills. We even barged into a board meeting of all the owners of the company on Halloween and did the dance for them! Hopefully this will become a yearly tradition for the product team! Think of your response to your “fun fact” question wisely, because the answer to this question has the potential to have a very large impact.

ciarra-thriller.jpeg