While giving a classroom lecture recently, a student asked me the question, What is Full-Stack and how can she become a Full-Stack Developer.
Arguably, this was not the first time someone asked this question… similar queries are taking rounds already in minds of thousands of aspiring developers. Well... I thought this is time I should put my 2 cents.
Normally people answer – A Full-Stack developer knows all stacks of technology. But when confronted with deeper questions like what is the definition of Stack in today's world? Who can be a potential full-stack developer? or what can one do to become a full-stack developer ? we are lost in complexity.
To explain this, let us first understand - What is the expected output from a Full-stack Developer ?
The idea of a “full-stack developer” isn’t about being fluent in every possible technology there is; because, specialization exists for a reason. It’s more about having an understanding in each of the stacks, to communicate intelligently among team members and come up with a working prototype quickly.
Full Stack Developer NOW vs 13 years (2004) ago
I have picked 2004 for a reason, because it was then when my class-mate and dear friend Sundar Pichai <Google CEO> first time unearthed the fact (at least first time for me) that End User Interface/experience design is the key to any software development, a good developer should start his/her work from there, then backwards all the way to data and process flow.
Today, we are staring at 2018 and beyond. To me, a Full-Stack Developer is -
- good in at least one technology at every stack
- should have awareness of capabilities of peer technologies, and how to use them
- comfortable in picking/learning any peer technology, when need arises
So, let’s try to break down and categorize the technology stacks that I think are required from a full-stack developer today:
- Customer centric Web Design
- Technology for Customer Devices
- Tools to develop Web pages, Flows
- Technology to keep and serve Assets and Data
- All the nut-bolts - System Administration
1. Customer centric Web Design
The business aspirations of future tells me that, this is the most important area. This area continue to expand, eventually blurring the distance between a Computing and Human interfaces due to rapid automation.
This will continue to become complex as Human-Computer Interaction (HCI) evolves. Technologies include:
- HCI (Human Computer Interaction)
- Converting website design into front-end code
Here comes the fun part. Fun, becuase this is the entry point for majority of Web developers today. Many learn these during college days... at least a part of it.
Needless to add... this stack is the backbone of Web site presentment. Here, the developer converts business logic to its visual representation. If you want to produce an enterprise class website, you’d better know these and all their annoyances.
- Semantic Web: HTML
- iOS, Android
- Hybrid: PhoneGap, Appcelerator
- CSS / CSS3: LESS, SASS, Media Queries
- Responsive design
- Mobile devices and Browser compatibility
- AJAX, JSON, XML, WebSocket
3. Tools to develop Web pages, Flows
Today, I will never hire a developer who does not use a version control, even if s/he is a solo developer.
With virtualization tools, having separated development environments on a per project basis is kind of mandatory. They are easy to set up with VirtualBox and Vagrant the least. However, With Vagrant you also need to know the basic syntax of Ruby and shell scripts as well.
(I shall write a separate blog just to cover the virtualization topic. There appears to be lots of parallel definitions going on - probably all correct in their context)
The barrier of entering the web development industry as a web developer remains low, but getting increasingly complex. Complexity grows, for example if you want to set up Vagrant , then you need to know Ruby’s syntax, as simplified as it is or if you want to manipulate DOM elements, jQuery is a good to know technology.
The dynamic nature of the whole industry makes requirements shift often to the most popular and “next best thing” tools and programming languages.
- Version control: Git, SVN, Mercurial
- Troubleshooting techniques
- Virtualization: VirtualBox, Docker, Vagrant
4. Technology to Keep and Serve Assets and Data
Apache and Nginx are basic norms. A full-stack developer should know how to set up these applications and serve the contents of his/her website.
NodeJS or PHP or Ruby (or similar) is what needs to be mastered on a high level.
In addition to web server and programming languages, database management is also a requirement for a full-stack developer which in itself is another beast. This is the place where scalability and performance plays vital role.
Relational (such as MySQL, PostgreSQL) vs non-relational databases (like MongoDB, Redis or Cassandra) are differences the full-stack developer needs to know, along with knowing the syntax of XML / JSON. Technologies:
- Programming language: PHP, NodeJS, Ruby. <This list is very long here>
- Web servers: Apache, Nginx
- Database: MongoDB, Cassandra, MySQL, Redis, SQL-JSON
5. All the nut-bolts - System Administration
Most of the Internet is powered by Linux; it’s a de-facto operating system for web development. A full-stack developer is ecpected to know how cloud hosting works. e.g. Amazon, GC, Rackspace or other providers and its APIs.
Search is an integral part of most websites – a developer should know how to set up and use search servers such as Sphinx or Elasticsearch. This part is relatively easy
Caching is also very important, Varnish, reverse proxy, Memcached and opcode caching. Technologies:
- Linux and basic shell scripting
- Cloud computing: Amazon, Google Cloud, Rackspace, etc.
- Caching: Varnish, APC / OpCache, Memcached
- Background processing: Gearman, RabbitMQ, Redis, ØMQ
- Search: Solr, Elasticsearch, Sphinx
- Monitoring: Nagios
- Security: SAML 2.0+, Certificates
Whooshhh... so much to learn… one can ask… Is it worth becoming a full-stack developer ?
I may have gone overboard while mentioning technologies within a stack, but believe me sooner or later you would want to know, if you want your website to be world-class, scalable and secure.
These herd of people are rare breed and hence in great demand. They will continue to be in super demand because for every decent size web project, I would want to be at least one Full-Stack Developer in the team. The person need not necessarily be the team-lead, because managing or leading a team is a different kind of skill.
What about Full Stack 'Architect' ?
One can quickly suggest that if someone knows so much… s/he must be an Architect... not merely a developer.
In my view… There is at least one major skill that differentiate Full-Stack Developer and Full-Stack Architect… that is - Business acumen, cost consciousness, time criticality. A well-developed beautiful web site is termed failure if it cannot attract target customers, cannot generate revenue. I shall write a separate blog just to differentiate between two.