Full-Stack developer in 2019
In 2015 I wrote an article called "What to expect from a Full Stack developer in 2015". Interestingly the world went through a seismic change after that (probably it started that year only and got more matured over time) and the tools and expectation and attitude have shifted more radically.
Just to add disclaimer - all these are my view and really have no bearing or affiliation with any of my workplaces. In many cases the implementation is very different in my workplaces for obvious reasons.
First things first - the line between a software developer, system admin, infrastructure administrator, DBA and Release Management blurred significantly. It was quite blurred in startup world before - but enterprise is seeing that lately. What that means for a developer is - suddenly they are expected to know many of these layers which they were not before. Also other folks from the world of infra, database and release management also needs to join the party as the world have transformed to "infra as code" or "pipeline as code" - which require folks who used the black magic of Jenkins and Storage and Networking and keep within themselves - now required to express them in tools which gets stored in SCM tools, test them and manage them like software artifacts.
Same time software developers are expected to learn other layers so that they can provide much flexible and cloud ready solution. What API, micro-service, server-less (function as a service FaaS ) and event driven software patterns really requires is a clear understanding of underlying capabilities of native cloud and container and container management tools.
To be honest if you are an architect / developer for a complex system - your choices are 10 times more now compared to even 5 years back.
The world of data probably have seen the most dramatic change in last few years and we are still going through the phase to bring it to reality. The expectation moved from typical visualization and reporting to learning analytics and contentiously connected feedback process. We expect models to be built with various dimensions of related (and unrelated) structured (and unstructured) data, used on-line and scored (and tuned) based on success and failure. And obviously all these needs to run in near real time manner in a split of a second and use data-sets that are in TBs not even GBs anymore. While this sounds like science fiction - technology was capable of making it real for a while. The web-scale companies are doing this for years now - but they are coming to main street in last couple of years.
Path forked significantly between Enterprise and Startups / Small companies. The big boys like AWS and Azure are now trying to get to enterprise business seriously and trying to solve enterprise problems in real. I am sure Google with new leadership won't be far left behind. This eventually accelerate cloud adoption in much faster rate - opening up all of the above to enterprise developers (which traditionally use to be part of startup pride).
What all these mean for a developer at large who wants to swim the warm water ?
Let's start with comfortable territories - Programming Languages: be great in at least couple of languages - Java, Javascript (Node) - Front End frameworks doesn't count but useful, GoLang, Python, c# etc - you will be using those to build your APIs. Learn HTML and CSS (and other css tools) and front end frameworks (react, angular etc) - you need to give your app a face. Security is key for any organization of any size - and OAuth 2 Flows and JWT knowledge are normal. You still need to know what RDBMS does - so be familiar with at least one among Oracle, PostGres, Mysql/MariaDB, SQL Server etc. But also learn at least one document database among MongoDB, CouchDB, DynamoDB etc. (I personally think document DBs have more use case in this new world of micro-service based applications - which is still under utilized - but that's a topic for another day) Also be ready to work on anything that may be needed for specific purpose (like Neo4J, GraphQL etc).
A developer expected know about Queues and caching capabilities - redis, jms, active MQ, RabbitMQ are very popular, add cloud specific queues like SQS in the mix.
As we start composing an application, we will now need an API Management Tool like Mulesoft, Layer 7, APIGEE etc and nuances around it. While there capabilities are quite matured and battle tested as we speak, new concepts like Service Mesh are getting steam - and tools like Istio, LinkeRd becoming popular. They are not main stream yet - but IMO opportunities to add value very quickly and be the cool guy :).
Similarly any "real" application nowadays are required to tie into "real" analytics beyond just pushing data to warehouses or processing feeds into reference tables. So understanding of Machine Learning Models, how to score them and most importantly how to use them in app can be crucial.
Continuous Integration and Deployment (CI/CD) - while enterprises still in their infancy to move this function to the teams, in a small shop or startups this is quite commonly managed by developers nowadays. We need to understand the nuances of the deployment process so that as a developer you can solve many other problems using those tool set as well as manage your versions and process through them successfully. CI/CD coupled with Automated Testing becomes a uncompromising need very early in your scaling game - so better to understand and adapt earlier.
As we go down the stack, deployment is an area that's becoming part of a developer's influence - well for years we developer complained about infra - now we got the power. With great power, it comes great accountability - right? So now we need to know Containers and Container Management systems like Kubernetes. We also need to know about the ecosystem around them (mainly in K8s world) as almost weekly new projects show up with new valid and wild ideas.
And after everything these container management systems with all bells and whistles need to run in some real machine - right? Some usual suspects are Cloud Providers like AWS, Azure, Digital Ocean and Google or private data centers with OpenStack and needs to use storage, quota and security in that level. I personally think this area is still managed by predominately infra and networking guys. But as a developer you having understanding of those will help you becoming expert in Container Management RBAC mechanisms.
Now let's face it - things got way more complex and expectation from the full stack guys has extrapolated hugely. I would add one more thing which probably key and without that it's almost impossible to be. And it's actually the bigger picture ! Yes - as a developer you need to understand why you are building this hugely complex thing and you should be able to articulate why (and why not) all the cool toys like circuit breaker, service mesh etc are needed for your application. In other words you need to think like an architect and should be prudent to pick up the tools only as needed not because they are available. Trust me - it's quite easy to get carried away with new capabilities and tools (almost all are really really cool, capable and exciting) - but you may not need many of them. And remember more integration point you create your application become more complex and difficult to debug and manage.
Entire books have been written on the importance of understanding "the why." That's WHY I appreciate your comment at the end "you need to understand why you are building this." As the saying goes: "Those who understand HOW, will always work for those who understand WHY."
Nice article Rahul Guha. How would you tackle the learning curve for most people who, having worked on a particular area, will need a shift in mindset while approaching devops/cloud or devops engineers trying to get hands on in programming languages ?
Very nice article, written in simple languages