Cash Engineering Onboarding

As our client teams are growing, we have been working on improving and scaling our onboarding process. Our work started by forming a working group with Android, iOS, Web and Server engineers, brainstorming different ways to help new hires hit the ground running and easily immerse themselves in our core principles. We focused on different ways to incorporate into our onboarding process our engineering principles.

Our onboarding process consists of sessions that provide an overview of different tools and services we use internally. This also includes our web, backend and mobile architecture. These are conducted virtually and led by mobile and server engineers and product managers. We created an onboarding mentorship program, code labs, starter tasks and documentation on our development processes. In this blog post, we’ll share how we created an onboarding program to help Cash App engineers quickly ramp up and be productive.

Mobile Engineering Culture

One of the most important sessions is to introduce Cash App’s mobile engineering culture. We believe learning about the culture early on will help understand the underlying motivation of how we operate. Some of our guiding principles include::

Ownership: No out-of-bounds code in our codebases, only people who care enough to establish new conventions, fix what’s broken, and promote best practices. “We’re all owners.”

Growth mindset: Try things, make mistakes, learn from them. Lower the cost of making mistakes for the next person. There’s no expectation of perfection anywhere in our process.

Open sourcing: Scope your solution pragmatically, but share it as widely as possible. When a project has proven useful, we should open source it.

Community involvement: Involve yourself in the larger community, circulate ideas and opinions outside your own team. Be inclusive, open to, and thoughtful about ideas and opinions from the growing community around you.

Recorded Technical Videos

We’ve created a short curriculum of prerecorded technical sessions. These go over high-level concepts of all the tools and technologies that engineers will be using on a daily basis. Oftentimes, it feels like a lot of information to absorb. Thus, the goal isn’t to know the ins and outs of everything presented. Instead, we want to supply new hires with a toolbox of tools and technologies that we use at Cash. Even if they haven’t mastered how to use them, they’ll know what is available to solve problems they encounter.

“Watercooler Hang”

Engineering Principles: Take care of one another, cross team boundaries to get things done

We want new hires to be able to mingle with others outside their team. They’ll learn about what others are working on and build out a network of people you can reach out to. Two mobile engineers from different teams host this session. Conversations have ranged from technical questions to getting to know one another outside of work.

Onboarding Mentorship Program

Engineering Principles: Take care of one another

The first few weeks on a new job can feel overwhelming as there is a lot of information to absorb. To help new hires ease into their new roles, we started a program where an engineer mentors a new hire for three weeks. These peer mentors are individuals who are knowledgeable in the culture, mission, and nuances of the company. They will have the ability to build a lasting relationship with the new hire through this program, which will allow us to learn and connect globally. We created a guide for mentors to follow for the first three weeks. Their responsibilities include introducing mentees to the wider team, sharing knowledge and context and answering any questions in the onboarding process.

Code labs

Engineering Principles: Show, Don’t tell

We created code labs for Android, iOS and Web to provide engineers with hands-on experience to familiarize themselves with building and testing in our architecture.

Android Code Lab

In our Android app, we use a reactive architecture with Compose UI and Molecule. A new hire is given a skeleton template of each component in our architecture which includes a Compose UI view, presenter and repository. We divided our code labs into four parts where each part walks you through how to handle state and events in these components.

The first part of the code lab introduces how to set up views using components from our design system. We share best practices that are used across teams in naming, setting up previews for different screen sizes and working with light and dark themes. The second part of the code lab shows how to test views using our snapshot testing library called Paparazzi. In the third part, we introduce how to record and verify snapshots, then to view them in the snapshot browser. The final code lab is about how to write and test your business logic in a Molecule Presenter. Along the way after each code lab, new hires can open pull requests to get feedback.

iOS Code Lab

In our iOS app, we use Model-View-Presenter architecture with UIKit, SwiftUI and our layout system called Paralayout. The code lab provides a skeleton template of each component in our architecture which includes a UIKit view, presenter, and a data store. We’ve divided our code labs into multiple parts where each part walks you through how to handle state and events in these components.

The first part of the code lab introduces how we set up views and view-models using Paralayout and components from our design system. Then we walkthrough writing snapshot tests for those views. The second part of the code lab explains how to write and test the business logic in the presenter and data store. New hires who have completed the code lab are open to share their work in a pull request to get feedback from their teams.

Web Code Lab

We have also developed a code lab for our new web engineers. To manage the various web apps and related libraries that contribute to the frontend experience, we use Nx to manage a mono repo. The code lab comprises several sections.

Initially, it guides the engineer through the necessary steps to create a new web app within our ecosystem. We emphasize some best practices concerning how to organize their code within the mono repo and ask them to create a few libraries to support their new application. In the next section of the code lab, we introduce our Continuous Integration system. We instruct the engineer to establish the appropriate configurations to build and publish their fresh web app to the CDN. Finally, we have them modify our service that hydrates and serves the initial templates for our web apps to include their newly published app.

Starter Tasks

Engineering Principles: Show, Don’t tell

We have created a repository of starter tasks for new engineers. These tasks are specifically tagged to be picked up in Jira. We don’t have rigid borders between teams. New hires are encouraged to pick up tasks from the commons or features. These tasks can be for fixing bugs, or addressing tech debt. Ideally, they shouldn’t be too complex where a lot of context is required. However, we encourage the engineer to reach out to the task creator to gain context.

Documentation

Engineering Principles: Ownership

Process is a means and not an end. We don’t have a singular process everyone follows for projects. They vary from team to team. But, we do provide general guidance and a scaffolding to organize and start projects. We created a FAQ style guide that answers questions on experience and design reviews and the expectations between stakeholders. We have templates for engineering design docs, testing plans and product requirements. We also have internal guides for all platforms with best practices. Engineers continually update documentation when needed - outdated or missing information. Lastly, we encourage engineers to use Github discussions to encourage organization wide discussions and get feedback. It’s a good repository of past decisions and their reasoning.

Feedback from new hires

We’ve been running this onboarding program for the last 8 months and we’ve collected great feedback from engineers who attended. New engineers found the technical videos and codelabs to be helpful in developing a better understanding of the tools and architecture we use. New hires have indicated that the engineering culture presentation and watercooler hang also helped them provide insight into how the engineering team operates and was a great opportunity to meet other engineers.