JobMethods Blog

 

(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 Language HTML, JavaScript, CSS
Client framework AngularJS, jQuery, Bootstrap
JavaScript libraries React.js, Backbone.js (MVP), Ember.js (MVC), Socket.IO, Connect
Stylesheet languages SASS, LESS
Data visualization D3.js, Cubism.js (time-series), SVG (vector)
Techniques AJAX, RESTful
Data Binding AngularJS, Backbone.js, Ember.js, React
Structure/ model/ transfer JSON, XML, DOM
Security SAML, OAUTH
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
Templating EJS (HTML), Jade (JavaScript), Handlebar.js, Mustache, JSP
Language ASP.NET, CofeeScript, Go, Java, JavaScript, Node.js, Perl, PHP, Python, Ruby, Scala
Testing Cucumber, PhantomJS, CasperJS, SlimerJS, Selenium, PHPUnit, Junit
Backend Relational stores MySQL, Postgres
NoSQL stores Mongo, Couch, Cassandra, Redis
Caching Redis, Memcache
Environment & Misc Source code revision Git
Virtual dev environment Vagrant, Docker
Continuous Integration Jenkins
Deployment automation & configuration management Docker, Capistrano, Ansible, Chef, Salt, Puppet
Cloud Hosting AWS EC2, Heroku, Google Cloud Platform, OpenStack, Microsoft Azure, Rackspace
Analytics Google, Mixpanel
Monitoring NewRelic, Gomez, AppDynamics, Zenoss, Nagios, Zabbix, CloudWatch (AWS)…
Search SOLR/Lucene, ElasticSearch
Optimization Google Pagespeed

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.

  1. an engineer working on a “responsive UI with Node.js application” would likely know (a) HTML, CSS and JavaScript for a basic web front-end, (b) Bootstrap for responsive UI, (c) JSON for binding and transfer, (d) Node.js and JavaScript for application development and(e) MongoDB for storing and retrieving persistent data. Additionally knowing AngularJS for client and Connect or Express.js would be beneficial.
  2. an engineer working on a “Ruby on Rails application” would likely know (a) HTML, CSS, JavaScript and jQuery for a basic web front-end, (b) SASS or LESS for stylesheet language, (c) JSON or XML for binding and data transfer, (d) Ruby and Rails or Sinatra for application development, and (e) MySQL for storing relational data.
  3. 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).