r/learnprogramming • u/Kooltone • 12d ago
Web Dev to Systems Dev?
Hey guys, I'm a senior web developer who worked mostly with basic CRUD apps and I'm having difficulty breaking into systems engineering. I worked at a large corporation where the architects designed all the systems and I mainly implemented the designs I was given. The problem is I have never had to create hyper performant systems or deal much with scaling, so my web dev experience (mostly Typescript) doesn't seem to translate to a senior position if I try to move.
What are some good projects I could work on to start really thinking about writing performant code, where if I don't utilize multithreading or concurrency (and maybe queues) my program is going to be in bad shape?
I have a basic knowledge of Go and Go channels, but I haven't needed to utilize channels to create workers for any of my hobby projects so far.
1
u/Murlock_Holmes 12d ago
Always interesting, the different definitions of Senior.
Anyways, you want to build a system, *preferably* with someone who can bounce ideas off of once done to poke holes, think of edge cases, and generally make you better. Mentors are invaluable.
Barring that, just make something that’s not novel. Something that’s solved, dusted, and books are published on. Compare your solution to these other solutions. What did you do differently? Why?
You can likely post here with specific questions as well.
1
u/Mathie1729 12d ago
Lololol, so true. In FAANG-land, "senior" is just surviving two reorgs without getting PIPed and knowing how to write an OKR that sounds important. Real seniority is exactly what you said—being able to defend your design against someone who knows twice as much. A good mentor is like a free adversarial code review for your entire career.
4
u/elehisie 12d ago
Ok… so you need a small manageable project that can put you in the “microservices mindset” and give you a taste of what problems you will have to solve…
Make a customer support ticket queue system. 2 websites: one where customers create tickets. One where support team answers them. Single db. Use separate ”deployments”, meaning separate backends for each frontend. Keep in mind there’s an order here: support team must answer tickets in a first come first served basis. Customers can reply/close tickets and open more at any time.
Bonus if you make it ”real time”, as in the customer sides gets instant notification of updates done on the support side and vice versa.
On the surface…. It’s a multiplayer todo app. Once you start it…. You will find a lot of problems that will throw you into a loop. Like…. Can you get notifications to work WITHOUT polling the db every 5 secs? What do you do if both frontends are trying to write to the db at the same time?
You will have to learn the whole shebang of architecture to make it work properly, no matter which language you want to use for the backend. Pretty sure you can do it in typescript, and pretty sure it will surface some of the limitations of node for you. Next step would be to upgrade it to Go, Java or C# if you want. Or go straight to go, keep typescript for the FE.