Rippling SDE-1 Interview Experience
SDE-1Rippling | Staff Engineer | Interview Experience | BLR
Staff EngineerRippling | Senior Software Engineer | Reject
Senior Software EngineerSenior SDE at Rippling
Senior SDESenior Software Engineer | Rippling | Reject
Senior Software Engineer11 more experiences below
Summary
Successfully cleared the SDE-1 interview at Rippling with a focus on Data Structures & Algorithms and Low Level Design. The interview process included two rounds: a 60-minute DS&A session with two specific problems and a 60-minute Low Level Design round for an Employee Access Management System. The candidate received an offer after completing both rounds.
Full Experience
My interview experience at Rippling for the SDE-1 position was both challenging and enlightening. I started with the first round, which focused on Data Structures & Algorithms. The first question required me to calculate the total duration to complete all tasks and determine the order of task execution given two 2D lists representing tasks and their dependencies. The second question was similar to LeetCode 1136 - Parallel Courses, which I had encountered before but needed to apply my knowledge in a slightly different context.
For the second round, I was tasked with designing an Employee Access Management System. The problem required implementing several methods to manage access types for employees across various resources. This round tested my understanding of object-oriented design and system architecture, as I had to ensure that the methods handled multiple access types and efficiently retrieved access information.
Overall, the interview process was thorough and provided a good balance between theoretical knowledge and practical problem-solving. I felt confident in my preparation and was happy to receive an offer after successfully completing both rounds.
Interview Questions (2)
Design an Employee Access Management System with the following requirements:
Entities:
- Multiple employees (E1, E2, E3, ..., En)
- Multiple resources (R1, R2, R3, ..., Rn)
Three types of access: READ, WRITE, ADMIN
Methods to Implement:
- grant_access(employee_id, resource_id, access_type)
- revoke_access(employee_id, resource_id, access_type)
- retrieve_access(employee_id, resource_id)
- retrieve_resources(employee_id)
Preparation Tips
For the interview, I focused on practicing Data Structures & Algorithms problems, especially those related to graph theory and topological sorting. I also reviewed system design concepts and practiced designing simple systems. I made sure to understand the problem statements thoroughly and think through possible edge cases. Additionally, I prepared for behavioral questions and practiced explaining my thought process clearly.
Summary
I applied for a Staff Engineer position at Rippling via referral. I went through a System Design round focusing on designing an aggregator app with personalized feeds. Despite feeling the interview went well, I ultimately did not receive an offer.
Full Experience
I applied for the Staff Engineer position at Rippling through a referral. With 10 years of experience, I was invited for Round 1, which focused on High-Level Design (HLD).
The interview involved designing a new aggregator app with personalised feeds based on user interest and liking of publication house.
My proposed solution involved polling APIs of all subscription houses and storing feeds in an RDS database, considering a low volume of 5 million writes per day.
For reads, which had a requirement of 100k QPS, I suggested caching the top 100 feeds per category and publication house. User feeds would then be generated on the fly when a request came in. Since all these components would be in Redis, I expected feed generation to be very fast. I also suggested pre-generating feeds and caching them in Redis.
At the end, I felt the interview went pretty well, but I did not hear back from the recruiter, so I am assuming I was rejected. Some feedback from the recruiter would have been appreciated.
Interview Questions (1)
Design a new aggregator app with personalised feeds based on user interest and liking of publication house.
Summary
I interviewed for a Senior Software Engineer role at Rippling, where I was tasked with designing a delivery tracking system. Despite my successful implementation, I was ultimately rejected, likely due to a floating-point precision issue I encountered.
Full Experience
My algorithmic programming round at Rippling for a Senior Software Engineer position began with a discussion about AI tooling, which felt more like an opt-in despite initial communications suggesting liberty to use it. I chose to opt-out. The interview question required me to design and implement a Delivery Tracking System, including methods such as addDelivery, addDriver, and payUpToTime. A critical constraint involved handling cost precision at 1-second intervals. I found the problem quite straightforward and managed to complete the core implementation within 35 minutes, following a brief introductory chat and project discussion.
The interviewer then spent some time validating my solution with his own test cases. For simplicity, I had opted to use double for cost calculations, a decision I explicitly mentioned and the interviewer seemed to accept. However, my solution exhibited some rounding errors, which the interviewer noted, attributing them to the use of double. Despite this, he generally found the solution acceptable. I received a rejection email three days later. I believe the rejection was primarily due to these precision errors, or perhaps the interview concluded without me having an opportunity to refine the error handling.
Interview Questions (1)
Design and implement a Delivery Tracking System. The system should support operations such as addDelivery(delivery_id, driver_id, start_time, end_time, cost), addDriver(driver_id, name), and payUpToTime(driver_id, current_time). A crucial 'gotcha' constraint specifies that cost calculations must maintain precision at 1-second intervals.
Summary
I interviewed for a Senior SDE role at Rippling. The interview process included System Design, Web Development, and Coding rounds. The outcome is currently pending.
Full Experience
I recently interviewed for a Senior SDE position at Rippling. The interview process was structured into several rounds:
System Design
I was asked to design a hotel reservation system similar to Expedia. The key areas of focus were:- Searching for rooms by date and location.
- Reserving rooms.
- Ingesting room availability from third-party hotels.
Web Question
This round involved designing models and APIs for a questions and answers platform like Stack Overflow. I found this round a bit challenging as we already had some boilerplate locally, which made it difficult to assess how I performed. There were also some follow-up questions related to scaling and sharding.Coding
The coding round presented a problem where I needed to implement functions for a music player. Specifically, I had to:- Add a song.
- Play a song by a user.
- Print analytics based on the number of times a song was played, ordered by the descending number of unique users.
- Retrieve the 3 most recent unique songs played by a user.
Interview Questions (3)
Design a hotel reservation system like Expedia. Focus on:
- Searching for rooms by date and location.
- Reserving rooms.
- Rooms availability ingestion from 3rd party hotels.
Design models, APIs for questions and answers in a Stack Overflow-like system. Additionally, discuss scaling and sharding related questions.
You have functions to add a song, play a song by a user, and print analytics. You need to:
- Print analytics based on the number of times a song was played in descending order of the number of unique users.
- Get the 3 most recent unique songs played by the user.
Summary
I interviewed for a Senior Software Engineer position at Rippling and was ultimately rejected. While I performed strongly in some coding and managerial rounds, my performance in the System Design rounds, particularly the booking system design, led to the rejection.
Full Experience
I interviewed at Rippling for a Senior Software Engineer role with 7+ years of experience, primarily gained in startups. The process comprised five rounds.
Round 1: Delivery Cost Tracking System
This round focused on designing and implementing a delivery cost tracking system. It felt like a standard Rippling question, and I believe I performed well, even tackling the additional complexities. The verdict was 'Strong Hire'.
Round 2: Manager Round
For the manager round, I prepared a detailed PowerPoint presentation showcasing my most challenging project. The manager didn't delve much into technical specifics, mainly asking about SLAs and task division. I received another 'Strong Hire' verdict.
Onsites
Round 3: Rule Evaluator
The first onsite round involved designing and coding a rule evaluator. This was another common Rippling problem. I chose C++ and ended up writing a substantial amount of OOP code. In hindsight, I should have tested my code more frequently midway through the process. While I completed the implementation, there were some errors I needed to debug. This round resulted in a 'Lean Hire'.
Round 4: Design Booking System
This was a System Design round where I was asked to design a booking system. I frankly admit I was unprepared for High-Level Design rounds, having focused on Google interviews just two days prior. The interviewers expected a very thorough, complete answer and didn't engage in the collaborative discussion style I'd experienced at Google. I felt I absolutely bombed this round, receiving a 'No Hire'.
Round 5: Design Stack Overflow APIs
The final round involved designing Stack Overflow APIs. I didn't feel extensive preparation was needed here, as it primarily involved standard follow-up questions on scalability and security. I performed well, getting a 'Hire to Strong Hire' verdict.
Given my poor performance in the System Design round, I decided not to follow up with my recruiter for feedback and received a rejection email two days later. The recruiters were genuinely nice, probably the best I've encountered.
Interview Questions (4)
Design and implement a system to efficiently track delivery costs, potentially including features like real-time updates, cost aggregation, and handling various delivery parameters. The problem involved solving additional parts as discussed during the interview.
Design and implement a flexible rule evaluation engine. This involved substantial object-oriented programming in C++, requiring careful design and implementation to handle various rule types and conditions.
Design a comprehensive, scalable booking system. This system design problem required a full-length answer detailing high-level architecture, API design, database considerations, and scalability strategies, without much interviewer guidance or collaborative discussion.
Design the core APIs for a platform similar to Stack Overflow. The discussion included standard follow-up questions concerning scalability, security, and how to handle various functionalities like question posting, answering, voting, and search.
Preparation Tips
My preparation included crafting a detailed PowerPoint presentation for the managerial round, focusing on my most challenging project. However, I confess my preparation for High-Level Design rounds was insufficient, especially due to my focus on prior Google interviews. My main advice to others would be to thoroughly study Rippling's standard questions and be prepared to deliver clean, functional code, as they expect finished solutions rather than collaborative problem-solving.
Summary
I had a phone screen for an SDE-2 role at Rippling where I was tasked with designing and implementing a service to manage delivery costs with several functional enhancements. I successfully implemented and optimized both parts of the problem.
Full Experience
I interviewed for an SDE-2 position at Rippling. My journey to this interview was a bit unique: initially, I was referred for an SDE-2 role, then my profile was considered for SDE-1 after an online assessment and a recruiter call, but ultimately, they decided to consider me for SDE-2 again. The phone screening focused on a problem that required me to implement a service for managing delivery costs.
In the first part, I designed and coded a service with addDriver, addDelivery, and getTotalCost methods, ensuring getTotalCost was optimized. I precomputed the total cost upon adding deliveries, and my solution passed all custom test cases.
For the second part, I extended the service to include payUpToTime and getCostToBePaid functionalities. I approached this by using a global priority queue where time was represented as epochs, along with the estimated cost, to manage payments and remaining costs. This approach also worked as expected with the interviewer's test cases.
Interview Questions (2)
We are given a list of drivers and the deliveries they are making. Implement a service to compute the total cost of all deliveries. The service should expose three methods:
1. addDriver(driverId)
2. addDelivery(startTime, endTime)
3. getTotalCost()
The getTotalCost() method needed to run in optimized time.
Add two new functionalities to the existing delivery service:
1. payUpToTime(upToTime) → settle the delivery cost up to this specified time.
2. getCostToBePaid() → get the remaining delivery costs left after settling any payments.
Preparation Tips
My preparation mainly revolved around practicing system design and algorithm implementation. I focused on optimizing data structures and algorithms, which was crucial for methods like getTotalCost. I also made sure I could articulate my thought process clearly, particularly regarding object-oriented design principles and system extensibility, which the interviewer appreciated. I believe a detailed and confident introduction also played a significant role in setting a positive tone for the interview.
Summary
I interviewed for an SDE2 position at Rippling where I was tasked with designing and implementing a system for managing delivery driver payments, progressing from basic cost tracking to managing paid and unpaid deliveries.
Full Experience
During my interview for the SDE2 role at Rippling, I was presented with a comprehensive coding and system design challenge. The core task was to build a robust system for a food delivery company to manage its delivery drivers and calculate their earnings. I first had to implement functions to add drivers with their hourly rates, record delivery start and end times, and then aggregate the total cost of all deliveries for a live dashboard. This initial phase heavily emphasized good OOP practices and efficient data storage for time-based data. Subsequently, the problem evolved, requiring me to add functionalities for payment tracking. This involved implementing a payUpTo function to mark deliveries as paid based on a specific time and a getTotalCostUnpaid function to report outstanding payments. The problem statement explicitly mentioned that the solution did not need to be thread-safe, allowing me to focus on the core logic and data structures.
Interview Questions (2)
Food delivery companies employ tens of thousands of delivery drivers who each submit hundreds of deliveries per week. Delivery details are automatically sent to the system immediately after the delivery.
Delivery drivers have different hourly payment rates, depending on their performance. Drivers can take on, and be paid for, multiple deliveries simultaneously.
If a driver is paid $10.00 per hour, and a delivery takes 1 hour and 30 minutes, the driver is paid $15.00 for that delivery.
We are building a dashboard to show a single number - the total cost of all deliveries - on screens in the accounting department offices.
At first, we want the following functions:
addDriver(driverId [integer], usdHourlyRate [float])- The given driver will not already be in the system
- The hourly rate applies per delivery, and a driver can be paid for simultaneous deliveries
recordDelivery(driverId [integer], startTime, endTime)- Discuss the time format you choose
- Times require minimum one-second precision
- The given driver will already be in the system
- All deliveries will be recorded immediately after the delivery is completed
- No delivery will exceed 3 hours
getTotalCost()- Return the total, aggregated cost of all drivers' deliveries recorded in the system
- For example, return 135.30 if one driver is in the system and has a total cost of 100.30 USD and another driver is in the system and has a total cost of 35.00 USD.
- This will be used for a live dashboard
- Do not worry about exact formatting
All inputs will be valid.
Share any decisions or assumptions you make. If you do anything differently in this interview than you would in production, share that.
Before coding, let's discuss how you will store the time data and why.
We want to see good OOP practices. You may look up syntax using a search engine.
The analytics team uses the live dashboard reporting function you built to see how much money is owed in total to all drivers.
Add the following functions:
payUpTo (payTime)- Pay all drivers for recorded deliveries which ended up to and including the given time
getTotalCostUnpaid()- Return the total, aggregated cost of all drivers' deliveries which have not been paid
The solution does not need to be thread-safe or handle concurrency.
Summary
I went through Rippling's SDE I interview process, which included an Online Assessment, two DSA rounds (one of which I struggled with and had to re-attempt), and one Low-Level Design round. Despite positive feedback on the LLD and second DSA, I was ultimately rejected.
Full Experience
I appeared for Rippling's SDE I hiring process.
Round 1 - Online Assessment
2 LC medium-hard quesitons were asked on HackerRank with a time limit of 1 hour. I do not remember the exact questions, but they were oriented towards hard side. Q1 was solved within 20-25 mins, but Q2 had multiple failing test cases due to incorrect approach. I applied a less known approach and was able to pass all test cases.
After few weeks of the OA, I got call from the recruiter. They were asking to appear for an onsite interview the next day. They also discussed about current compensation, notice period and the standard behavioural questions.
The interviews had 2 rounds - DSA & LLD, both on the same day.
Round 2.1 - Onsite Interview 1 (DSA)
In the first onsite round, question was around Median of 2 Sorted Arays. I was able to implement the brute force and then optimal solution but the interviewer wanted something more optimized - even more optimized than a O(log (n)) solution. Got a not so well feedback here.
Round 2.2 - Onsite Interview 2 (LLD)
In the second onsite round, I was asked to implement an Employee Access Management system, and 3 functionalities - grant, revoke and get. I had to ensure I cover all the use cases and present an optimized solution. The interviewer looked quite happy with my solution.
Shortly, they reached out to have another DSA round because the first one did not go well. So another DSA round was scheduled the next day.
Round 2.3 - Onsite Interview 3 (DSA)
I was given 2 arrays - managers and reportees where managers[i] was the manager of reportee[i] with the constraint 1 <= managers[i], reportees[i] <= n. CEO or head of the company was always represented with 1. I had to find the level of the fartheset employee from the CEO. So, I had to basically find the height of the org tree. I did it within 30 mins. All the test cases given by the interviewer passed. They looked pretty satisfied.
Then came a follow-up question - the CEO wants the org tree not to go beyond a height h for organizational efficiency i.e any employee beyond a level h would report directly to the CEO and the subordinates in that subtree would remain as in the original tree. I had to implement this optimally such that the number of reportees to the CEO remain minimized, while also keeping the overall height within h.
Within the time left, I had to discuss and implement the solution. I was able to implement a greedy approach and the interviewer looked pretty happy and I hoped for a positive feedback.
Final Result - Rejected
Still wondering why :(
Interview Questions (4)
The question was around Median of 2 Sorted Arrays. I was able to implement the brute force and then optimal solution but the interviewer wanted something more optimized - even more optimized than a O(log (n)) solution.
I was asked to implement an Employee Access Management system, and 3 functionalities - grant, revoke and get. I had to ensure I cover all the use cases and present an optimized solution.
Given 2 arrays - managers and reportees where managers[i] was the manager of reportee[i] with the constraint 1 <= managers[i], reportees[i] <= n. CEO or head of the company was always represented with 1. I had to find the level of the farthest employee from the CEO, which means finding the height of the organizational tree.
Follow-up: The CEO wants the organizational tree not to go beyond a height h for organizational efficiency. Any employee beyond level h would report directly to the CEO, and their subordinates in that subtree would remain as in the original tree. I had to implement this optimally such that the number of direct reportees to the CEO remained minimized, while also keeping the overall height within h.
Summary
I interviewed for a Senior Software Engineer position at Rippling, which involved two coding rounds, an engineering manager discussion, a system design challenge, and a machine coding exercise. I successfully passed all rounds with strong positive feedback.
Full Experience
Years of Experience: 10 years
Previous Companies: Top-tier startups and product-based enterprise companies
Interview Experience Summary
- Coding Round 1 (60 mins)
Problem focused on Travel Expense Calculation
Included a follow-up problem
Emphasis on strong OOP principles and clean code practices✅ Verdict: Strong Yes
- Engineering Manager Round (60 mins)
Deep dive into latest project and system-level thinking
Covered behavioral questions aligned with Rippling Leadership Principles✅ Verdict: Strong Yes
- Coding Round 2 (60 mins)
Problem related to Driver Delivery Service
Included 2 follow-up scenarios
Focus on best coding practices, OOP, time complexity, and alternative solutions✅ Verdict: Strong Yes
- System Design Round (60 mins)
Design problem: News Feed Service
Discussed fault tolerance, consistency vs availability, monitoring strategies, and scalability✅ Verdict: Yes
- Machine Coding Round (90 mins)
Task: Web API design
Follow-up discussions on security, design decisions, concurrency, testing strategies, and production readiness✅ Verdict: Strong Yes
Interview Questions (2)
Design problem: News Feed Service. Discussed fault tolerance, consistency vs availability, monitoring strategies, and scalability.
Task: Web API design. Follow-up discussions on security, design decisions, concurrency, testing strategies, and production readiness.
Summary
I interviewed for a Software Engineer SDE 2 position at Rippling in India, bringing 4+ years of experience, and ultimately received an offer. The interview process involved multiple rounds, including technical screenings with coding and system design, followed by onsite rounds focusing on coding, system design, and a hiring manager discussion.
Full Experience
🔹 Rippling Interview Experience – Software Engineer
Total Exp: 4+ Years
📌 Round 1: Technical Screening (Coding + System Design Flavor)
Problem: Build a delivery cost tracking system
Asked in 3 parts:
- Cost Calculation
Discussed approach, data structures, and time complexity before coding.add_driver(driverId) add_delivery(driverId, startTime, endTime) get_total_cost() - Payment Tracking
pay_up_to_time(upToTime) get_cost_to_be_paid() - Analytics
Didn’t implement fully due to time, but the approach was discussed and accepted.get_max_active_drivers_in_last_24_hours(currentTime)
📌 Onsite Round 1: Coding + System Design
Problem: Music Analytics System
- Most Played Songs by Unique Users
add_song(songId) play_song(userId, songId) print_analytics() - Recently Played Unique Songs
print_recently_played(userId) print_recently_played(userId, k)
📌 Onsite Round 2: Hiring Manager Round
Behavioral + Project discussion
HR shared prep questions. Discussed one main project in detail.
📌 Onsite Round 3: Coding + Rules Engine
Problem: Validate business rules on expenses
Rules like max total amount, seller type limits, expense type restrictions
Discussed how to model rules dynamically and validate them against expenses.
📌 Onsite Round 4: System Design
Problem: Design a Google News-like aggregator
Talked about crawling, indexing, ranking, and scalability.
Final Verdict: Offer (Verbal confirmation from HR after a few days)
Interview Questions (4)
Build a delivery cost tracking system with the following functionalities:
- Cost Calculation
add_driver(driverId) add_delivery(driverId, startTime, endTime) get_total_cost() - Payment Tracking
pay_up_to_time(upToTime) get_cost_to_be_paid() - Analytics
get_max_active_drivers_in_last_24_hours(currentTime)
Design a Music Analytics System with the following functionalities:
- Most Played Songs by Unique Users
add_song(songId) play_song(userId, songId) print_analytics() - Recently Played Unique Songs
print_recently_played(userId) print_recently_played(userId, k)
Design a Google News-like aggregator.
Summary
I was rejected after a Coderpair round at Rippling where I was asked to implement a rule validation system for expenses.
Full Experience
Got this question in Coderpair round:
We have a list of expense and rules. Aim is to validate rules for each expense.
Each expense is similar to
{
expenseid: "1"
itemId: "Item1"
expensetype: "Food"
amountInUsd : "250"
sellerType : "restaurant"
SellerName "ABC restaurant"
}List of rules similar to
- Total expense should not be > 175
- Seller type restaurant should not have expense more that 45
- Entertainment expense type should not be charged
Run the rules on expense and flag the rule which do not satisfy. Implement following:
evaluateRule(List<rule> , List<expense>)Interview Questions (1)
We have a list of expense and rules. Aim is to validate rules for each expense.
Each expense is similar to
{
expenseid: "1"
itemId: "Item1"
expensetype: "Food"
amountInUsd : "250"
sellerType : "restaurant"
SellerName "ABC restaurant"
}List of rules similar to
- Total expense should not be > 175
- Seller type restaurant should not have expense more that 45
- Entertainment expense type should not be charged
Run the rules on expense and flag the rule which do not satisfy. Implement following:
evaluateRule(List<rule> , List<expense>)Summary
I had a technical screening interview for a Senior Software Engineer role at Rippling in Bengaluru, which involved a multi-part coding question on managing driver deliveries, and I was ultimately rejected without feedback.
Full Experience
I was reached out by a recruiter on LinkedIn with an opportunity with Rippling. I had a discussion over Zoom with her. I got my screening / Technical Interview discussion scheduled after almost a week.
Recruiter had mentioned that I am free to use AI (ChatGPT, Copilot etc) in this round, but I need to tell that to the panelist. The evaluation criteria will be defined accordingly. If I choose not to use, the criteria will be different.
Technical Screening Round
The interview asked me the below question Part 1 Given a list of some drivers and the deliveries they are making, need to write a code to compute the total cost of all deliveries. It needed to have 3 methods
- add driver(driverId)
- add deliveries(startTime, endTime)
- getTotalCost() getTotalCost was needed in optimised time, which I provided by computing cost at the time of adding the delivery - interviewer had agreed to this approach.
I explained the approach and solved by defining 3 classes Driver, Delivery and the main service. The panelist tested it against his test cases and got the expected results.
I had asked for the evaluation criteria to which the interviewer had said let's solve the question as much as possible
Part 2 Add two more functionalities
- payUpToTime(upToTime) -> settle the delivery cost up to this time
- getCostToBePaid() -> get the remaining delivery costs left after settling the payment Discussed the approach for this in O(n), he wanted more optimal solution. Discussed approach for production env based on events to trigger completion and keeping a track of completed deliveries. Then to be paid is as simple as paid minus total cost (from part 1) Agreed on the approach, wrote the code, tested it against interviewer's test cases - worked as expected
Part 3 Implement a method to provide simultaneous deliveries across drivers. He was only expecting the approach. Discussed by sorting and then checking the overlaps. Seemed satisfied and we closed the discussion.
I did all of this without using any chatgpt or copilot.
Received the email from recruiter on the next working day of rejection :| No reasons, no feedback. What were they expecting, god knows. When I replied back to the recruiter seeking feedback - she mentioned, she is yet to receive detailed feedback and haven't heard back since then.
Anyways, giving back to the community in case it helps anyone.
Interview Questions (3)
Given a list of some drivers and the deliveries they are making, need to write a code to compute the total cost of all deliveries. It needed to have 3 methods:
- add driver(driverId)
- add deliveries(startTime, endTime)
- getTotalCost() getTotalCost was needed in optimised time.
Add two more functionalities to the existing system:
- payUpToTime(upToTime) -> settle the delivery cost up to this time
- getCostToBePaid() -> get the remaining delivery costs left after settling the payment. The interviewer wanted an optimal solution beyond O(n).
Implement a method to provide simultaneous deliveries across drivers. The interviewer was only expecting the approach.
Summary
I interviewed for a role at Rippling in Bengaluru, bringing 5.5 years of experience. Despite making it through several rounds, including phone screening, managerial, and onsite coding/system design, I was ultimately rejected due to issues with code clarity and getting sidetracked during system design.
Full Experience
I had my interview process with Rippling in January 2025 after applying online and being contacted by a recruiter. The recruiter was helpful, providing clear expectations for each round.
Round 1: Phone Screening
I was told to expect a base problem and then scale it up, along with discussing an approach for a third scale-up. The base problem involved calculating total payments for delivery drivers given their hourly rates and delivery logs. I approached this by designing a class with functions to add drivers and rates, log deliveries (using epoch seconds), and calculate the total amount due. For the first scale-up, I had to consider clearing payments at a specific time and returning the total unpaid amount, for which I discussed an approach. I don't recall the third scale-up problem, but I only needed to outline my approach for it.
Managerial Round
This round was largely behavioral. I discussed my past experiences, projects, and general work. We also touched upon my roles as a mentor and mentee, as well as aspects of my work I'd like to change versus what's currently working well. Interestingly, the recruiter provided a script beforehand, so I mostly focused on preparing my answers.
Onsite Rounds
System Design
The challenge was to design a system for Rippling's customers to upload documents for internal audit review, with each document having a defined review completion time. I found myself getting bogged down with 'nice-to-have' features, and the interviewer had to guide me away from these tangents. I believe I focused too much on non-essential functional requirements.
Coding Round 1
The base problem involved processing a list of songs and user plays to return songs ordered by the descending count of unique users who played them. For the scale-up, I needed to return the top 3 most recently played songs per user. We had a discussion about the time complexity implications if the number '3' was arbitrary. Overall, I feel I struggled significantly with the clarity of my code in this round.
Coding Round 2 was never scheduled as I did not advance past the previous rounds.
Given my performance, particularly my coding clarity issues and getting sidetracked in system design, I wasn't surprised that I didn't receive an offer. I believe I performed poorly.
Interview Questions (6)
Given a list of delivery drivers, their per-hour payment rates, and a list of deliveries each driver has completed (with delivery times in epoch seconds), design a system to calculate the total amount to be paid to all drivers combined. The solution should include functions to add drivers with their rates, record deliveries, and retrieve the total payment due.
Extend the delivery driver payment system. Given a specific settlement time, calculate the total amount to be paid up to that time. Additionally, implement a function that returns the total unpaid amount for all outstanding deliveries.
Discuss your past work experiences, including projects and responsibilities. Elaborate on your roles as a mentor and mentee, and reflect on aspects of your work you'd like to improve and those that are currently successful.
Design a system that allows Rippling's customers to upload documents, which are then routed for review by an internal audit team. The system must also account for a specified review completion time for each document.
Given a list of songs and information about which users played which songs, return a list of songs ordered in descending order based on the count of unique users who have played each song.
Extend the music playing system to return the top K most recently played songs for each user. Discuss the time complexity implications when K is an arbitrary number.
Preparation Tips
My preparation for the managerial round specifically involved reviewing and preparing answers based on a script provided by the recruiter.
Summary
I interviewed for an L6 position at Rippling, completing five challenging rounds including DSA and System Design, but ultimately received a rejection.
Full Experience
My interview journey for an L6 role at Rippling consisted of five distinct rounds, culminating in a rejection.
Round 1 - DSA
This round involved designing a Music Player similar to Spotify. The core methods to implement were addSong, playSong, and printMostPlayedSongs, which required tracking unique user plays. The follow-up extended this to retrieving the getLastThreeSongs played by a specific user. There was another follow-up mentioned by the recruiter post-interview, but I didn't get time to address it during the session.
Round 2 - Hiring Manager
This round focused entirely on general behavioral questions, assessing my fit and experience.
The next 3 rounds happened in the office.
Round 3 - DSA
The challenge here was to design a Key Value Store. I had to implement get, set, and deleteKey methods. The first follow-up introduced support for transactions (begin, commit, and rollback). I immediately clarified if nested transactions were required, and the interviewer confirmed they would be for a subsequent follow-up. I spent a considerable amount of time implementing the single-level transaction support. The second follow-up was to support nested transactions, but unfortunately, time ran out before I could tackle it.
Round 4 - DSA
This round focused on designing an Excel sheet. I needed to implement set (handling cell names like A1 and values including simple numbers or formulas like "=9+10"), reset, and print (showing both raw and computed values). The follow-up extended the set functionality to support values that referenced other cells, such as "=A1+10".
Round 5 - System Design
The final round was a system design interview where I was tasked with designing Google News.
Interview Questions (5)
Design a Music Player like Spotify with the following methods:
int addSong(string songTitle);// add a song to your music player with incremental song ids starting from 1void playSong(int songId, int userId);// user plays a song that is present in the music playervoid printMostPlayedSongs();// print song titles in decreasing order of number of unique users' plays
Follow up:
vector<int> getLastThreeSongs(int userId);// get last 3 unique songs played by a given user
This round focused on general behavioral questions.
Design a Key Value Store with the following methods:
string get(string key);void set(string key, string value);void deleteKey(string key);
Follow up 1: Support transactions - begin, commit, and rollback. I spent a lot of time coding for one level of transactions.
Follow up 2: Support nested transactions. No time was left to address this.
Design an excel sheet with the following methods:
void set(string cell, string value);// cell can be A1, B2. value can be like "10", "1" or even excel formulae like "=9+10" and "=-1+-10+2"void reset(string cell);// reset the cellvoid print();// print all the cells along with their raw and computed values
Follow up: Extend solution to support values like "=A1+10" where A1 is a cell name.
Design Google News.
Summary
I interviewed for a Staff Software Engineer position at Rippling, focusing on Data Structures & Algorithms. Despite feeling confident about my production-level code and handling follow-up questions, I was unfortunately rejected because I only completed one out of three required problems.
Full Experience
I recently interviewed for a Staff Software Engineer (SSE) position at Rippling. My interview consisted of one Data Structures & Algorithms (DSA) round, which was conducted via a Hackerrank codepair link. The round started with brief introductions from both my interviewer and myself.
The primary task was to implement three APIs for a delivery system application. The core requirement was that a delivery driver has an hourly rate for performing deliveries. I was asked to implement the following three APIs:
addDriver(driverId: integer, hourlyRate: float)addOrder(driverId, startTime, endTime): I also had to mention my choice of data type for time and justify it.getTotalCost()for all the deliveries.
I found the initial question straightforward.
There were also follow-up questions:
- "What is the issue with using
floatanddoubleas data types for currency, and what data type should you use instead?" - "What changes would you make in the code if we wanted to update the hourly rate of a driver?"
I felt optimistic about this round because I was able to write production-level code, handling concurrency and other best practices, and I answered all the follow-up questions effectively.
Despite my performance, I was ultimately rejected. The recruiter mentioned that I had only solved one out of the three required questions. They stated that for the other two questions, at least the approach needed to be discussed. I had specifically asked the interviewer about the time limit and the number of questions at the beginning. The interviewer responded casually, advising me to proceed at my normal speed and ensure the code was production-level. I believe that if the interviewer had set clearer expectations, I would have planned my execution strategy differently.
Interview Questions (3)
Implement three APIs for a delivery system where drivers have an hourly rate.
addDriver(driverId: integer, hourlyRate: float)addOrder(driverId, startTime, endTime): Describe the choice of data type for time and its justification.getTotalCost()for all deliveries.
What are the issues with using float and double as data types for currency, and what data type should be used instead?
What changes would you make in the existing code if the requirement was to update the hourly rate of a driver?
Summary
I recently interviewed at Rippling for a Senior Software Engineer position. The process included a screening round with a LeetCode Hard problem and a behavioral discussion, followed by three challenging on-site system design rounds. Despite performing well in most rounds, I was down-leveled to SDE-2 due to one system design interview and ultimately declined the offer, as I was seeking an SDE-3 or higher role.
Full Experience
I wanted to share my interview experience at Rippling, as I found LeetCode very helpful in my preparation.
Screening Rounds:
- Round 1 (Hire): Design Excel Sheet
This round involved a coding challenge to design an Excel sheet with sum formula functionality. - Round 2 (Hire): Past Projects and Experiences
This was a behavioral round where I discussed my past projects, how I approached them, and my leadership experiences.
On-Site Rounds:
- Round 1 (Strong Hire): Design In-memory Key-Value Store
I was tasked with designing an in-memory key-value store, including transaction capabilities. - Round 2 (Lean - Hire): Design News Aggregator and Feed System
This round focused on designing a news aggregator and feed system. The interviewer seemed a bit challenging, starting questions before I fully grasped the scope, which made it a tough luck experience. - Round 3 (Hire): Design Stack Overflow API End-to-End
This was a 1 hour 30 minute round, split into two 45-minute segments. The goal was to code a working and production-ready end-to-end API, similar to Stack Overflow's functionality, within each 45-minute slot.
After the interviews, HR reached out and informed me that I was down-leveled to an SDE-2 designation, which I attributed to the system design interview where I struggled. Since I was specifically looking for SDE-3 or higher positions, I declined the offer.
Interview Questions (5)
Discuss past project experiences, detailing the approach taken, specific contributions, and any leadership roles or initiatives. Be prepared to elaborate on challenges faced and solutions implemented.
Design a scalable news aggregator and feed system. Consider aspects like data ingestion from various sources, content storage, user personalization for news feeds, and efficient delivery to millions of users.
Design the API for a platform similar to Stack Overflow, covering all aspects from database schema to API endpoints. The round was 1 hour 30 minutes, divided into two 45-minute sections, requiring the coding of a working and production-ready API end-to-end within each 45-minute segment.