I am doing software development for the last 15 years. Since I heard the term “Full Stack Developer” few years back I had a strong dislike for this term. To most people full stack developer is someone who can write frontend code, build backend APIs, and deploy applications to cloud. They can code in multiple programming languages(JS/Typescript, Golang/Java/C#/Python), knows enough to design and store data in either relational and NoSQL databases, follow DevOps practices (CI, Configuration management, etc.), knows about multiple architecture styles – Microservices, Monolithic, Serverless, and can at least deploy to one public cloud. Along with all this they also know and practice automation testing and can write clean, maintainable code.
In my 15 years of software engineering career I have grown technically by following many hypes and technology movements. It takes year to build proficiency in technologies and you have to keep evolving yourself.
- In my first four (2005-2009) years I got introduced to Agile and extreme programming so I started practicing automation testing, refactoring, and continuous integration since the beginning of my career.
- In my next three (2009-2011) years I got associated with software craftsmanship movement so clean code, SOLID principles became part of me.
- Then in the next three years(2011-2014) I got into NoSQL and cloud computing. I was OpenShift technology evangelist for a couple of years.
- Then in the next five+ (2014-till now) got into DevOps, containerisation, functional programming(Scala, Haskell), React/Angular, Microservices, Serverless, and many other.
I didn’t pick all these technologies in a couple of years. It took me 15 years. I followed different movements and I was at the right place at the right time. So, I end up riding these waves. One thing that is true with technologies is that once you have worked and seen plenty of them then most new technologies make sense easily to you. Many new things are just old rehashed stuff.
These days every young engineer I meet say they are a full stack developer. Most organisations are trying to hire full stack developers with 2-4 years of working experience. We are just fooling ourselves. There are even courses on full stack software development. We find new ways to mint money.
You can’t become a full stack developer in a couple of years. It takes years when you have strong interest in technology and work with good mentors on interesting software development projects over time.
If someone ask me today do if I consider myself a full stack developer then my answer will be No. I have strong preference for backend development but I can do other stuff if required.
To me being a full stack developer has less to do with technology but it has more to do with learning and open mindset. The mindset needed to get things done and learn stuff on the job and in your free time. You don’t want to be labelled one thing or the another. You have to care about the whole stuff even when you work in one specific area. It takes years of effort to become proficient in a specific technology area. You can become an expert in one specific technology area but at the same time you should care about other pieces of your ecosystem as well.
Let me share a small example. Few months back I had to help a team that was building an application with REST APIs written in Java Spring Boot, frontend written in Angular, and deployment on Azure. The team was rushed into development and timelines were very short. So, they end up taking many shortcuts. One of the shortcuts was that they didn’t use pagination. This all worked well during development when team was working with limited data but when customer testing team tested with realistic data application started giving performance and memory issues. Application code was fetching all the data from database doing filtering and transformation in Java process and dumping everything to frontend in the JSON payload.
The team estimated that to fix the 20 API endpoints they would require 20 man days. It would be combination of database , frontend, and backend developers that would get this done. This was a no go for the customer as it would impact project delivery. But when you have developers who only care and know about their areas you can’t do much. There are hand offs and integration points when people divide work along technology boundaries. It also leads to wasted effort.
In my view these are the situations where having full stack mindset is important. You have to know different aspects of your stack and get your hands dirty with them.
To conclude the example I took two days and got the full thing working i.e. database, backend, frontend. And deployed it to Azure using Kubernetes. It does not mean full application has to be built this way. I can quickly make code changes on already written frontend code but if you ask me to create a frontend app from scratch and care about all nitty-gritties of CSS along with the backend development then I might not be effective. There is a cost of context switching. The cost we pay when we switch between different technologies. I am not proficient in fronted development but I am good enough to reason it out and make changes if required.