Of late I have heard the term “full stack developer” mentioned more and more. Often in ads for jobs and in profiles for developers all over the internet.
Many people would intuit this to mean “a developer that works on all levels of software” - which seems to be what is meant by this. Of course what is implicitly meant by “all levels of software” isn’t really all levels - there is a limit - no one means they build their own microcode or write x86 assembly code up to bitmapping pixels in a user interface. ;) Also, implicit in this is web applications - although, increasingly, applications are being built with the assumption that the main front end will be a mobile application (perhaps native) - so - maybe one day - full stack will including knowing a bit about mobile platforms (but for now they remain a bit of a speciality it seems).
What it really means is that the days of saying you are a “back end developer” or “front end guy” are numbered (perhaps?). I am sure people will continue to have preferences - but the reality is everyone is expected to do a bit of everything.
Many (but not all) developers my age (my age?) viewed development career progression as moving further and further away from “the front end” - or would talk about software GUIs as being a “layer” on the real system - but not really a core part of it. Of course, this is nearly the end of 2012, and we have to realise that user experience and interfaces are often what matters most - it is what any system exists for. Even systems that are essentially just an API still have a “user interface” (an API is a UI - just a non-graphical one - and user experience - UX - for the consumers of that API matters just as if it was a graphical user interface too).
So what does this mean to developers? Get used to loving all parts of the stack from the database/store up. You don’t have to be a generalist, or an expert in them all, but ideally you can be reasonably well versed and up to date in a variety of front end tech, know your favoured NoSQL and RDBMS, and how to build a vertical slice of an app from the front end down, or the database up without sweating too much. You don’t have to be a fixie riding UX hipster - you can hire experts for that - but you should be able to work at any layer.
At CloudBees, we seem to have developers that work this way. Most people seem to do a bit of all layers - and are happy to. It wasn’t by design - but by necessity. One day you can be battling JS and backbone.js and the next a Linux problem with cgroups.
Perhaps they should have called it “the rounded developer!” Variety is the spice of life.
One key requirement to be able to work in this way is to have the complexities of each layer contained, or encapsulated (so when you are working on the web application, you aren’t worrying about managing a database server or other services that are irrelevant). Even setting up continuous integration can be quite a challenge (traditionally someone has taken on the job of being a ‘build master’ - often as a form of punishment). We have been thinking about this also …
On the CloudBees platform we have Clickstarts - which cover the full stack in most cases (including continuous deployments in many cases) - so - if all else fails - you can press a button and have a repository of working code and and an app to show your colleagues - you can even say you wrote it all, I won’t say anything - honest !