Fullstack (full stack) is not a myth! Fullstack developers do exist 👽. I’m writing the motivation behind my decision to become a fullstack one and whether should you.
I started my professional career as an iOS developer since 2013, I thought I would stick with Apple ecosystem and becoming an iOS expert. Things went well until 2017 when I wanted to build my own products. I started with iOS apps only using paid API services, then things getting complicated and I started to develop website and backend for my apps.
We all know that the fullstack path is inevitable to any indie maker or startup founder. This path is exciting but overwhelmed, useful but dangerous, jack of all trades but master of none. We better figure out our expectation and shape our learning roadmap carefully.
This question has popped up in my mind for years. Sometimes I really struggled to figure out what to do next because of this confusion. I called this confusion because it caused a conflict in my career path.
As software engineers, we can wear a lot hats at the same time: corporate developer, remote developers, freelancers, open source contributors, indie makers, tech startup founders, hobbyists, hackers. What motivate us to code everyday are money, fame, financial independence, hobby, you name it 😎.
A fullstack developer is a person who can develop both client and server software. Knowing how to code at least one frontend language and one backend language is required. It’s optional to know more about mobile or devops development.
Versatility: This is the most important reason why more and more companies are hiring fullstack developers because you can work on multiple things and switch back and forth between backend and frontend (sometimes mobile or devops) according to project demand.
System Design: Equipped with vast experience of building products from bottom database to web app client, dealt with system continuous integration and continuos deployment, handled requests from any sides. A fullstack developer can see through the big picture and can provide excellent contribution to system design and optimization.
Resources Friendly: Since you can handle all aspects of the job, you can save much money by not having to employ multiple developers on a single project. The coordination cost is also decreased leading to faster time to production.
Fast Learning: Knowing many technologies will increase your confidence and ability to adapt new ones. You are not single-minded or technology biased, you are open to learn what needed to get things done.
Jack of all trades: Sure! It could be a disaster choice and hammer your career path! The amount of knowledge you need to master is insane. Being good enough to build a working product is hard let alone code quality. You could become average on everything you touch and it might create huge technical debts in the future.
Master of none: It takes people 10k hours to master something so you might fall into this trap if you’re not focusing on anything but the whole stack. This becomes worse when you’re staying around with other specialists in your companies, you will feel insecure and vulnerable than ever before 🤕
This comes down to personal favorite, current trend, learning curve, developer community, third party libraries, available jobs and the most important thing: what motivates me to code everyday is to become an indie maker who has successful products.
In startup environment, the number one priority to bring the product to profitable stable as fast as possible which minimum cost and effort to decrease the risk of failure. With that in mind, they often hire fullstack developers at first and hire specialists when really needed! Post success, they even change the development stack to increase product performance and they are not afraid of that because they have MONEY 😜.
Don’t let yourself locked with the title. What I mean is most of us developers sooner or later are naturally becoming fullstack developers. Fullstack Developer title is being overused by companies, it creates a dangerous illusion in our mind to categorize ourself as a generalist but forget to master something as a specialist.
Master something in your stack. It’s okay to be excellent at one technology in your stack and average on everything else. Trying to be good at everything is not a smart move and you are not comparable to anyone. The point is to pick one at first and gradually expanding to others.
Aligning with your motivation is the most important thing. Whether you want to become a generalist or a specialist, it’s important to figure out what really motivates you to code everyday. The specialist delivers better quality work, higher chance to work for big companies, easier to deal extremely high salary. The generalist gets more things done, high chance of delivering low quality work, easy to work in startup environment, never gets bored but easy to get lost.