DEV Community

Cover image for The Ultimate Full Stack Developer Tech Stack | 2021
Pranav for CODEDAMN

Posted on • Originally published at

The Ultimate Full Stack Developer Tech Stack | 2021

The primary technologies for any developer would be HTML, CSS & JavaScript. It is assumed that you understand what the three of them are.


If you are a React Developer, you need to learn Next.JS, a server-side rendering framework. This will make your website performant, faster, and robust, but overall, Next.JS has a great developer experience. This might be opinionated if you are a Vue.JS developer, then you can consider Nuxt.js

2) Tailwind CSS

Tailwind CSS is again opinionated. It reduces the possibility of values you can create so that you can make a better layout faster by writing less CSS. Tailwind has pretty discrete values so that you can write p-1 for padding 0.25rem. This helps us in maintaining sane layouts, padding & borders. This is mostly recommended for developers who want to focus on the logic and not on the interface as it helps us create better UI's faster with less code to debug.

3) TypeScript

For anyone working with mid to large-sized projects, it's vital to use TypeScript over JavaScript as maintained, and refactoring the code becomes much easier. TypeScript is generally considered as the superset of JavaScript. Some developers may think it's absurd and a setback in your learning journey to use TypeScript over JavaScript because JavaScript offers dynamic capabilities. Still, TypeScript enforces discipline to the code, which is very much required while writing and maintaining a more extensive codebase.

4) GraphQL

GraphQL changes the way you send and get data from HTTP requests. It's a whole new way to interact with the data as GraphQL brings in the schema. Schema also helps in easing the data validation process, which if you want to do the data validation more seriously, you should use joi library. When you combine TypeScript with GraphQL, you get access to libraries like graphql-codegen, where we can generate static types for the front-end. So that now the front-end code also knows which types to expect from the API calls, this eases the process of identifying and maintaining when you have many endpoints for your API.

5) MongoDb + Mongoose + Mongoose-tsgen

Well, you all might be familiar with MongoDB, a NoSQL database to store your data, and mongoose to connect the database with TypeScript. You might be wondering then what's the need for the mongoose-tsgen. Well, it's similar to GraphQL-codegen, which helps in generating types for TypeScript so that your code knows which types to expect from the database. Using mongoose-tsgen, it's hassle-free, and you'll also have easily manageable types.

6) Jest + Cypress

Now you got a pretty good tech stack for building the project. Now it's time to test your application before shipping it to the end-user thoroughly because you don't want your code to be buggy and vulnerabilities. Jest and Cypress are a good combination. Jest is a runner for the most part and does not have heavy lifting, and with the help of cypress, you can conduct end-to-end testing for your application which is a vital part to avoid any bugs in your production. If a testing pipeline is in place, there is no need to test it manually. The rest is taken care of by the pipeline. You can learn about cypress in this Codedamn course.

7) Prettier & ESLint

Prettier and ESLint are very good utilities that help you as developer dependencies. They help us save a lot of dev time by structuring the file and finding linting issues in the code. This also helps another developer working on your code save time as well, as everything will be configured from them since the start.

8) GitHub Actions

GitHub Actions is for creating the CI / CD pipeline for your codebase, and knowing the basics of GitHub is also essential before you move on the explore GitHub Actions. So once you set up the GitHub actions and push the new code to the repository, you can now sit back relax as the code is built, tested, and deployed by the GitHub actions itself.

9) AWS Lambda

For starters, AWS Lambda is a good choice to learn on the architecture side so that you can host your database or GraphQL there. You can choose EC2 when the database has to handle a lot of transfer, but as a beginner, AWS Lambda works for you as it is stateless and server less.

10) Serverless

The mention of serverless brings us to our next technology, serverless, which is a command-line tool that helps us manage the Lamba very efficiently. You don't need to master this, but getting to know how it functions can reduce the amount of time you spend managing and scaling your cloud architecture. You have to understand how to configure your infrastructure as a code.

Infrastructure as a code is highly important because if anything goes wrong with the existing architecture, you can redeploy your architecture from your code. You need to have a good understanding of the infrastructure as a code.

11) Vercel

If you are using Next.js for your front-end application, then no doubt you should highly consider deploying your codebase in Vercel. There is no better way to deploy your Next.js code than Vercel because Vercel owns and manages the Next.js framework itself, so who will know better than Vercel to configure its framework.

12) Web Security (bcrypt & OAuth)

Web Security is the vital part for your application to be secure and safe for all the users. You should know about bcrypt, which is used as a password hashing tool and OAuth for logging in with third-party APIs like Google & Twitter for your application. Above all this, following the standard web security protocols and knowing about the OWASP's top ten vulnerabilities and how you can avoid them is good enough.


The following list of technologies sums up the full stack developers' tech stack. There might be some alternatives for the technologies mentioned above, and it's only up to the user to choose them. A healthy competition between services is required to provide and improve the existing services. But, each technology has a vital role from the development to the production cycle, so it's necessary to have a basic understanding of all the above to maintain and easily develop new features for your current and subsequent application.

Top comments (0)