Saturday, November 08, 2014

The Rise and Fall of the Full Stack Developer

This post was also published on TechCrunch.

It seems as though everyone in tech today is infatuated with the full-stack developer. Full stack may have been possible in the Web 2.0 era, but a new generation of startups is emerging, pushing the limits of virtually all areas of software. From machine intelligence to predictive push computing to data analytics to mobile/wearable and more, it’s becoming virtually impossible for a single developer to program across the modern full stack.

When I first started programming computers as a kid in the pre-mobile, pre-web late 1970s/early 1980s, a single person typically wrote a complete software program from start to finish, and there weren’t many other layers of software between the programmer and the hardware. Using assembly language was the norm for programmers trying to squeeze more performance and space out of machines with 8-bit processors and very limited memory.

Programming applications quickly evolved into a team sport with the advent of client/server computing in the late 1980s and early 1990s, and the wave of Internet computing in the late 1990s and early 2000s. Each facet of new technology was so complex that a specialist was often required, sometimes one for different tiers (e.g. front-ends, databases, application servers, etc.) Managing a business website became a specialty that included operating networking equipment, such as routers and load balancers, tweaking Java virtual machines, and using various database indexing mechanisms.

By the mid-2000s, creating virtually anything — from simple websites to next-generation SaaS services — became prohibitively expensive. The rising expense was directly correlated to the overhead of numerous individuals from the various tiers communicating (and often miscommunicating) with each other, and changes in one tier cascading into other tiers and into deployment parameters. As Marc Andreessen pointed out in a recent tweet storm about burn rates, “More people multiplies communication overhead exponentially, slows everything down.”

Conversely, the technology to create the new generation of Web 2.0 sites became increasingly streamlined and simplified. Programmers switched from using the more complicated enterprise Java stack and databases such as Oracle to the more straightforward LAMP stack (Linux, Apache, MySQL, PHP/Python/Perl). New languages and frameworks such as Django and Ruby on Rails automated the layer between the website and the database. Front-end frameworks such as jQuery helped abstract all of the intricacies between different browsers. Cloud services such as Amazon Web Services simplified deployment and provided turnkey networking.

By the late 2000s, it became possible for many programmers to deliver a complete consumer or SaaS site, including a dynamic web client, server-side business logic, a scalable database, deployment, and operational support. This new breed of full-stack developer could run circles around teams of programmers attempting the same task. When projects scaled up, adding more full-stack programmers allowed a single person to add a single feature across all the tiers of an application, which accelerated feature delivery over the communication overhead of having different people own the feature in each tier.

If you’re building a website on the full stack illustrated above, find full-stack developers who can effectively wear these hats. But these days — and call me crazy — I’d consider this a less-than-full-stack. Here’s a fuller full stack:

I’d wager that there are zero individuals with advanced-level knowledge in each of these areas that would be capable of single-handedly delivering this next generation kind of application. Just keeping up with the advancements and new programming interfaces in each category is almost a full-time job.

We are in the midst of a rapid shift to more complicated technologies that, as in days gone by, require experts at each tier. Developing excellent iOS and Android applications requires experts in those platforms that understand the intricacies. Operationally, tending to new object databases such as Mongo requires constant attention and tweaking. Running an application on cloud services such as Amazon requires knowing the ins-and-outs of its various services and expertise on how to failover across regions. Even the venerable web front-end has evolved into CSS4, JSON and JavaScript MVC frameworks, such as Angular.js and Backbone.js.

In this brave new world, it is critical to have at least one person with at least a functional understanding of each of the composite parts who is also capable of connecting various tiers and working with each expert so that a feature can actually be delivered. In a way, these tier-connecting, bridge-building software architects — who are likely experts in only one or a couple of tiers — are less full stack developer and much more full stack integrator.

Rest in peace, full stack developers. Welcome, full stack integrators, in addition to engineers with deep technical skills in particular areas. It’s a fascinating world of software out there and we need you more than ever.


Pinky Sharma said...

Rather Easy Moving Top 20 Packers and movers

Pinky Sharma said...

Top 20 Packers and movers services of an expert Packers and Movers india.

Bart said...

Lots of assumptions and opinions in your article. Any facts to back up your claims?

I'm a full-stack developer and I disagree. It's my personal experience that learning new areas of the stack has actually made me a better developer in the other areas. Doing back-end made me better at front-end. Doing front-end (and even interface design) has made me better at creating co-developer-friendly code. Understanding webserver architectures made me better in writing optimized code. Understanding business made me better in defining and creating MVP's in the most economical ways.

My experience is that "single-stack" developers fail horribly.

There's so many ways that lead to Rome in creating a product throughout the stacks. But to find the sweetest road really requires to find the most optimal and efficient route that's perfectly aligned throughout the stacks.

The idea of a "full-stack integrator" is nonsense. You can not be an expert in connecting two stacks without having in-depth knowledge of both areas.

It's not limited to software development. I think the new world requires full-stack people that go even further into all areas of expertise. Look for example at Elon Musk.

Inma Maulana said...

This article is very useful for those who are reading it, it's a shame if people skip reading. I also have articles that may be beneficial, as this article: obat untuk mengatasi gangguan kelenjar tiroid cara mengobati perlemakan hati I believe it would be useful. and which is also very useful to increase knowledge obat lipoma untuk benjolan di leher ramuan tradisional tipes,tipfus,typus or also obat exim kering dan basah multivitamin untuk kekurangan darah obat untuk menghilangkan benjolan miom thanks may be useful for all.
obat tradisional gondongan yang alami

Indra maulana ridwan said...

really interesting reading, when i am read very pleased and want to continue to read it. Good luck with this article. I also have articles that may be beneficial tips cara diet sehat mudah multivitamin herbal kecantikan suplemen gluco life or also this article: cara mengobati impotensi pengobatan alternatif penyakit stroke I believe it would be useful. and which is also very useful to increase knowledge cara menghilangkan batu empedu cara menyembuhkan maag kronis thanks may be useful for all.

Kulit Manggis said...

Good day! I just would like to give you a big thumbs up for your excellent information you have got here on this post.
I’ll be returning to your blog for more soon.

Obat Herbal Konstipasi
Obat Multiple Myeloma
Obat untuk Menyembuhkan Difteri
Obat Osteosarcoma Herbal
Obat Irritable Bowel Syndrome