On Full Stack Developers

Q: How does a full stack developer sleep?
 A: They don't sleep, they REST.

Almost every single company delivering some kind of product on the web since the early 2010s seems to be looking to hire full-stack developers.  Full stack development is all the rage.  If you are an employer, you can't possibly be doing it right unless you are hiring full-stack developers to do the job.  If you are a programmer, you are not particularly employable unless you can work with the full stack.

It is almost as if software architectures requiring individual programmers to work on every single layer of the entire stack are a good thing. It is almost as if the the job market is full of programmers who are actually capable of working on every layer of the stack.  And it is almost as if they could possibly be any good at doing that. Or any part of it.

How did it all go so wrong?

The technological difficulties we are facing on the internet nowadays have to do with how to deliver a decent user experience on lame technologies like web browsers running javascript, how to write our server software in ways that allow us to massively scale the delivery of our services to millions of concurrent users, and how to keep our systems running securely and reliably.  So far, there exists no product that you can buy from the shelf, add your own business logic to it, press a button, and have it deploy your services to millions of people out there, satisfying the aforementioned requirements. There is a lot of work you have to do in-house, and this work involves a lot of experimentation, as well as the use of lots of other technologies that are in turn --some more, some less-- experiments.

The unfortunate combination of market forces and technological limitations results in the invention of unorthodox techniques out of sheer necessity, in order to address the limitations and still keep delivering market value. They are not necessarily the best techniques, they just happen to have achieved some results somewhere somehow (high profile, cash-rich cases in the USA usually,) and then everyone over the entire world rushes to copy them without much thought, without even first examining whether they are really necessary or applicable to their case.   These techniques often involve some rather absurd choices, with quite obvious consequences, so those who evangelize them resort to giving them nice and positive - sounding names in an attempt to downplay the obvious deficiencies.  As Tertullian wrote, "prorsus credibile est, quia ineptum est." ("It is believable, because it is absurd.")

The term full-stack developer brings to mind programmers with a can-do attitude on their faces, who know how to do everything, shy away from nothing, are on top of their game, right? It is a very positive picture. The only flaw with the picture is that it flies in the face of Specialization and Division of Labor, which are some fairly old and tried inventions that have been the driving forces behind the Scientific Revolution and the Industrial Revolution. Pretty much the shape of the world as we know it today is owed to these two concepts, but modern techno-hipsters think they know better.

Full stack development means that in order to add the tiniest new feature in the product, or to modify the slightest existing behavior of the product, you have to touch everything, from the abyssal depths of the persistence layer on the server to the wuthering heights of the cascading style sheets on the client, as well as every. single. layer. in-between. The job cannot be localized on a single layer, because the chosen technology stack employs no abstractions: it is application software all the way down.  And the job cannot be handed out to different developers with different specializations, because everything is so inextricably complexed together, that only someone with the entire picture in their mind can do the job.

Essentially, full stack development means "we have no frameworks, no abstractions, and no layering; the principle of loose coupling went out the window a long time ago; we are all goalkeepers, and every single one of us is playing all over the entire soccer field."

That's what happens when you throw away all of the accumulated wisdom of the discipline and think you are re-inventing everything from scratch.

The number one difficulty in our discipline is the management of complexity. Full stack development extends the scope of the complexity that we have to deal with in our daily work to include in it the complexity of additional layers of the stack, and multiplies all that by the extra dimension of managing how these layers interfere with one another. Asking developers to be full stack developers is underestimating the complexity of working on a single layer, let alone half a dozen layers. It is actually disrespectful to us, it is telling us that a single layer is piece of cake, we should be able to do more. It also points to very poor technological choices, which a) require work on too many layers and b) are unworkable without constantly dealing with every single layer.

No comments:

Post a Comment