4

Built a tool to help with interview studying - How can I improve it?

Profile picture
Mid-Level Software Engineer at Contracta year ago

It's a combination of spaced repetition learning and interview preparation.

The basic premise is that the better you perform on a challenge, the longer it will be before you reencounter it. If you forget, you will see it sooner.

Users can create and manage a table of questions, track their mastery, and schedule review sessions based on a space repetition algorithm.

Check it out: https://interview-flow.vercel.app/

  • The features
    • The Grow Table:
      • An editable and filterable table
      • Each record has:
        • Topic.
        • Question.
        • Confidence.
        • Last reviewed date.
        • Next review date (based on space-repetition algorithm).
        • Review count.
      • Clicking on a record gives a more detailed view of the exercise you’re working on.
      • You can rate your confidence, which creates a new review note.
        • It also updates the next review date based on confidence.
        • You can see all of your past review notes, and you can create new review notes.
    • Adjust the space-repetition algorithm based on how long you have for an interview.
      • 1 week
      • 1 month
      • 3 months
      • Custom
  • The use case it was meant to help with:
    • The goal is to help you pass your technical interviews by using spaced repetition to focus on exercises that are difficult for you.
  • Tech stack:
    • NextJS
    • Shadcn/UI(radix UI + tailwind CSS)
    • Supabase for backend

I have more features in mind, but for speed, this is the initial feature set that I plan to release the application with.

187
8

Discussion

