6 ms·
Ask HN: Should I be specializing in either front end or back end as full-stack?
I am not so sure whether to fully specialize in either of them since both, the frontend and backend are too interesting and have challenging problems.
I have 3.5 YOE and don`t know whether specializing in either of them would be beneficial for my career.
- jasonhansel 4y agoDefine "beneficial for your career." Do you mean maximizing earning potential? Working on interesting tasks? Having a wide pool of job opportunities available?
- yernarak 4y agoI think that earning potential goes along with interesting tasks. You can't be making bank while working for web design studios. So what I really meant was more money and interesting job
- gwbas1c 4y agoIn that case, the best thing to do is to feel out the organization you're in, and make yourself indispensable. Do most of the new hires want to work on server-side code; but your UI is challenging and pushes the browser to its limits? Lean more towards in-browser work; and accomplish critical in-browser tasks that your management has trouble finding someone to do. Likewise, is your in-browser code trivial, but your application is visibly too slow to the point that management has heat on them to make it more responsive? Focus on optimizing the data access layer, and become indispensable there. Where I've had success is looking for areas of a product that you just can't "open a book" to learn how to implement. The problem space should have a high degree of novelty to it. These problems exist in all layers of the stack. In my case, I became lead for Syncplicity's desktop client, a major Dropbox competitor. For awhile my code was a market leader. (We were the only desktop file sync product that could handle 100,000+ files.) Another area of success that I've had is in young companies, where team sizes are too small to really specialize. In my current role, I'm doing "full stack C#" with Blazor in the UI. (We chose it so that it would be easy for developers to move back and forth between UI and server-side code.) As we grow I'll probably focus more on back-end work; but at the moment, "full stack" is useful because I can make an API change in a single pull request without coordinating with anyone else. Edit: As far as money goes, you will need some flexibility. I've taken a few below-market-rate jobs because they were interesting; then when I saw money flow into the company I had to raise a ruckus in order to get to market rate. It's not something I like doing, but unfortunately, that's how the world works, and that's why I keep focusing on becoming indispensable.
- jstx1 4y agoYou probably know best since you've done both and you have some idea about what you like. You can have a great career with either.
- PragmaticPulp 4y agoWhich do you enjoy more? It’s always easier to learn and excel in a subject that you prefer. Don’t force yourself into a specialty you don’t like because you think it will help your career more. Doing work you don’t enjoy every day is not good for your career. As for specialties, both front-end and back-end are too broad of categories. There’s a huge difference between a back-end developer writing simple CRUD apps to serve 1 request per second and a back-end developer writing complex distributed, high-availability applications that serve huge numbers of requests per second. Don’t listen to anyone who tells you “everything is just a CRUD app”. Pick the domain you like most and then work toward the companies doing the most interesting work in that domain.
- yernarak 4y agoI think I enjoy backend work more, however in my 3 years of working I didn't really experience those complex distributed apps to work on. I've been mainly working with really simple CRUD apps. 1 server apps kind of things. That's why I'm also afraid that I won'be fit and good enough to work on those big complex apps.
- PragmaticPulp 4y agoYou’re only a couple years into your career. They’re not going to throw you into the deep end right away. You have to work up toward it over time and usually change companies a few times to get there.
- charlie0 4y agoWhich is the sad part. It's difficult to get good unless you have the responsibility of doing something challenging. I have similar experience to OP but am now tech lead and managing the infra, which has given me the confidence to take on other devops stuff.
- bradwood 4y agoThis. Getting a good appreciation for infra is key.
- ravenstine 4y agoDepends on what you enjoy and what you value. If you aren't sure about either one, why not go (or stay?) full stack?
- deanebarker 4y agoQuestion: at what point does "specializing" in one or the other make you not a "full stack" developer anymore? I can technically do about everything on the web, I'm just really bad at front-end, and really good at back-end, which is where I do most of my work. Am I "full stack"? How good to you have to be in...well, everything, to call yourself "full stack"?
- chipmonkey75 4y agoI think this is the flavor of question that should be asked, tho I'd go further. For one thing, I've always really loathed the phrase "full stack" - if you've ever written a UI that has to drive hardware that requires assembly level firmware, built a CI/CD pipeline to run tests, build artifacts, manage infrastructure, update firmware and send it all out into the world, you _might_ be "full stack", for everyone else it's just a colloquial term for a web front end and a database API developer. But I digress. Even in the common context, to be Full Stack, I'd argue that you should be better than the sum of the parts. The lift you get from being able to decide, intelligently and at the speed of thought (without talking to a counterpart on the other end), which pieces of code - optimization, safeguards, business logic, etc. - belong in the front and back end, and how they interact at peak effectiveness, is more valuable than just the ability to build a good API or build a good web page. Further, a full stack engineer, in my experience, is more likely to reach for tools like websockets, memcached, etc. earlier in a project than typical REST APIs (for example) where the line between back- and front- end require a bit more coordinated architecting, to achieve a richer end result. But I doubt this is widely accepted. Anyway, my point is I wouldn't focus on either just because; I'd focus on what makes you better by knowing some of both. What can you learn in the back-end to support problems you're familiar with in the front-end, and what can you do in the front-end to make better use of your knowledge in the back-end? That's where full-stack value really lies.
- dec0dedab0de 4y agoThis is a good question. as far as front/back end I think it's probably just good enough to mostly get it working right without breaking anything too often. But what I think really makes it front end is also when you have some server/platform administration skills. You would be surprised how many web developers don't know about tab complete on the shell, or have no idea how DNS works.
- iasay 4y agoHaving done 25 years of "full stack" now I'd go for the back end or even skip it and hit operations/SRE. The rate of churn is far far lower, the knowledge is valuable for longer and the money is better.
- arvinsim 4y agoBut the hours are horrible, right?
- iasay 4y agoI'm sure it is for some people but it's the least amount of hours I've ever done for the most money which is what I have optimised my career for.
- gwbas1c 4y agoUnanticipated issues should be the exception, not the norm. If unanticipated issues (both during and outside of working hours) occur at any regular interval; that is a problem that must be fixed ASAP. When unanticipated issues continue to occur; it indicates either a management problem, a technical competence problem, or both. IMO: One of the advantages of "devops" is that the people who get interrupted off hours are the same people who have to fix the problem. It's not always sustainable, though.
- diordiderot 4y agoWhat would the curriculum for operations be?
- moneywoes 4y agoHeard a VC in a podcast mention backend is going extinct with api SaaS so I'd do front end
- cvhashim 4y agoLast thing I would do is take engineering advice from a VC
- jamil7 4y agoI can't tell if this is sarcastic or not… backend isn't going anywhere.
- gorjusborg 4y agoSalesforce was going to take over the world with their 'No Software!' SaaS platform, circa 2000. We're still writing code in 2022.
- Apocryphon 4y agoThey didn't take over the world, but they certainly made their own world. https://www.youtube.com/watch?v=duJwGSUhRQA https://www.youtube.com/watch?v=duJwGSUhRQA
- swyx 4y agoin the macro: look at how many people in positions you'd like to be in (CTO, VP Eng, etc) have backend vs frontend backgrounds. there's a statistical "frontend ceiling" (https://twitter.com/changelog/status/1466420085908807681 https://twitter.com/changelog/status/1466420085908807681) in career progression. in the micro: statistics dont matter if YOU know what you enjoy + are good at + pays well. theres ways to do well and make money in whatever background. you can even do this by rotating ends every 2 years until you find a natural stopping point
- rasulkireev 4y agoTL;DR - I'd say try learning and building with both and see which one makes more sense. You don't even have to think which is better for your career, as frontend, backend, fullstack can all find good paying jobs. What matter is you enjoying your work. I'm a self taught software engineer, and have about the same experience as you. I knew a little bit of python when I started learning and thus decided to learn Django (backend), really liked it (even then CSS was giving me the most trouble). Then decided to learn JS to get a more well-rounded education, but hated it. Now I use Hotwired techniques for my web apps, to the least amount of Javascript possible.
- dec0dedab0de 4y ago“a jack of all trades is a master of none, but oftentimes better than a master of one.” I recommend doing a "deep dive" on whatever you're actually interested in, but have at least a more than superficial understanding of many other things. maybe once a month spend 4 or 5 hours trying out a technology being discussed on HN. But once you have a job, learn as much as you can about all the platform technology involved. if you're doing web development, this could be apache, nginx, azure, aws, bash, powershell, haproxy, f5, routing, DNS, firewalls, etc. but it could also mean jenkins, docker, k8s, ansible, puppet, github, gitlab, blah blah. Being full stack means you understand the full stack. If you're working on a project and there is part of the process you don't understand, that should be the next thing you learn. when you get a job you'll probably be mostly focussed on one thing, but you can ask the other engineers and admins questions. If they're any good they'll love to show off their knowledge. Being full stack really means not being stuck in your ways and not being afraid to touch something because the person who normally does it is sick. So learn what you want. When you get a job learn what the job is using even if it's not your immediate responsibility. Always keep your eye on things that might be a better way of doing it. Programming, and tech in general burns through people who aren't constantly learning something new.
- zackmorris 4y agoWhen I was just starting out, I had some imposter syndrome and need to prove myself, so I let other people's opinions rule my decision making. Someone always made me feel like the grass was greener in their specialty. Now that I'm older and more experienced, I see that every step of the development process is needed. So I suspect that you already have some idea of what you would like to do, and just want some external validation and permission to follow your calling. And I would say, go for it! Whatever is in your heart to do, probably correlates with what the world needs right now. And to be honest, I've often been hired to do one job but ended up doing another. It's really about how quickly we can learn, explore the problem space to find a solution and execute a plan. The rest is just titles IMHO.
- gorjusborg 4y agoI interpret your question as a realization that you have a limited capacity, and you'd like to prioritize your learning. If you are thinking about optimizing for employability, the answer to this largely comes down to the market you are trying to fit into (both location and business sector) and what you enjoy. As strangers, we cannot really give insight into those things with what you've provided. From prioritizing time/effort for value perspective, I can say: First, don't feel the need to be an expert at everything. I've been developing software for a long time, and there are still things I don't know. There will always be things I don't know. That opportunity for growth is one of the joys of software development. Don't burn yourself out trying to do everything. My philosophy is to invest heavily in learning things that are likely to be relevant for a long time, and invest less heavily in things that are likely to only be valuable for a short time. Having shallow breadth is useful, so is having deep knowledge in a foundational technology. Learning the language/framework/editor du jour is fun, but understand that you may be on a hamster wheel. Much of the new things are extremely similar, competing and vary only to address shortcomings with an earlier iteration while introducing the next set of shortcomings. It is necessary to have a full toolset, but resist chasing all the newest tools. Hamster wheels don't get you anywhere despite making you feel like you are moving fast. Also, don't feel like 'full stack' is some badge of honor you strive to attain and keep. Just make sure you are doing useful work that someone cares about.
- solardev 4y agoSure, they all have interesting challenges, but the day to day work is pretty different. I think in part it comes down to personality and preferences. Which do you prefer: * Working with users & designers, rapidly iterating UIs on some bleeding-edge messy ecosystem (React, etc.), dealing with whitespace and color palettes, state management and associated race conditions, and having clearly visible creative output at the end to show for it? or... * Working behind the scenes with other techies, vendors, specs and docs, architecting against best (or at least "known good") practices & patterns, enforcing rigidity and consistency and good versioning throughout your APIs, optimizing the hell out of every query, containerizing everything and jumping in and out of DevOps every hour, getting to learn various platforms and stacks in depth in order to produce a stable HTTP endpoint, working with many clouds... all to produce a remarkably well-engineered response that fellow engineers could appreciate but no user will ever see? You can get a pretty deep, but different, sense of satisfaction from either calling. And these days there is really no end to the depth of specialization you can achieve, only the breadth. Even within "frontend" and "backend" there is already several lifetimes of learning, and the pace of development is only getting faster. The frontend tends to iterate quicker, fast and furious, while the backend focuses on stability and resilience. The engineering cultures can be different (though not incompatible). In general I think the backend stuff is "harder" in that it's more actual engineering, and tends to get paid better. The frontend stuff is difficult in a different way -- creative and visual, often -- which for some reason companies don't tend to reward as highly. In our culture, engineering is thought of as more difficult than design, unless you're Steve Jobs or similar. But at the end of the day, either path (or remaining full stack) would easily get you a much-more-than-livable wage at any decent company, so it comes down to things like work-life balance (do you want to be on pagerduty?) and just how much you enjoy each bucket of work, and the kind of people you end up working with. If you're not sure, don't decide after 3.5 years. Maybe try a FE specialization for a year or two, a BE one for another year or two, etc. until you find a niche you really enjoy. For me it took like 15+ years to realize that what I loved was being able to quickly develop UX with an abstracted/serverless backend, using Next.js. But others hate that loss of control and want to work on the parts of the stack that I'm grateful to never have to touch again. YMMV... take time to explore!