Ask HN: Moving from tiny websites to serious tech skills?
I’m a self-taught web coder and have made some small CRUD systems for very targeted tiny clients during my professional life. I have also made a few hobby sites for fun just for myself.
I’d like to expand my skill set but I have trouble visualizing all the moving parts of a “big” web app and all the tools that go into it—when people talk about containers, or testing, or deploying such-and-such, I don’t have a clue. With HTML/CSS/JS, I can spin up a little demo to play around and learn on another personal/toy project, but how do I, as a solo person, learn about larger-scale technologies?
I’m a visual artist and print-based technician so front-end would probably be the place to focus. Is there a recommended path for going from hobby projects & small sites to larger-scale best practices in React/another important platform?
87 comments
[ 2.3 ms ] story [ 289 ms ] threadTo add to this, for the "large scale technologies" you're interested in, remember that there aren't many individuals that knows it all (and neither will you!).
Senior engineers and CTOs will have a rudimentary knowledge of a lot of the moving pieces, but it's primarily a team effort. Even if you "knew it all", you wouldn't have enough hours in the day to keep it all up to date and running. Running any larger piece of software is a team effort.
But as a member of a team you'll still get a much better idea of all the pieces, even though you won't be able to master them all.
What I suggest for front-end is a component based approach: React, Vue, Svelte, Lit. Components are a new paradigm, there are here to stay. I also suggest to learn “The new responsive” from web.dev - in the same way the future.
You will also need to interview there. Your username indicates that you suck at interviewing. I hate to break it to you, but interviewing is a skill that can be learned. With. Practice. You can either interview at places or try a site like interviewing.io You can get better at interviewing, trust me.
Once you get hired to the not-so-software company, use that experience as a stepping stone to get hired somewhere better. Repeat until you find a place you like
in terms of interviewing, no opportunities so no experience. in the past ive had to apply to roughly 80 jobs to get one interview. recruiters on linkedin are a little better at ~30 conversations per interview but its plain exhausting, takes a ton of time, they demand replies instantly or ghost, but really its overwhelmingly likely they'll ghost me anyways.
its been a while since the last round of attempts so ill give your suggestions a shot in a few weeks. thanks
You can also find an existing project and contribute to it. What's your GitHub username? I can follow you
list a couple clients if you can
point out that you’ve been working for that (your) software company for several years as a senior software engineer
pass bullshit brainteaser problems
viola
been learning and growing for 3 decades starting on a IIe but highlighting that part hasn’t worked so why not experiment with my approach?
Expanding on the above… I work at such a place and our bar for recruitment is a lot lower than that of more snooty companies principally focused on software. If you can demonstrate potential then it will be relatively easy to get in. From there, you will start working on projects larger than what you are used to, that _won't be_ "the next $FAMOUS_THING" while still offering plenty of learning opportunities.
Your resume should be exactly 1 page long, and have something that stands out (company worked for, open source contributions, volunteer work.. anything that makes it be different).
If you have worked for decades, write "over 10 years experience" :)
Bullet points are good, long sentences are bad.
Listing tech/languages is a good idea if you can list a lot of real stuff. No one cares if you used ms word.
It should be 1 page!!! Don't cheat via small fonts. People can look at your linkedin if they need to know all that crap.
I went a 3-month programming bootcamp, got hired as a junior software engineer at a non-profit with a small engineering team (~10 people), and learned a _ton_ about the sorts of things you’re talking about (automated testing and deployment, container technology, JS pipelines, etc.). I also became a much better programmer through years of code reviews and pair programming. If you can find a place that’s big enough to have several people far more experienced than yourself and at least one of them is willing to help you out when you need it, you’ll probably get where you’re trying to go!
Look at marketing agencies especially, where they typically do more than dev, but need some dev skills in house. Focus on Wordpress for smaller projects and use Laravel as a framework for larger stuff. You'd be surprised how many businesses just want a Wordpress site as part of a larger marketing initiative, so be proficient there and you can make money. And the Laravel ecosystem has everything you need for large scale web projects, with Laracasts being a great resource to learn.
You can also look around for overviews of web architectures. You're gonna wanna lean about software design/architecture in general, and branch out to learn about all the components of a modern web application. You can find all the components used in MediaWiki I'm sure!
Personally I've been wanting to learn how to build Progressive Web Applications so I can make some apps for my phone without having to learn Java.
Practice your database skills by implementing some project using indexedDB [1]. Practice your parallelization/efficiency skills by implementing some webworkers [2]. Practice your IAM skills by implementing some oauth2 API for some website [3]. And so forth.
Look here [4] for most (if not all?) the web stack things which you could experiment with, many of which will reflect back at "the real thing". I've done this and it introduces concepts in a good way. It also forces a "natural" progression towards backend when you have to deal with stuff like https/self signed certificates, websockets and so forth.
[1]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_A... [2]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers... [3]: https://developers.google.com/identity/protocols/oauth2 [4]: https://developer.mozilla.org/en-US/docs/Web/API
I would like to also offer a different perspective on the idea of "big" web apps or more "professional" setups. If what you want is to be able to do more complex projects for your customers or for yourself, just do that. Solve the problems you need to accomplish your goals. Maybe your development cadence could improve from getting better at testing. Maybe you're not happy not knowing how to maintain or deploy your code. Focus on your path and your problems and forget about what you "should" be doing. That's how most people become proficient engineers. Meanwhile keep up with industry news and read a few books per year, and know that the best way to really kick this into overdrive is working alongside more experienced people in a team.
as a solo person
There are plenty of good resources online, free and paid. Paid options like Pluralsight have the most easy to find quality curated content that can guide you; alternatives like Cloud Academy will give you hands on labs.
That's obviously in addition to the endless stuff on YouTube (the difficulty here is separating the wheat from the chaff) and in books and articles.
Only by diving into dedicated, expert resources like those will you get the context, but mentoring within a team will be the fastest and surest way to competence on larger systems. Look for a job in a team.
The technical excellence road has a lot of dead ends and false prophets. Be aware!
I know that "PHP" is a dirty word, hereabouts, but I submit Exhibit A, the "fishtank graph": https://w3techs.com/technologies/history_overview/programmin...
There are some really big, well-written (and badly-written) systems out there, in PHP, and it's a great place to learn about some of the baseline technologies that any aggregate Internet system will use.
But I have never liked the language, myself, despite having developed some fair proficiency in it. These days, I like doing really nice frontend work, in native Swift. PHP is what I use to create backends. It works fine.
I'd definitely agree with Rails. IMHO it has been defining Web development for a long time. Even today patterns from Rails like are copied outside of the Rails context. Service Objects seem to be a recent example.
Hotwire seems definitely cool tech but after having been exposed to Ruby on Rails it's possible to go into various directions. (Classical server-side rendering, Hotwire or e.g. React-based SPAs)
But yes, some rare sites do need to scale above >1M unique users, that's where the trouble begins. You can start by benchmarking everything you build. Think of every line of code and optimize it, or you just build your stack in smaller pieces and scale out using modern tech Stack. The question is, what do you want to learn. The first way would learn you how to build efficient software, the second one would teach you how to waste lots of resources but be new, modern and a hipster. And in addition, now a days employees are so expensive, that a company don't care about Cloud costs if this makes dev faster.
As a rule of thumb: it's probably on the order of 5x-10x (absent outlier events); then look at your data to find out what it actually is (users are not evenly distributed across the day/week); then apply the usual 4x or so rule for capacity planning.
That is to say - it isn't necessarily a scaling issue. Especially when you're just starting out and no one is looking at your damn app anyway. If it's well designed and cleanly built you'll have plenty of time to factor for scale when the time comes (if it comes).
The biggest thing is understanding that you may work on a single tool in ~10/100 people, so you must develop and work with other people in mind. So, modularity, enforcing code clarity and writing good tests, understanding product decisions and so on... Personally, I learnt this stuff on the job pretty fast - still newbie, but can autonomously solve medium/complex projects without senior help, which should be a base goal.
Larger-scale technologies is mostly larger-scale organization - just apply to one of those and I am sure you'll catch up fast
Tools are tools. They solve some problem. Many of the large-scale companies have problems you as a single frontend developer might not. If we better understand what is your motivation maybe we can better advise you which techniques are worth your time.
Are you interested because you would want to join a big company? Then it is a question of how to get a portfolio which you can use to get through the filters.
Are you interested because you have trouble keeping up with some aspects of your solo developed projects?
Are you perhaps feeling that your simple solutions are bad just because they are simple? In that case it is important to know that what is best practice for a team with 200 developers might be a terrible waste of time for an individual.
Try React or Vue with some database component and go from there.
And before you start, look up a resource for how to write good tests with the tech you choose, and work on that as you go as well.
Good luck!
You could, for example, deploy your existing simple stuff using k3s, a single-host, local, simplified kubernetes. Or spend $10-$30/month on a cheap hosted k8s instance, like digital ocean.
Or, leave your deployment as-is, and just tackle moving from vanilla html/css/js to vue or react.
1. Learn React and Typescript. React has taken root in the enterprise and it seems to be the frontend equivalent of Java.
2. Learn about CI/CD: Github Actions is a good starting place. If you're hosting your projects in something like Vercel, try running separate staging and production environments.
3. Look at popular open source frontend projects. The newly released Supabase dashboard[0] seems to be a pretty good starting point to figure out modern best practices. Excalidraw is another[1].
4. Frontend masters has some pretty good courses regarding React and enterprise Typescript. Would give those a try (the price is $39/month).
5. Where I'm from (Finland) Spring Boot (Java/Kotlin) seems to be the most popular backend framework. Node and Python frameworks share the second place. If you want to learn backend, I'd suggest picking one of those three. Rails if you really want to.
6. At some point you'll probably want to work with AWS. If React is the Java of the frontend then AWS is the Java of infrastructure.
7. It's never a bad idea to know SQL.
[0]: https://github.com/supabase/supabase/tree/master/studio
[1]: https://github.com/excalidraw/excalidraw
You'd be surprised at how many software companies' testing is "clicking around in the app", deployment is "upload to store/ rsync to server" and containers aren't used at all.
Start learning React (you can also take a look at Vue), do some tutorials and build some CRUD app which has a database.
Stay focused on the front-end, learn "just enough" of everything else when it comes up. I'd recommend getting into Cross-Platform Web app development using something like Electron (Desktop) or React Native/ Ionic (iOS/Android).
After learning the basics, dive into some frontend-heavy open source project that uses your framework, figure out how it works and try to fix some bugs.
For example, this is a Markdown editor using Vue and Electron:
https://github.com/marktext/marktext
Not only that - a non-dockerized, bare-metal, but otherwise cleanly coded "rsync to server" app can be -- compared to the usual non-spec'd, undocumented cluster-f hairball shoved into a container, with a shiny layer of CICD thrown on top -- can be surprisingly joyful to maintain.
But it helps to have an idea on how they work.
A lot of "serious" tech skills is either cargo-cults building engineering playgrounds to benefit their own career - they are truly only necessary in very narrow cases you're unlikely to see unless you operate at actual FAANG scale (VC-funded FAANG wannabe doesn't count).
If your intent is to work at FAANG or a FAANG wannabe building engineering playgrounds then fair enough, these skills would be useful, however if you want to learn to solve your own problems keep in mind that most of the cargo culting is not necessary; I suggest you learn solutions as you encounter actual problems and it's fine for these solutions to be old-school and "uncool" such as Rails/Django or God forbid, PHP.
If you don't know where to begin, you can start by reading the issues and pull requests for the project on GitHub, where there is often a discussion of how to solve problems from multiple different perspectives. When you've lurked around for a while and feel like you have something to say, consider commenting and starting communication with other people working on the project. When you hang around long enough and even start making pull requests of your own, you'll have newfound expertise and new contacts to ask questions who might already be experts in the technology you wish to become an expert in.
Tbh at work I see people who can deploy a container on the cloud but have no clue how to start the program quickly to check something lol, so ...
Keep it simple for your own. Use git, but you don't need CI. ( VS has an awesome publish option for example)
Know the tools you know and use them required. Sometimes there are frameworks that help you speedup coding *5 ( eg. A screenshot from a web page is much easier through node), but i know c# the best. So 85% of my projects are in. Net.
If you don't know a backend framework. Consider RoR because of it's scaffolding. Do you work on Windows, give Visual Studio community a try. Pick a framework that is batteries included ( registration, login ) without jwt in the beginning.
For my projects after work, using asp.net MVC with EF and using scaffolding is a 500% quicker turnaround ( easy) than using any SPA framework.
Don't do cloud, it's expensive and for enterprise. Self-Host with a cheap VPS. Maintenance isn't as much as many claim. Implement some security measures! ( Private key ssh, firewall ( is always free)... )
What's your goal? Create your projects as cheap as possible and as fast as possible, if it doesn't gain traction. Then you could take above into consideration and use boring technology ( http://boringtechnology.club/ )
Is it purely to learn? Do some certifications about the cloud and spend halve a year learning non transferable skills with vendor lock in ( AWS, Azure, GKE, ...)
How are you doing deployments right now? Do you have a bunch of manual steps that have to happen in the right order, can you do a rollback quickly if you have to? Try learning some better deployment technologies that fix those problems. You might not have been bitten hard by any of them yet, but you never know when it could happen.
How about logging and monitoring, have you integrated with any tools that could allow you to monitor performance and error rates from all of your sites? That's also worth doing if you haven't already.
Are you using source control best-practices and CI/CD systems? Are your repos set up such that a new contributor could get onboarded to them easily? If not, do that. Try spinning up a VM or something and getting your repos set up on them, and fix or clarify as many manual steps as possible.
It helped me understand what stuff I still needed to learn, and how to work in a team. Also helped my confidence, seeing that I was able to work with other people, some of them had already jobs as programmers, and solve problems with them.
After that I decided to work for others, but I could as well had continued doing frontend master courses and stuff like that, I think the Bootcamp taught me the "glue" between technologies, and how to think like a programmer.
There are a lot of online Bootcamps now, so no need to go to another country like I did, I'd look for some bootcamp where you work together with other students, and that has great mentors with industry experience.
This, more than any particular tech or approach, helped me more than anything. Just working with and learning from/with really talented people.
One of the main things I would say is that nothing can really prepare you for the jump because a large web app made by many developers over years is a very different kettle of fish to your own small projects.
That said, making and deploying your own things start to finish gives you a great foundation to build from, your core skills will be fine, you will just need to learn how to orientate yourself in a big app and that’s a skill you learn through doing.