# Full Stack Developer

## Summary


Any technological solution to a real-world problem consists of several IT components interacting with each other. The entire basket of software platforms, tools, services, and even hardware or networking devices employed in the development of an IT application is called *Technology Stack*. A developer whose skills cover the entire range of the technology stack, both at client and system end is a Full Stack Developer. It's more of a coinage indicating a programmer who is jack of all arts and master of one or two.  

These professionals can easily understand most programming languages and can help to bring the company's minimum viable product into the market quickly. This is especially important for web or mobile app start-ups. Full stack developers, due to their wider system understanding, are able to contribute better to system design in addition to development.

## Discussion

### How did the sudden demand for full stack developers occur?

The whole narrative of full stack developer emerged from the IT start-up boom. Earlier, large IT service companies or product MNCs were keen on specialists who knew one thing well. These traditional roles were GUI developer, C/Java programmer, database specialist/admin, network engineer, test or automation engineer, and so on. A typical IT application would be an integrated hierarchical solution requiring most of these skill-sets. 

But in start-ups, the team is looking to build a minimum viable product that can showcase their basic idea. This helps them seek funding and then make expansion plans. This has to be achieved with minimum number of developers and limited investment. Time to market is also very short. Hence, the need arose to recruit developers capable of programming in the entire spectrum of technologies.

A 2018 LinkedIn survey listed "Full Stack Developers" among the top 10 hard skills that developers need to possess in the IT industry. 

While full stack developers are presently the trend, it doesn't imply that experts are no longer vital. As the product grows and scales, specialists are required.


### What are the technologies that a full stack developer is expected to know?

Skillset of full-stack developers resembles the T-model. They have knowledge across wide-breadth of technologies but in-depth knowledge of a couple of those.

Knowledge of at least one language/platform in each technology layer is a must. In the web development context, popular full stack combinations include: 

    + **LAMP stack**: JavaScript - Linux - Apache - MySQL - PHP
    + **LEMP stack**: JavaScript - Linux - Nginx - MySQL - PHP
    + **MEAN stack**: JavaScript - MongoDB - Express - AngularJS - Node.js
    + **Django stack**: JavaScript - Python - Django - MySQL
    + **Ruby on Rails**: JavaScript - Ruby - SQLite - RailsVendor-specific full stack expertise is also quite prevalent:

    + **Microsoft**: .NET (WPF, WCF, WF), Visual Studio, C#, ASP.NET/ MVC/ MVVM, REST/ Web API, Azure, GIT/ SVN, Web (HTML5/CSS3/JS), jQuery / Typescript, Bootstrap / Angular, MS SQL Server
    + **Amazon**: AWS Amplify (Web UI), Amazon Cognito (web browser), Amazon API gateway, AWS Lambda, Amazon DynamoDBHowever, developers must always remember that the technology choice is dependent on what works best for the product under design, not the other way round.


### What is a company really asking for while recruiting a full stack developer?

Technology used in products are never static. Companies may decide to migrate to a new version, platform or vendor that enters the market. Therefore, there is no point in recruiting a full stack developer with rigid set of skills. By asking for full stack developers, companies are actually looking for the following skills and attitude in a candidate:

    + At least know one language or platform in each technology function - user Interface, backend processing, middleware, business logic, DB/storage, networking/communication, testing.
    + Self-learning ability to master a new technology quickly.
    + Ability to make a demonstrable product or prototype.
    + Can independently perform debugging and customer support for applications, with quick turnaround time. The bug could be anywhere in the system.
    + Work in teams and relate to the problems faced by developers working on other modules.
    + Understand the big picture, translate the customer requirement into a system design, which would encompass several technologies across layers. A full stack developer will make a good tech lead or system architect.
    + Good at integration testing and system testing from customer perspective.

### Are there multiple types of technology stacks?

There is no text book definition for what constitutes a technology stack. Any hierarchy of interdependent modules built using different technologies, frameworks and languages is a technology stack.