(8 comments)
  • 6
    Profile picture
    Senior Software Engineer [5A] at Uber
    a year ago

    You have overindexed on the "what" not "how" of software engineering. You are essentially creating a glorified flash card memorization system.

    Not only that, you have created a website where the person has to fill in the topics, time, and check off boxes themselves. This isn't a interview preparation app. This is a productivity app that keeps track of what to study. Its really more similar to Jira.

    There are 2 parts of being a software engineer: the software (coding, language, concepts, info) and the engineer (think, design, test, create, improve). I would argue you are an engineer first before you are a software engineer.

    Consider what features you can add to help people execute faster and better on the information that they already have. How can they efficiently use this information to solve any problem they may receive? Where may they misexecute on problems? Why? How will knowing "NextJS" help them in their Google interview? Is it the most important thing for them to know?

    There are plenty of platforms that sell "information" (I argue that bad information is worse than no information). But there are few, if any, platforms that train you on how to think, take effective action on the information you know, and how to work through problems effectively and efficiently in unknown and unknowable spaces.

    You aren't paid for what you know. You are paid on how you act on it. Ideas are cheap. Execution is everything.

    For a better treatise/explanation of where I am coming from, here is my doc

    Welcome to the Coding Interview, You Suck

  • 4
    Profile picture
    Tech Lead/Manager at Meta, Pinterest, Kosei
    a year ago

    Be explicit about what your goal is. Do you want users, revenue, or learning? Or did you just build it purely for yourself to help with your own interview prep?

    For most devs building side projects, the goal is to get users. In that case, the vast majority of projects are lacking when it comes to UX. It needs to be incredibly easy for someone to understand how and why they'd use your tool.

    The reason most side projects fail is that this is traditionally not the "glamorous" part of engineering: you're not learning new algorithms or working with a cutting-edge API. You just need to do the hard work of writing good copy, reducing button clicks, color-coding the UI appropriately, etc.

    For your app, I'd really focus on the usability. A few things come to mind immediately:

    • Make the tap targets bigger. Right now I have to hover over the row in order to click “Open”.
    • Color code the “next review” and make the time relative (“in 2 days”).
    • I'm not sure what title refers to. Can you link it to a Leetcode problem?

    See the masterclass about building side projects here.

  • 3
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    a year ago

    As someone who has built many, many side projects to great success (3.5 million+ users, 5 apps with 100k+ users), many of them utility apps like yours, the important thing to remember is this: People are lazy.

    When it comes to software design, this usually boils down to: How can I make getting value from this product as fast as possible, requiring the minimal amount of clicks?

    It takes a lot of effort to incorporate a new app into your repertoire - There are so many apps out there and not enough time. Right now your app requires a lot of clicks:

    1. You need to fill out a form to add a new interview problem.
    2. Every time you update your progress (e.g. You advance from partially recalling a solution to totally recalling it), you need to update the relevant row.
    3. You need to regularly check the tool to see which problems are "due" soon for your study.
    4. If an item is coming up and you need to study it, you need to navigate to the URL (probably offsite on LeetCode or something) again as I don't see links in your demo items where users can navigate to the proper problem area with a single click.

    In order to fix this, it's unfortunately going to take a good amount of work:

    1. Ideally, you just integrate with all the interview prep tools like LeetCode, AlgoExpert, etc. The idea is that you can connect with the users' accounts on those tools and pull in their progress via an API. This will also allow you to link things directly.
    2. To fix #3, you should send email notifications when problems are almost due or past due.
    3. If you can use pre-fill data sets or templates in general (i.e. people can search for problems instead of having to type them in), that also helps with #1.
    4. A spicy idea is to have the interface be company-oriented. You tell the tool what interviews you have coming up, and it automatically suggests all the problems you need to do by pulling from sources like LeetCode Premium.

    That being said, not every side project needs to get a ton of users (that's just what you need to do if your goal is to have this look impressive on a resume). Side projects are also useful for raw learning as well. As is, the tool's UI looks very clean, better than 90% of side projects I've seen. This is something you should definitely be proud of 😊

    To learn more about better executing your side project, check these out:

  • 1
    Profile picture
    Mid-Level Software Engineer [OP]
    Contract
    a year ago

    Thank you for the feedback, Edbert. You're right, this app is more focused on managing interview preparation material like DS&A.

    To be honest, all the information needed for interview preparation is already available, from resources like AlgoExpert, NeetCode, LeetCode, Educative, Grokking interviews, and various YouTube channels.

    What I aim to do is build a platform specifically designed for managing interview preparation. For instance, let's say you have a technical interview scheduled with Meta in three weeks, and you have already gathered interview prep material from sources like Glassdoor and the recruiter. With this platform, you can add all those challenges, set your interview day, and start working on them using your preferred DS&A platform. As you work on these challenges and reflect on your attempts, you will quickly identify areas where you struggle and address those weak spots before the interview day.

    To make it easier for users to get started, I am considering creating templates that include all the exercises they need to work on, such as a Google interview template, a Blind 75 template, an AlgoExpert template, and more.

  • 1
    Profile picture
    Mid-Level Software Engineer [OP]
    Contract
    a year ago

    Thank you for the feedback, Rahul. It started with building something for myself and quickly became "other people could use this as well.”

    Now, my focus is on making it extremely useful for myself while also encouraging others to sign up and use it.

    And on top of that, it’s fun to work on a side project.

    I like your idea of having a link to an exercise on LeetCode or any other platform where the exercise lives.

  • 1
    Profile picture
    Mid-Level Software Engineer [OP]
    Contract
    a year ago

    Based on initial feedback from Edbert, Rahul, and Alex, I made a few changes to the prototype.

    The first major change I implemented was the creation of a dashboard layout to improve application navigation.

    I added a slide-in navbar with pages for backlog, sprints, calendar, templates, and reports. Initially, the backlog and sprints pages will be the primary focus.

    The backlog page includes a preset of exercises from LeetCode, allowing users to create interview sprints without wasting time on exercise creation. Each exercise in the backlog links to a specific exercise on LeetCode. If users don't find the exercise they want to practice, they can create it.

    Since users may be preparing for multiple interviews, they can create multiple sprints and add the questions they need to practice for each interview.

    To enhance user-friendliness, the tables are collapsible. And the website is also mobile-friendly.

    Additionally, there is a sprints page for managing all interview sprints.

    Check it out: https://interview-flow.vercel.app/

  • 1
    Profile picture
    Tech Lead @ Robinhood, Meta, Course Hero
    a year ago

    Just tried it again, and I have 2 broad buckets of feedback:

    1. Tactical
    2. Broad Strokes (More Important)

    Tactical

    I might be using the tool wrong - I'm on a Chrome with uBlock Origin fwiw. Anyways:

    1. I don't see the option to import problems from LeetCode's exercises into the backlog
    2. I see 2 "Create Sprint" buttons around the backlog, one at the top right and one on the bottom left
    3. The "Create sprint" button doesn't seem to work
    4. I see the sliding drawer on the left, and it's slick. Nice job!

    Broad Strokes

    This is the more important feedback IMHO.

    1. I feel like this app is doing too much. There's a lot of buttons, and I'm not entirely sure where to begin. I think it would be great to have some sort of onboarding flow.
      1. The onboarding flow can be asking them to connect their LeetCode account and you pull in their progress automatically. From there you apply some sort of layer on top of it to add value (maybe reminders?).
      2. Another onboarding flow as I mentioned before is that you ask them what companies they're preparing for and pull in relevant problem sets accordingly
    2. Would you use this app yourself? - I haven't done interview preparation in a long time, so it's hard for me to give genuinely useful feedback here. At the end of the day, the most important feedback when you start a side project is yours (assuming you built something that you yourself would use). If you feel like this app helps you a lot when studying for interviews, by all means, ignore all of my feedback and keep improving it based on your own experience. This is the most concrete way to make a stellar product - I have done this 10+ times with 100k+ user apps.
    3. What problem are you trying to solve? - There are 2 major candidates I see:
      1. I lose track of what I'm studying - This means that your goal is organization. Crunch all the noise and output clarity. Right now the tool feels noisy as it's a tool with many rows, many fields, and many buttons. I think a good win here would be creating some sort of "Action Items" card at the top telling the user what they should do for the day (or next week).
      2. I lose motivation to study consistently - This means that your goal is to either punish laziness or incentivize diligence. Punish can be sending annoying email reminders if they're falling behind. Incentivize can be some sort of gamification system where they get coins or points or something for completing objectives, coupled with some fun animation. Habitica is a really good example of this.
  • 0
    Profile picture
    Mid-Level Software Engineer [OP]
    Contract
    a year ago

    Thank you for the feedback, Alex; I need to be clear on what the app does and how the user should use it. You're right. It does feel like the app is doing too much. I need to have a working MVP before asking for more feedback.