Hey developers!
I'm curious to know:
• What was the first project you built that actually taught you a lot?
• What technologies did you use?
• What was the biggest challenge you faced while building it?
• Would you build it differently today?
I'm currently building projects as part of my learning journey, and I'd love to hear what projects helped others improve their development skills.
Drop your project or experience in the comments!
Top comments (3)
V.A.L.I.D. it was the first time I took a step back and let AI do it's thing, while I orchestrate and review. It was in the era where AI generated code was terrible still, everything had to be validated by hand and more often than not fixed. It taught me to be thorough when reviewing AI generated code, along with opening new ways of thinking I never expected.
It was in C#, with a hint of F#, tied together with Roslyn and a chrome extension... But I applied unmanaged slabs, which is a Rusty thing, but it let me drop the VDOM entirely, which 6x'd the throughput, WHILE running cross-contaminating rules, as opposed to no rules at all. It blew my mind and made me realize even companies as massive as Microsoft are dealing with the same struggles... Legacy code is deprecating fast... And most of us are kept up at night maintaining it, instead of replacing it. I had been struggling with CSLA, it just kept bugging, so I wanted a better solution, I never expected it would fix Blazor to actually make it as responsive as React, except with the added bonus of being offline-first and F#'s certainty... Not to mention, it writes all the tests and boilerplate with Roslyn generators, so you just write a DTO, tag the valid objects, write up the markup for the UI, it does the rest.
It made me realize, everything we take for granted like Node.js for MCP servers, or Electron for IDEs, even HTTP and gRPC for data transfer, are all legacy code and someone out there is maintaining it, while you could be building it's successor.
In terms of struggles, getting Roslyn generators to work was a big 1, because it meant ALOT of verifying, because you cant just read it and think it works, it's too interconnected for that.
I actually did go back to it after a while, i figured the pipeline is solid, what if I threw rust at it, to make it zero-alloc? It worked, but it was slower, because F# is fundamentally faster at rule execution, the overhead rust added, was exactly against what made the system scalable. For perspective, you can run 1000 rules per pass and it would still be faster than vanilla blazor... That meant you could scale its complexity as far as you want to, it just works and it doesnt slow down. That stuck with me. Somedays a rewrite is worth it, other times, it's tradeoffs are optimization, not something that should be ripped apart.
Wow that's great, It should have been an amazing experience I guess!. At which year you completed that project?
Started with it last year Nov, ended with it this year March, but didnt commit to git, so when my ssd died, it was gone, had to rebuild it since till May, then the other day I went through it again to just touch it up a bit, after I noticed some quirks in my production deployment of my ERP system, Doccit.
For comparison, Doccit is an automated accountant's suite, that sits around 500k LOC, of which I only had to actually write 80k, the rest is Roslyn generated. It's faster than anything else, uses less ram than anything else and it hasnt had a single minute of downtime, due to the offline-first nature of it, when the server gets updated, the client never knows it.
That's kinda the point when it really clicked for me. If it's scripted to work, it will work. Provided, it's properly constrained. If you like, go give V.A.L.I.D. a try, it's opensource on Git. It even comes with skills files and a MCP to help your LLM implement it.
The thing I've really liked working with it, is the day there's anything off, you find it immediately at compile time, or when it's UI based, when you run the fuzzer. Essentially means 2 clicks and it's fully tested E2E. All you need to do is validate the UI looks the way you want it to.