For instance, the concept of a protocol stack has existed for decades now - OSI Layers, TCP/IP stack and other communication/control protocols.

A mobile phone device can be an example of a hardware technology stack – body, network processor chip, peripherals, memory, battery, LCD screen all stacked one above the other.

A MEAN stack refers to a stack for building web apps and websites. It consists of MongoDB for database storage, Express.js as the application framework, AngularJS MVC framework, and Node.js as the server-side framework. 

The system design document prepared by a product development team would document the customised technology stack to be used for its own products.

Many large IT companies openly declare what technology stack is used in their development. 


### How to choose a technology stack for a product/application?

Technology choices are made only in the product design phase, after the product requirements are finalised. This involves evaluating various technology alternatives to make up the stack. The factors considered are:

    + **Meets the requirements entirely**: For example, if the requirement is to build a military application, then platforms with highest data security and reliability are chosen. Limited network connectivity, multi-language support, accessibility for the disabled are examples of specialised requirements that influence the choice of stack.
    + **Scalable to support future requirement additions**: Product requirements are always changing based on customer feedback. So the technology choice must support product growth for at least 3-5 years.
    + **Cost considerations**: When budgets are limited, companies tend to prefer open source options. Or if an older project has a pre-purchased software license, the same may continue into the new one. This is not optimal, but happens a lot in the industry.
    + **Skillset of existing workforce**: This goes against the idea of designing for requirements. But very often, due to HR constraints and inability to reskill, companies decide to stick to a particular technology stack.

### Can you list the technology stacks used in popular IT applications?

Some product MNCs and start-ups swear by the efficacy of hiring full stack developers. They openly publicise the technology stack used in their solutions, such as: 

    + **Facebook**: PHP, React, GraphQL, Memcached, Cassandra, Hadoop, MySQL, Swift, C++, PHP, JavaScript, JSON, HTML, CSS.
    + **Amazon**: Java, Perl, Angular JS, MySQL, Amazon EC2 container service, DynamoDB and a host of other Amazon frameworks.
    + **Google**: Python, Java, Android SDK, Go, C++, Preact, Angular JS, Kubernetes, TensorFlow and a host of other Google frameworks.
    + **Dropbox**: REDIS, C#, .NET, MS SQL Server
    + **StackOverflow**: NGINX, Amazon, MySQL, Python
    + **Airbnb**: Javascript, MySQL, Java, Ruby on Rails
    + **Fitbit**: Node.JS, Javascript, Objective C, JavaHowever many technology experts and recruiters call the idea as a passing fad which breeds superficial programmers, who lack the ability to build deep expertise in anything. Without knowing the nuances of a language, the best implementations are not possible, they claim. 

## Milestones

2008

One of the earliest mentions of the term "Full Stack Developer" is in a blog written by Randy Schmidt for Forge38 magazine. It's clearly used in the context of web development. 

2010

The first Google search for the term "Full Stack Developer" happens. So it's a fairly recent phenomenon. 

2012

Front-end development takes a rapid leap. Full stack developers for web development become a popular choice. Earlier, web browsers were poor at interpreting a lot of JavaScript. Adding complex functionality with JS wasn't always a good idea. As browsers became more powerful, JavaScript became versatile with extensions such as AngularJS and jQuery. 

2014

The number of layers in the stack is steadily increasing. In 2010, a full-stack developer perhaps needed to know PHP, jQuery, HTML, CSS, and FTP to transfer files to the hosting server. Today, a full-stack developer needs a wider spectrum of skills from modular frameworks to CSS pre-processors, from responsive UI design to cloud cluster management. 

2020

Facebook announces a new update to their technology stack. They are rebuilding their tech stack for Facebook.com, moving beyond a simple PHP website. Their stack includes React (a declarative JavaScript library for building user interfaces) and Relay (a GraphQL client for React). 

Oct  
2020

The position "Full stack developer" has over 14,000 listings in the US and 6,000 India on the Indeed Job portal.