Structuring Front-end Teams

The front-end domain has been growing into a new paradigm, and this has introduced a fundamental shift in the way we develop modern web applications. There is increasingly more work that was traditionally scoped to the back end, moving into the realm of the front end.

What Gives?

From a technological perspective, the advent of server-side JavaScript interpreters such as Node.js and its mainstream adoption in recent years, made a substantial contribution to some of the major shifts that front-end developers were subject to in recent years. As JavaScript development on both the front end and back end (isomorphic) became possible, mere proficiency in the language is often presumed synonymous with domain expertise. This leads to front-end developers inadvertently being drawn into either the periphery or depths of back-end development, drastically increasing the scope of their responsibilities.

The ever-growing adoption of web services has progressively increased the pressure to conform to the evolving demands of users. As the UI is the primary point of contact between vendor and user, front-end developers have to continually adapt to specialize or upskill in more domains than they ever could have fathomed starting out. Beyond the increased technical responsibility, many developers will be able to identify with the experience of their scope gradually bleeding out into disparate fields such as User Experience and Web Accessibility — to various degrees of expected proficiency — during the course of their career.

In a relatively short time frame, a situation crept up on the industry where the average front-end developer is now (from a business and operations perspective), expected to juggle expertise in several domains on any given day. While this dilemma is continuing to be discussed in the industry, companies can benefit from proactively instituting measures that will prevent the erosion of quality engineering and chronic developer attrition that carries the high cost of domain-specific knowledge and experience being lost to other firms.

Allowing developers to specialize in the areas at which they naturally excel saves them from having to regularly switch between dissimilar tasks that require a different method of thinking for efficient and quality resolution. Mental fatigue is subsequently reduced, and the risk of burnout greatly mitigated. In the same vein, the fruits of focus and domain-expert knowledge and experience will be consistently reaped.

A Dual Paradigm

I’d be remiss not to emphasise that front-end development as a whole is somewhat special in that its core languages necessitate proficiency in both declarative and procedural programming. Since these two methodologies are fundamentally different, front-end developers are essentially required to master the ability to operate equally effective in two distinct paradigms. Experience has taught me that developers tend to be dominant in one approach or the other, and rarely appear to have a natural knack for both. A developer who excels at the one paradigm often tolerates the other one (to various degrees), and ultimately prefer to specialize within their respective areas of strength.

I've encountered exceptional CSS gurus who could perform sheer magic in their craft, and who excelled at writing properly formatted documents with accessible, semantic markup. Yet, they shied away from JavaScript that was beyond the realm of the popular abstraction library of the day, or that which veered past basic DHTML functionality. Interestingly, the inverse also held true in my experience. Seasoned developers who have a particular affinity for imperative languages seldom carry a passionate interest in HTML or CSS.

Notwithstanding, I believe there is a case to be made for the existence of developers whose predilection allow them to sit equally comfortable in both paradigms, although it is probably a much scarcer phenomenon than what the prevalence of the term “Fullstack Developer” these days would like us to believe. The fact that front-end development epitomizes a dual-paradigm field likely contributed significantly to the multiple personality syndrome the industry is currently experiencing. For more on this, I suggest Chris Coyier’s post that touches on the heart of the matter — he dubs it “The Great Divide”.

Tiered Specialization

To remedy and prevent developer scope-creep and its costly symptoms, we can turn to a time-tested methodology — not coincidentally a core tenet upon which modern civilization is built: role specialization. Dividing front-end development into tiered areas of specialization would allow each developer to choose a category that is naturally fitted to their experience, skillset, domain-expert knowledge, and last but not least, consistent with their chosen career path.

Team size and collective skill set may vary greatly from one organization to another, making what may or may not qualify as a bona fide specialization area very much a local, team-sensitive decision. Furthermore, there will naturally be a few overarching responsibilities. For instance, a concern such as application performance is ultimately tied to every layer of the application stack and therefore lies comfortably within the shared scope.

As front-end specializations and team structure may take on many forms, a rough outline for some hypothetical team follows for the purpose of illustration, and might serve as a jumping board for further ideation around team organization:

  1. Front-end Architecture — typically concerned with:
    • structure: code/asset modularisation towards clarity, efficiency, and establishing sensible asset-organization patterns for consistent, scalable codebase layout
    • codebase efficiency: build/tooling systems, style/asset guide, and guarding against technical debt within the aforementioned responsibilities
  2. Markup, CSS, Static Assets & Client-side JavaScript — potentially including, but ideally concerned with its implementation only:
    • SEO operations
    • Web Accessibility
  3. Server-side JavaScript — likely to include:
    • API management
    • Data management
    • Networking & security operations

Closing Thoughts

While it might be apparent that the virtues of sufficient focus are worthy of dedicated pursuit, I’d like to stress that balance in approach remains key to effective and sustainable specialization. My colleague Alfonso Gómez-Arzola summarized it poignantly: “cross-pollination is important and valuable, and specialization should be accompanied with encouragement to step outside one’s comfort zone and have a working understanding of concerns outside one’s specialty.”

As much as I’m inclined to be a generalist myself and prefer working across the stack, experience has taught me that a developer-of-all-trades typically only delivers a sensible return on investment when dealing with relatively small projects. In contrast, if you’re working on larger scale applications, chances are that both the needs of the application and ultimately the users are better served by developers in a well-structured team who are at liberty to specialize in their respective focus areas.