March 15, 2023
3 min read
I have six years of professional experience as an engineer. While most of the time I've been a front-end developer, my first two jobs were full-stack positions. Coming from these two types of experience, I believe focusing on the front end would be the most reliable career trajectory for most of us. However, with lots of knowledge and experience, you can succeed as a generalist too. By either being a product engineer and getting significant equity early on or by building your projects and being able to cover basic back-end needs.
If I had to start my engineering career over, I would pick front-end rather than full-stack or back-end. It's hard to be good at both disciplines as a beginner or to make an effective resume with back-end projects without UI. It is easier to get going with the front end since it's more interactive, and you will get more encouragement seeing your work alive in the browser. Also, there are more open front-end positions, so you might have an easier time getting your first job as a UI engineer.
From my observations, in the current stage of technology, a full-stack developer would spend the most time doing front-end work. APIs usually don't change as often as the UI. Server-side logic can stay the same for a long time, while the interface constantly evolves due to various reasons, such as feedback, analytics, or new purely UI features. While both disciplines experienced lots of technological progress, I've noticed that when building a new feature, it takes less time to add an endpoint than to make a UI according to a Figma design.
If you want to pursue a full-stack route, I recommend getting very good with TypeScript since you will use it for both ends. While there are other languages for server-side tasks, having TypeScript across the stack will be more comfortable for both a team and a solo operator. People expect better and better interfaces, so having profound CSS knowledge will make you more effective at tackling UI tasks. For libraries or frameworks, the most reliable choice is to stick to React and continue with NextJS, which could be a full-stack tool considering API routes and Vercel.
To cover basic dev-ops needs, you can pick the combination of AWS and Terraform for hosting and managing your server-side infrastructure. Take a closer look at AWS Lambda for running APIs, S3 for storage, and DynamoDB as a no-SQL database. Terraform will allow you to control AWS resources by writing code, so you don't have to click through the web interface and later can recreate a setup for a new app by reusing your existing configs. Libraries for making NodeJS API don't have much difference. I found Apollo Server handy for making GraphQL API, and Prisma comfortable for SQL databases.
To become a faster software developer, check out my productivity app at increaser.org.