1

Side project feedback - Uber/Lyft simulation

Profile picture
Senior Software Engineer at Series B fintech startup2 years ago

I'd like to ask for your feedback on my side project - a full-stack simulation of a ride-hailing app such as Uber or Lyft.

App: https://rides.jurajmajerik.com
Blog: https://jurajmajerik.com

A bit of background first. I've been wanting to publish a personal full-stack project for a while. These were my main reasons:

  • I wanted a platform to explore concepts and tools I don't get to work with in my day job, helping me accelerate my learning.
  • I've wanted to break into big tech and thought this project could help me stand out among many applicants.
  • I enjoy writing and wanted to get better at it.

Why did I choose a simulation of the Uber/Lyft app? I always found something very attractive about these apps - they're visually appealing and dynamic, with colossal architectures behind them. I thought it would be very cool to re-implement some aspects of such an app. I have also been reading the Uber engineering blog and got a glimpse of the complexity these companies are dealing with.

My final goal with this app was to have an animated map with cars picking up customers, driving them across the map and dropping them off at their destinations. Customers would post ride requests and the system would match them with the nearest drivers. The simulation would run on the backend, and the frontend map would show the action in real-time.

I started working on the project last autumn. I've spent around 300 hours working on it and you can see the result in the links above.

My ask

I'd love to get your feedback to improve or extend this app and my blog, keeping in mind my objectives:

  • I plan to apply to big tech companies this summer, and I'd like this project to help me with my applications.
  • The project targets both recruiters and hiring managers. With recruiters, the goal is to pass the initial screening and get me to the interview stage (of course, I'll also be trying to secure referrals, but I might not always succeed). With hiring managers, this project might help me score extra points in my final evaluation.
  • I might be applying to companies such as Uber or Bolt, but this project is not supposed to impress just the ride-hailing companies.
  • I prefer not to put much more time into the project at the moment, as my focus right now has to be on the coding interview prep.

Possible additions or improvements include:

  • Splitting the system across multiple machines (perhaps 3), making it truly distributed.
  • Adding various components used in large-scale systems such as load-balancer, rate limiter, or message queues. Indeed, these components are not actually needed for the app to function. But by doing so, I could demonstrate my ability to work with them (albeit not necessarily demonstrating deep expertise).
  • Adding comprehensive documentation with system diagrams and explaining the choices I made.
  • More rigorous testing by adding integration tests (right now, I only have unit tests).

As for my previous background - I've been an engineer for ~4.5 years, most of my experience is from a small startup (series B). I consider myself a full-stack engineer but going forward, I aim to specialize more in the backend. Therefore, the project should strongly communicate my backend skills. For my next role, I also prefer backend positions to full-stack ones.

Recently I watched the great masterclass from Rahul and Alex on side projects. It made me realize that while my project might be interesting from a technical perspective, it has no users. In fact, this app doesn't allow any user interaction by nature. However, what I'm lacking in terms of users, I'm hoping to make up with the degree of technical complexity. Please also share your views on this aspect.

Many thanks if you've read this long post to the end. I'll be very grateful for any tips on how to make this project more appealing 🙏🏼

418
4

Discussion

(4 comments)
  • 3
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    Will It Help You Get Interview Opportunities?

    I'll just get it out there: Probably, but I'm extremely unsure about how much.

    Things get even trickier when it comes to Big Tech as those jobs are now so rare, and you're going to be competing with many applicants who have nice projects that also have 10,000+ users.

    However, what I'm lacking in terms of users, I'm hoping to make up with the degree of technical complexity. Please also share your views on this aspect.

    My core point here is to remember that recruiters aren't technical.

    • Nowadays every software engineer has a few side projects on their resume where they name-drop a ton of technical jargon to make it seem impressive.
    • Your project is better than 90% of those as you actually iterated on it, polished the product, and wrote your blog (which is amazing), but a recruiter won't be able to tell that your project is superior.
    • Recruiters spend an average of 5-10 seconds looking at candidates' entire resumes. This means they'll spend 1-2 seconds reading your side project blurb on average. Unlike me, they won't take the time to try the app or read your blog. 😞
    • Thought experiment to clarify more: Let's say that your app was actually just a fancy .gif or video file playing simulating the cars and not all the awesome stuff you built. So even if the recruiter clicked to your project, they wouldn't be able to tell this basic scenario from the other.

    I cover this more in-depth in this discussion where I also breakdown how I used my side projects to get interviews from Uber, Instacart, and many other top tech companies: "Can Github stars grab big tech recruiters' attention?"

    If anything, I think this project would be awesome at helping you get interview opportunities with startups, especially those in the transportation space. Unlike Big Tech, startups don't care about scale at all yet - They just want to get an initial product working.

    I consider myself a full-stack engineer but going forward, I aim to specialize more in the backend. Therefore, the project should strongly communicate my backend skills.

    If this is your goal, I recommend inverting what the project currently looks like. Right now, the demo is very front-end heavy, because the feel and design legitimately look great. You can't tell how complex or awesome the back-end is.

    Try putting the back-end more front and center by exposing the APIs underneath. Maybe you can create some sort of RESTful interface and create an API explorer page? I talk more about effective back-end side projects here: "What are some of the side income or passive income sources you can suggest?"

  • 2
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    This project looks cool! It's clear to me that you've put a lot of time into it (400+ commits, 30+ blog posts, 6+ months of work). I have a lot of thoughts here, so I'll split it up into multiple comments. As a heads up, some of this is going to be pretty honest feedback.

    The App Itself

    • Overall, it looks clean. A lot of side projects have glaring UI issues and yours doesn't.
    • Another flaw I see in many engineers' side projects is that they break with the slightest bit of interaction, especially with anything that just slightly strays off the happy path (e.g. your app has a login form and I put in a bad email). I haven't been able to break yours, though you did limit user interaction as you mentioned.
    • On top of not looking messy/broken, the design also feels modern. The graph of the cars feels like it's out of the Uber/Lyft app.
  • 2
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    Maximizing The Recruiting Value From This Project

    You have done a ton of great engineering work on this project, and you totally deserve to get more out of it. My advice here is to build in public.

    You do this via content creation:

    • Writing blog posts on Medium
    • Sharing your product milestones on LinkedIn
    • Ramping up your GitHub repos and growing their stars
    • Making YouTube videos explaining your build process (this one is the hardest though, so don't feel too pressured to do this)

    In other words: Show the technical complexity behind your work by breaking it all down into an easily accessible way.

    You already have the ingredients to do this from your blog and website:

    • Migrate the blog posts to Medium as it's a platform
    • Take the descriptor of your website and put it into your GitHub repo README

    There's a lot of engineers who want to build a Uber/Lyft clone, and it's also a classic system design problem. Here's some ideas on blog post titles you could write:

    • How I Built An Uber/Lyft Clone
    • Explaining The System Design Behind Uber/Lyft Ride Tracking
    • Setting Up Grafana Guide
    • Adding Basic Security Rules To Your Application
  • 2
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    2 years ago

    On a final note, there's not much cost in applying, so I recommend just applying right now (unless you have more personal reasons not to do so).

    You will never be ready for a Big Tech interview, and you can't solve this by grinding more LeetCode or making the "perfect" side project. It's much better to just apply ASAP instead of doing a bunch of pre-optimization that may not be relevant.

    I talk about this extremely in-depth here: "Fighting Perfectionism as a Software Engineer (and getting important stuff done)."