(Blog portion published in LinkedIn Pulse on May 26, 2016)
In the last blog entry I shared my thoughts on the possible origins of the full stack developer. In this blog I will share my research on the key skills required for the “full stack engineer” role.
The breadth in the role of a full stack engineer may stem out of several parameters and constraints, such as
- team size, mindset, organization and skill set,
- stage of the product (concept, experimental prototype, first version, mature version), and
- constraints (such as architectural flexibility and freedom to choose practices, technology, open-source software)
As a sample, the following is a list of non-exhaustive activities and building blocks for a simple application:
|Design||Interaction design, Visual design, Object-oriented design, Service-oriented design, API design, Micro-service and Template design|
|Development||Web client, Web application, Service and Data-access library development|
|Testing||Client, App and Performance testing|
|Continuous integration and deployment||Build, Configuration, Deployment|
|Environment||Development, Test, QA, Staging, Production|
For a small startup, a single engineer could be responsible for a good portion of the above activities. Similarly, an established company with a small team working and testing the waters on a new concept may leverage one or two engineers for the above activities until pace or risk management mandates adding more resources to share the responsibilities.
The rest of the blog is directed towards software developers, others may find a very unfamiliar jargon.
The Skills Spectrum
Chances are good that a full stack engineer would require some of the skills in the appended table:
|Client framework||AngularJS, jQuery, Bootstrap|
|Stylesheet languages||SASS, LESS|
|Data visualization||D3.js, Cubism.js (time-series), SVG (vector)|
|Data||Binding||AngularJS, Backbone.js, Ember.js, React|
|Structure/ model/ transfer||JSON, XML, DOM|
|Web Server||HTTP server||Apache httpd, Nginx, Tomcat, IIS, Tornado (Python), Varnish (accelerator)|
|Web Application Framework||Rails (Ruby on Rails), Sinatra, Node (Node.js), Laravel (PHP), Servlet-JSP and Spring (Java), Play (Java and Scala), Django, flash and web.py (Python), Express.js|
|Testing||Cucumber, PhantomJS, CasperJS, SlimerJS, Selenium, PHPUnit, Junit|
|Backend||Relational stores||MySQL, Postgres|
|NoSQL stores||Mongo, Couch, Cassandra, Redis|
|Environment & Misc||Source code revision||Git|
|Virtual dev environment||Vagrant, Docker|
|Deployment automation & configuration management||Docker, Capistrano, Ansible, Chef, Salt, Puppet|
|Cloud Hosting||AWS EC2, Heroku, Google Cloud Platform, OpenStack, Microsoft Azure, Rackspace|
|Monitoring||NewRelic, Gomez, AppDynamics, Zenoss, Nagios, Zabbix, CloudWatch (AWS)…|
In most cases, it is not critical have a black belt in each skill. As a novice full stack engineer, it is important to understand the complete flow from the top to the bottom layer and get basic framework for the application up and running. As an experienced full stack engineer, it is imperative to know well one of the combinations of the stack, e.g.
- an engineer working on a “PHP and Python application” would likely know (a) usual suspects for basic web front-end, (b) PHP and/or Python as programming language, (c) Laravel/ Flash, Django and web.py as web application framework, (d) Tornado for Python as server, and (e) MySQL for storing relational data.
An expert full stack engineer has likely experience with several combinations of the stack making him/ her a key member to help choose a stack for future applications. As an example, an expert can help do a trade-off analysis comparing the pros-and-cons between Node vs simple Java/ Python applications/frameworks, or compare MV* capabilities of AngularJS with MVC (Ember) and MVP (Backbone).