👋 Hi, this is Gergely with a 🔒 subscriber-only issue 🔒 of the Pragmatic Engineer Newsletter. In every issue, I cover challenges at Big Tech and startups through the lens of engineering managers and senior engineers. Inside Stripe’s Engineering Culture - Part 1Stripe is one of the largest online payment companies and operates one of the world’s largest Ruby codebases. But there’s more to Stripe than payments and Ruby. A deep dive with CTO David Singleton.Founded in 2009, Stripe is a true startup success story. Since its founding, Stripe has raised $8.7B in funding, was valued at around $50B in March this year, and employs around 7,000 people, including thousands of software engineers. In 2022, Stripe processed $817B worth of payments, and more than 100 companies handled $1B or more of payments on the platform. This newsletter uses Stripe for payments, as well as features like Stripe Climate – contributing 1% of newsletter revenue to carbon removal. Stripe is also famous for its unique culture, and engineering culture. It’s a Silicon Valley company – with a headquarters in San Francisco – but it’s not California-centric; there’s a dual headquarters in Dublin, Ireland. Cofounder Patrick Collison is known for thoughtful writing and essays such as ‘Fast.’ The company was early to embrace Ruby as a programming language, and today it builds and maintains the world’s (probably) largest Ruby codebase – with thoughtful tooling rarely seen elsewhere. In general, Stripe seems to have a successful, considered, and intentional culture. But what is the engineering culture like on the inside? To answer this question, I’ve spent the past few months talking with CTO David Singleton and the Stripe team, meeting David twice – once in-person at Stripe’s Amsterdam office, and when I was in the US, via video. In today’s issue, we reveal lots of details about Stripe’s engineering culture that haven’t been shared before. There’s also some helpful takeaways for any startup trying to build a thoughtful engineering culture. We cover:
This is Part 1 of a two-part series on this topic. In the past we’ve done engineering culture deep dives on Meta, Amazon, Linear, Figma, Sourcegraph and Agoda, amongst others. See all deep dives here. The end of this article could be cut off in email clients. Read the article uninterrupted, online. 1. What is Stripe?Many people see Stripe as a payments company. However, Stripe sees itself as far more than just that, even though payments are at the core of the business. Stripe defines itself as the “financial infrastructure of the internet” and is a company with four distinct product groups: Payments is the core identity of Stripe. Since 2009, Stripe has enabled people and businesses to pay, get paid, and to manage all related issues. For example, invoices, taxes, fraud, terminal readers, and identity verification. Connect is a platform that expanded Stripe from being just a payments processor. It allows businesses to integrate payments and financial services into their software and marketplaces. It’s integrated into platforms like Shopify, and also powers GitHub Sponsors. Today, Connect is one of Stripe’s biggest growth areas. Stripe’s financial stack includes Stripe Capital (loans for small businesses and startups,) Issuing (virtual and physical credit cards,) and Treasury (banking as a service) – which is another expansion away from payment processing. It paves the way for Stripe to take on roles traditionally performed only by banks. Revenue and finance automation products (back office) support the running of businesses on top of Stripe. These products include Reporting for administering payments, Billing for recurring billing and subscription management, and Revenue Recognition for simplifying accounting. These four pillars work together, and contribute to business expansion. For example, Stripe Terminal is designed to work alongside other Stripe products, not as a standalone. Platforms like Shopify or Lightspeed use Terminal alongside Connect and Payments to distribute payments hardware to customers. This way, customers can accept payments in-person and online, without stitching together different providers. Most Stripe Terminal hardware is distributed via companies using Connect. 2. Engineering at a glanceStripe employs several thousand software engineers. About 70% work in a hybrid setup with an office, and the remaining 30% work fully remote. Software engineering hub locations are:
The ‘Remote Hub’ is an engineering group of engineers who work fully remotely. It’s a standalone engineering hub, established in 2019 when Stripe had four engineering hubs – San Francisco, Dublin, Seattle and Singapore. The Remote Hub was the fifth such hub, as the company explained at the time:
Engineering rolesFull stack engineering is the most common job family. Most Stripe engineers are full stack, building and maintaining:
It’s easy to understand the preference for fullstack:
Backend or frontend engineering are stated in job listings, to give candidates a steer on where in the full stack a role belongs. However, it’s rare that an engineer does only backend, frontend, or data. It’s much more common for new joiners to take on the work their team needs. Specialized engineering roles are aplenty, as at any larger tech company. These involve specialized domain expertise, such as:
Engineering organization structureStripe operates with a high number of teams, totalling in the hundreds. Larger groups within engineering are:
As an example, an engineering infrastructure team builds a system called Global Payments and Treasury Network, which brings money into Stripe, moves it around, and sends it back out. Many product teams build on top of this critical piece of product infrastructure. This setup is pretty similar to how Uber structures its ‘program’ and ‘platform’ teams. 3. The engineering cultureStripe’s operating principlesStripe’s culture is defined by operating principles. These are three groups of 5-6 principles that define:
Here are two principles from each group:
The operating principles document describes the culture Stripe encourages. Does engineering have a slightly different, tweaked set of principles? No; I’m told the principles are universal, and no function has different principles. The purpose of the operating principles is to set the culture, and determine ways of working. Stripe has been unusually purposeful about its principles since its early days; which is what I mean when I call Stripe’s culture “thoughtful.” As the company has grown, efficient ways of working change. Stripe has iterated its operating principles to drive behavioral change company-wide. Product development at Stripe is a team sport encompassing many disciplines, not just engineering. This is another reason why it’s important the operating principles are not just for a couple of functions, but that the whole company lives by them. The principles are intentionally concrete and distilled from the most effective behaviors of successful employees. I asked David to summarize these principles. He came up with this:
David says:
The importance of helping others succeed is heavily emphasized company-wide. David explains:
Hybrid versus full-remoteThe company has been a long-time champion of remote engineering. The Remote Engineering Hub was established before the pandemic made remote working necessary, not optional. Hiring full-remote engineers also gives Stripe access to a global talent pool. The writing-heavy culture of the company is deliberately emphasized. It was a conscious decision to support remote working styles. Serendipitously, Stripe invested early in remote, and its writing-heavy culture worked well during the pandemic. The business is experimenting with hybrid models, to make the best use of its offices. Remote staff are a very big part of the culture, with almost a third of employees being remote. Stripe tries to foster a vibrant, collaborative culture between offices and among remote employees. Career tracksStripe engineering levels start at L1 for an entry-level engineer and go to L7, the equivalent of distinguished engineer at similar workplaces. L3 is the equivalent of senior engineer at most of Big Tech, and L4 tracks to staff engineer. Stripe has a dual career-track for software engineers and engineering managers. This means that from L3 level, people have the option to transfer laterally into management – or transfer back to individual contributor (IC) by staying at the same level. Stripe also has a “tech staff” descriptor for higher-level ICs. They and EMs are evaluated by the breadth and depth of their impact, and the definition of impact varies by role and level. There have been plenty of examples of people switching career tracks. David tells me many of the most tenured, senior leaders switched between the IC and EM track. We cover more on engineering career paths and the dual track in Engineering career paths at Big Tech and scaleups. “Engineer-ication” is heavily recommended for engineering managers. This refers to managers spending time writing software with their team. Stripe empowers ICs to make decisions, propose projects, and help set strategy. Rigid hierarchy is avoided, where possible. Internal mobilityWhile Stripe tends to hire externally for specialized roles like backend engineer, the company supports engineers moving between roles. Plenty of engineers began as “generic” fullstack engineers, and later worked closely with specialized colleagues, like security engineers, ML engineers, or native mobile engineers. Some engineers transfer to more specialized positions; for example, fullstack engineers have moved to ML-heavy teams and taken on the “MLE” title. Indeed, some ML leads were initially hired as software engineers. The fullstack-to-backend transition is perhaps the most common path. And, of course, others transferred from specialized to more “generic” roles, like fullstack. David emphasizes the importance of colleagues learning from each other. Teams are usually multi-disciplinary, meaning there’s always opportunity to observe and learn from engineers on different stacks. “Deliver something meaningful first, before changing roles.” While internal mobility is supported, Stripe does expect engineers to deliver meaningful work on their own team, first. Then there’s no limit to movement between roles. Planning processesPlanning is a continuous process. Teams update their plans over time as they learn. Updates also occur when something comes up needing immediate attention. At the company level, there’s a strategy that sets out the top priorities and ensures everyone – leadership, managers, individual engineers, other functions – is on the same page. This helps maintain clarity and consistency, while leaving room for individual teams and subject experts to make detailed plans. “Heavyweight” planning is usually biannual. At the start of the year, the overall strategy is drafted. Midyear, lighter-weight planning takes place to update the strategy. It’s worth highlighting this planning cadence was developed as Stripe scaled, and will continue to be tweaked. Planning used to be a pain point. David was candid in sharing the frustration it caused:
We cover more on how planning works at Amazon and most large tech companies in Preparing for Annual or Biannual Planning. 4. Product architects and engineers spending time with customersThe concept of product architectsWithin Stripe, “product architect” describes certain engineers, but isn’t a formal role or job title. It’s the company’s take on an informal role that collaborates with tech leads. Product architects are usually:... Subscribe to The Pragmatic Engineer to read the rest.Become a paying subscriber of The Pragmatic Engineer to get access to this post and other subscriber-only content. A subscription gets you:
|
Search thousands of free JavaScript snippets that you can quickly copy and paste into your web pages. Get free JavaScript tutorials, references, code, menus, calendars, popup windows, games, and much more.
Inside Stripe’s Engineering Culture - Part 1
Subscribe to:
Post Comments (Atom)
I Quit AeroMedLab
Watch now (2 mins) | Today is my last day at AeroMedLab ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ...
-
code.gs // 1. Enter sheet name where data is to be written below var SHEET_NAME = "Sheet1" ; // 2. Run > setup // // 3....
No comments:
Post a Comment