Monday, December 16, 2019

On full stack development

I've seen plenty of articles claiming vehemently claiming that full stack developers don't exist and upon reading them, I often find they are the classical straw-man argument. They are often making the argument that nobody can have deep working knowledge and expertise of every part of the stack. I would say that not many people that actually know software and speak about full stack development are making this claim. Expertise is a zero sum game and this is fact of life, not just programming. Jack of all trades and all that.

However, during the early stages of an organization, you often need to have people working across the stack, for efficiency, cross coverage and such. It's highly unlikely that your budget will allow you to both have people dedicated to every part of the stack( ops, api design, database administration, UI work etc) as well as efficiently establish and coordinate the lines of communication between them to build a harmonious systems. And even if you did, for 99.99% of organizations, doing so would simply amount to a waste of money because during the early stages of an organization, it's unlikely that your product requirements are extensive enough to require very deep expertise and experience across the stack.

Enter the full stack developer.  

Expertise is a zero sum game (jack of all trades and all that). I recall a colleague of mine (who considers himself full stack) saying that he truly believed he knew ops, until the day he actually applied for strictly ops jobs. He quickly realized how much expertise he lacked in that specific field. Once you go beyond Junior/Mid, "full stack" developers always lean towards a specific area of the stack. They might be front end (FE) or back end (BE) leaning for instance. It is important to be clear about which side each engineer leans

In the early stages of your organization, as you grow your engineering team, you may/should hire developers comfortable completing tasks across the whole stack, it's however extremely important to keep track of (and evenly distribute) how your expertise is actually spread across the stack. Failure to do so will result in a system that isn't well rounded. A system that is extremely deficient in one or more areas of the stack that you were lacking deep expertise in. For instance, if your team only has FE leaning full stack developers, they are much more likely to make sub optimal decisions on the BE or entirely try to do a task suited for the BE on the FE simply because they are more comfortable there. 

I've seen first hand, countless times, the problems this can result in. 

Full stack engineers are a very valid way to construct your engineering team, especially in the early stages, but it is essential that while using this approach, an organization recognize the necessity of keeping your development team balanced and this might require a little more diligence from leadership. 

Miroservices won't save you

Before I start this post, I feel it necessary to give you some pertinent information about my background. I love distributed systems. My foc...