Michael Seibel

CodeCrafters (YC S22) - Recreate your favorite developer tools from scratch

CodeCrafters makes interactive courses for software engineers, where you get to recreate popular developer tools from scratch. Build your own Redis, Git, Docker, and SQLite—in Go, Python, Rust, etc.

Add a comment

Replies

Best
Sarup Banskota — CodeCrafters (YC S22)
Thanks for hunting us @mwseibel, and hello Product Hunt. For @rohitpaulk and I, our desire to get really good at programming began 10 years back in Uni. One time we had the crazy idea to reimplement Git in Ruby (why not, right?). At that time we thought only some crazy genius types could build such a complex project. But not only did we build it, we also taught our friends. It turned out to be such an enriching experience that Paul and I became best friends over it. Years later, it's led to our first company together. Today, through CodeCrafters: ◆ Developers at companies like Apple & Vercel are mastering Rust, Go, Haskell, etc. ◆ Harvard & MIT students are mastering the internals of popular software (e.g Git) ◆ Companies like Rose Rocket (YC S16) are powering their up-skilling programs ◆ ... some engineering teams are even organising mini hackathons So how does it work? The basics are simple: 1. You choose a project from our catalog (e.g Build your own Git in Python) 2. We break it down for you into approachable features (aka. stages) 3. You implement each stage, and push code to get feedback And it gets more interesting from there: ◆ You can study others' implementations (with AI-assisted explanations) ◆ You can study the official source code (e.g the Redis source) for inspiration ◆ You can publish to GitHub, one click. Show off progress through gorgeous banners ◆ You can learn alongside your team, through private leaderboards and our Slack app We've built CodeCrafters with a lot of love. We'd love for you to try it, and tell us what you think. Can't wait to see you build.
Rohit Paul Kuruvilla
Hello Product Hunt! We’re different in the developer education segment in 3 main ways: ◆ First, we cater to people with programming experience. There are tons of introductory “learn to code” resources out there, but surprisingly little once you get past the basics. Good programmers want to get better and to develop in areas where they’re not strong yet, and that’s what we help with. ◆ Second, the coursework involves writing actual code instead of consuming videos. You handle concurrency, develop statecharts, traverse B-trees, etc. While we test against a fixed spec, you’re welcome to try different approaches. E.g in our Redis course, you could implement handling concurrent clients either using threads, or using an event loop. ◆ Third, instead of coding in the browser, you build these projects in your local dev environment. We create repositories for you to work out of, and you git push to run tests. The actual code can be written in your editor of choice (VSCode, Vim, Emacs, etc). This last point in particular — our git-based workflow — is something customers repeatedly tell us they enjoy. As open source contributors, we’ve always been interested in the internals of software we use day-to-day. We’ve learned how much hunger there is for a skill-building path that’s structured, fun, and focused on cool, well-known projects with serious technical dimensions. Jumping straight into the deep end as an open-source contributor has always been an option, but it’s daunting, if not intimidating. It can take a long time to get oriented in a major codebase, and mentorship isn’t always available. There’s a need for an intermediate approach with lessons that build technical expertise, and that’s where we fit in.
Eunice Marginel
Is this suitable for developers of all experience levels? Feels a bit intimidating lol
Sarup Banskota — CodeCrafters (YC S22)
@eunicemarginel Great question. If I'm being honest, when we first started out, we didn't think too deeply about which experience level the product is for. As we started getting users, we started learning from them. You definitely need to have programming experience, CodeCrafters is definitely not the right fit as an "intro to programming" platform. But you don't need to be an expert. ◆ At the Eastern Switzerland University of Applied Sciences, CodeCrafters is part of the curriculum for undergrad students to learn and master Haskell. ◆ My favorite customer story ever is of a final college student in the US who had never written a line of Java and had never heard of Redis. But he knew C. During his CodeCrafters adventures, he learnt about what Redis is, picked up Java, and Built his own Redis. ◆ Like I shared in my story, Paul and I hardly knew much serious programming when we set out to reimplement Git in Ruby 10 years back. During the early career level it definitely feels intimidating. But that's also when you stand to gain the most value. You should give it a try ;)
Eunice Marginel
@sarupbanskota Thanks for sharing your insights and experiences with CodeCrafters! It's interesting to learn how the product evolved based on user feedback. The customer story about the college student who learned Java and built their own Redis implementation is inspiring. I appreciate your transparency about the required programming experience. I'll definitely consider giving it a try. Thanks again!
Gautam Shewakramani
Congratulations @sarupbanskota and @rohitpaulk on the PH launch! What happens when someone is stuck? Do you or could you pair them with a live mentor?
Rohit Paul Kuruvilla
@sarupbanskota @gshewakr thanks Gautam! Handling the "I'm stuck" problem is super important for us. That's where most of the learning happens, and if we don't offer help people are likely to get frustrated with our product and drop off. There are a combination of features that we offer to help people when they're stuck: ◆ The instructions for each stage are carefully refined based on user feedback so that all the common questions are answered. It's common for us to make 10s of edits to each stage after launch. ◆ The instructions for each stage are also tailored to the language you're using. So if a stage is difficult in Rust for of a specific reason, we highlight that. We offer a concise explanation in-app and link to external articles for further reading. Here's an example from a stage in our Docker challenge, where if one uses Go they might run into a cryptic error: https://rohitpaulk.com/articles/.... ◆ We have a "Hints" feature, where users can submit hints based on their experience. Other users can upvote/downvote these hints and reply to them. ◆ If you're stuck and hints don't help, you can browse through solutions from other users. These solutions come with "Automatic Explanations", which are AI-generated comments that explain the solutions in detail. This was a recent launch that uses GPT-4 under the hood, you can read more about it here: https://codecrafters.io/blog/exp.... I also tweeted about how we made this: https://twitter.com/RohitPaulK/s.... ◆ For popular languages, we also offer a "Recommended Solution". These are authored by experts in the field (Maintainers of Next.js, for example). More on recommended solutions here: https://codecrafters.io/blog/sol.... ◆ Lastly - we offer personalized 1:1 debugging help over email. It's rare for people to do this, but when they do we respond with a thoughtful answer within a few business days. Summary: Meticulously crafted instructions, hints, user solutions with AI-powered explanations, expert solutions, and if all else fails - a live human to help. There are a lot of other interesting things we want to do here. One of the ideas I'm very excited about is automated bug fixes. What if we could analyze the thousands of mistakes users have made before you, and use that to suggest a fix to your code? Automated program repair is typically considered unreliable since it's hard to verify a fix, but in our case we've got a rock solid test suite so it's easy to say whether a fix is valid or not.
Manjush Vundemodalu
I love CodeCrafters. Very excited about your launch :) I was already pretty good with Python, but decided to attempt CodeCrafters' challenges one weekend. It was just the right balance of difficult, yet encouraging. Not too easy to be trivial, not too hard to be frustrating. The system of automated tests and the ability to learn from other's solutions is basically unparalleled. Rooting for you guys, and I hope companies look into such innovative solutions vs the cookie cutter video platforms.
Sarup Banskota — CodeCrafters (YC S22)
@manjush_vundemodalu Thanks Manjush. When you already know a language, I feel CodeCrafters is a great way to opportunities for mastery. Really appreciate your kind words and support!
HS Yang
@manjush_vundemodalu @sarupbanskota may you say more about what the system of automated tests is and how it helps?
Manjush Vundemodalu
@sarupbanskota @heythrive Basically when you push code to CodeCrafters, they run your code against a test suite (this test suite is open source btw, which is so cool). At times on the CLI response you can see what could have caused your code to fail. I've tried doing similar projects but through tutorials, and in the absence of tests, it's very easy to get lost and not know what to do. Causes me to abandon the project altogether 😂
Sarup Banskota — CodeCrafters (YC S22)
@heythrive @manjush_vundemodalu Manjush explained it much better than I ever could! :)
Ruhi Mahajan
Kudos! Do you guys also offer certificates at the end of the course?
Rohit Paul Kuruvilla
@ruhi_mahajan thanks! We don't offer traditional certificates, however: ◆ Users get profile pages, like this one: https://app.codecrafters.io/user.... Users often to link to this from their LinkedIn profiles, for example. ◆ Users can publish their repositories to GitHub through our app - we automatically keep the repository updated with their progress and a cool animated banner on top. More on this here: https://codecrafters.io/blog/github, https://codecrafters.io/blog/ban.... ◆ We offer custom letters on demand
Ruhi Mahajan
Wow! This could help them get hunted by headhunters like me :) I'll keep an eye on such GitHub repos for my prospects now.
Simran Jit Kaur
I love the interactive challenges and real-world projects you guys offer. The community aspect is fantastic too. I'm interested to know how the platform keeps up with the evolving tech landscape and provides relevant and up-to-date projects for users.
Sarup Banskota — CodeCrafters (YC S22)
@simranjitkaur For sure. Philosophically, we're lean more towards the mastery of fundamentals (vs. keeping up-to-date with the latest tech). There's plenty of resources for learning new frameworks and tools, and often the best place to learn about them are the documentation sites or learning material provided by their creators. We generally like to keep our focus on the "evergreen" aspects of learning programming — the different ways of designing software, paradigms, etc. That being said, we take great care to support the latest language versions, dependencies, and leverage the best-in-class tech ourselves to deliver the learning experience. A recent example is our AI-assisted explanations feature, which is built using GPT-4. https://codecrafters.io/blog/exp...
Simran Jit Kaur
@sarupbanskota I think it’s smart to focus on the “evergreen” aspect. Using GPT-4 is impressive, and a nice forward-thinking approach that enhances the learning journey. I'm genuinely amazed by the idea and CodeCrafters. Good luck to you all!
Sarup Banskota — CodeCrafters (YC S22)
@simranjitkaur Thank you! Can't wait to see you try it out.
Vishaag
This is amazing. In the sea of tutorials filled with mostly beginner content, this is much needed! My question though, is, how do you decide on the "stages" and the order in which they're presented?
Rohit Paul Kuruvilla
@vishaag good question! The process we use for breaking down challenges into stages is similar to "feature slicing": https://handbook.infinityworks.c.... As an example, in our Git challenge, the first stage is to initialize a repository since that's usually the first step in using Git + it's relatively easy (just creating a few files and folders). Subsequent stages involve more complex features like making commits, cloning repositories and so on. We try to order stages based on difficulty. This isn't always possible though, since there might be features that are simple to implement but only once another complex feature is already in place. We highlight such cases in the app so users know what level of difficulty to expect from a stage.
Cayter Goh
Congrats on the launch! How did you guys go about building this? What's your tech stack like?
Rohit Paul Kuruvilla
@cayter_goh thanks! Our web-app is pretty standard - a Ruby on Rails backend, Ember.js front-end. The interesting components are the ones that handle executing tests based on Git pushes. We need to keep these test runs super fast, so that the feedback loop is quick. Our median test result time (for early stages) is 3 seconds - that includes receiving a Git push, running tests and streaming results back to the client. We do this by maintaining Firecracker VMs (the same technology behind AWS Lambda) for executing tests on each repository - these are cheap to keep around, and they boot in under 300ms. We initially built all of this in house, and then 3 months later Fly.io released their machines product: https://fly.io/blog/fly-machines/, which did pretty much exactly what we were doing but with elastic pricing & reliability benefits for us. Moving to Fly Machines reduced our costs significantly + I no longer worry about being paged at night 😅
Vera Rose
The idea of recreating popular developer tools from scratch in a variety of languages seems like a unique and immersive way to learn. 👏 Congrats on the launch!
Niranjan Rajendran
Congratulations to @rohitpaulk and @sarupbanskota on the spectacular launch! 🥳 I was fortunate to have access to an early preview version of the product, and I genuinely enjoyed working through the numerous challenges. They were engaging and well-crafted - precisely what you would expect from such a comprehensive solution. For me, the best way to learn a new programming language is by building something in that language. CodeCrafters absolutely excels in this area, providing the ideal platform for hands-on learning. I found my programming skills enhanced thanks to the variety and real-world applicability of the challenges presented. ✌️ Another feature that sets CodeCrafters apart is the ability to complete challenges using your own familiar tools that you would be using in your work, such as your preferred IDE and Git. It speeds up learning and provides a seamless experience. I am curious whether the team plans to add any social features for community learning and collaboration. I believe that incorporating such interactive elements could bolster the overall experience and foster a sense of camaraderie among learners. Overall, I'm incredibly impressed with CodeCrafters and see it as a must-have resource for anyone looking to up-skill or learn a new programming language. Cheers to Rohit and Sarup on crafting this fantastic platform, and best of luck with everything moving forward!
Sarup Banskota — CodeCrafters (YC S22)
@niranjan94! This comment touched me. You've been one of our greatest supporters. Community oriented features we've rolled out recently: ◆ You can now look at how others have approached the same stage you tried, and get our AI to explain what's going on in their code https://codecrafters.io/blog/exp... ◆ If you're part of a team, you can enjoy being part of a private leaderboard and Slack, where you can see how your team is making progress and be inspired by their submissions ◆ We're exploring the idea of letting larger teams create custom courses that fit their talent engagement and up-skilling goals, whether for internal or external talent cc @rohitpaulk
Niranjan Rajendran
@rohitpaulk @sarupbanskota I'm thrilled to hear that my comment resonated with you. It's great to have been able to support and witness your journey so far 😄 And those are some interesting features that you have mentioned there ! Will check them out :)
kumar puspesh
Great stuff @sarupbanskota and @rohitpaulk. Very helpful way to learn and master new skills/languages in detail esp in this world full of average content. Turning learning into such DIY programs is very useful for experienced developers (whereas most of the market is more attuned towards freshers or first-time learners). What caught my eye was the recently added AI-assisted explanations. Very cool to see an integrated implementation, nice work! Should be super useful and esp help with intimidating code pieces. How easy/hard was it to build this in? Did you guys end up doing any fine-tuning as well? Hope more and more engineers find this useful.
Rohit Paul Kuruvilla
@puspesh this wasn't too difficult to build, took us a couple of days experimenting with prompts to get good results. I tweeted the whole journey here: https://twitter.com/RohitPaulK/s... (includes the full prompt and how it evolved). We had to write two separate prompts - one to break a diff down into relevant chunks, and another to explain each chunk. We didn't need to do few-shot prompting or fine-tuning. The results are far better than I thought they'd be - GPT-4 is able to catch a lot of subtleties in code. One example that blew my mind is where it recognized that a variable was unused, and explained what purpose it might serve in _future_ changes to the code.
Salil Upadhyay
Really promising product which definitely nails the "pain-points" for experienced developers when it comes to upskilling quickly/seamlessly. I'll be sharing with a few senior dev. friends so they can get their hands on it and test it out! All the best CodeCrafters team @rohitpaulk @sarupbanskota
Deepti Chopra
This is so cool! Could have used this 6 years ago when I was trying to suck less as a software engineer 😂. Good luck!
Sarup Banskota — CodeCrafters (YC S22)
@deeptivchopra Haha so true. 6 years ago, the alternative was to follow tutorials. https://github.com/codecrafters-... has hundreds of them. (it's the 10th most popular repo on GitHub with 200k+ stars) But tutorials have these problems: ◆ They're only available in one language, the one the author knows ◆ Due to lack of tests and automated feedback, it's easy to go astray and lose motivation ◆ They're created at one point in time, and then go stale as the language gets new versions Those are some of the problems we hope to solve. Thank you for your kind support!
Gabriel Nori
Wow, congratulations on launching on Product Hunt! 🎉🎊 I'm really curious to know, what kind of projects have seen the most success on CodeCrafters? Are there any particular use cases or features that you think are especially beneficial? I'm so excited to see what people can create with your program. 🤩
Sarup Banskota — CodeCrafters (YC S22)
@gabriel_nori Thank you so much! When we started out, we thought we were teaching people the internals of popular software. Before CodeCrafters, you were a user of Git. After CodeCrafters, you knew how Git works. But we realised we were teaching something beyond software internals. ◆ Among the experienced engineer community (including staff/principal level engineers), they seem to enjoy CodeCrafters the most as a form of language mastery. Leetcode doesn't feel real-world enough. Other real-world sites don't feel complex and ambiguous enough. And books don't feel engaging enough. ◆ Among the early career community, they like the ability to explore areas of programming that they might not usually get a chance to explore at work. Reimplementing Redis is a journey into network programming. Docker is an adventure in OS and systems programming. grep is a deep dive into statecharts. etc ◆ Among Engineering Managers, they find CodeCrafters both a meaningful way to engage their team — but also to keep themselves up-to-date and hands on, especially when their dayjob causes their programming skills to go rusty. We're also exploring the idea of tailor-made programs for larger companies to engage talent, both internal and external. I hope this helps!
Irfan S
This is something I wish I had in uni. Covers fundamentals, while covering tech that builds tech. Gonna be sharing this with a few juniors in my network, I genuinely believe this is one of the best, if not the best, way to understand the fundamentals of what CS is. Gonna sign up just to see what I can pick up as a quick project. More power to y’all 🔥
Sarup Banskota — CodeCrafters (YC S22)
@irfan_s Thanks Irfan! The Redis one is probably quickest :)
Anshul Mishra
The user interface of the course platform is clean, intuitive, and easy to navigate. The courses are divided into well-organized modules, and the platform keeps track of your progress. Additionally, the platform provides integrated coding environments that eliminate the need for external tools, making the learning experience smooth and hassle-free Each module provides a step-by-step guide on building the tool from scratch, accompanied by real-time coding exercises and challenges. This hands-on experience would allow the user to actively apply the concepts and at the same time challenge themselves. This approach not only deepens your understanding of these tools but also allows you to gain expertise in multiple programming languages simultaneously Great job @sarupbanskota and @rohitpaulk for an awesome solution
Sarup Banskota — CodeCrafters (YC S22)
@rohitpaulk @anshul_mishra1 Thank you Anshul! So glad to have you as an early supporter.
Cindy Wu
Congrats on the launch! I have been working through CodeCrafters with my friends during my time at Recurse Center, programming for the joy of programming. Incredibly fun way to learn to build fundamental technologies from scratch. As an engineer, I am always into taking my tools apart, understanding the individual building blocks for what they are, and putting it them back together. CodeCrafters is where I go to put them back together in a guided way that keeps me motivated and enthusiastic. CodeCrafters is a tool I often draw on in my journey in becoming a dramatically better programmer. Thank you for making CodeCrafters!
Sarup Banskota — CodeCrafters (YC S22)
@cindywu The Recurse center community is the best. Thank you for your continued support, and please keep the feedback coming. We want to make a product every Recurse batch will enjoy.
Shane Page
Great for early developers, TDD enthusiasts, and learners of new languages. Naysayers: "don't reinvent the wheel". But how else are we going to train to new inventors? It's not the wheel that matters, it's the skills we build!