-- By: @BorisDinkevich
tl;dr; Are managers still unwilling to accept the nightmare that is frontend dev in 2016?
In the past few months, a week has not passed without me hearing of another company whose frontend project is late, broken, running way over budget, or just plain grotesquely underperforming.
First, the background
We run a small frontend consultancy, and apart from building products from scratch, we get called to help companies solve problems with their Angular or React code. Lately, the “problems” part has been growing and growing.
Every company we meet has performance problems, unmanageable code, missed milestones, and developers quitting left and right. Tests and CI? Heh. Half of them have never heard of build tools. Even among the few that appear to be releasing code, the dev managers admit that the only way to meet management’s milestones was to remove huge parts of the planned features.
What the hell is going on?
So we started asking questions and looking around. The surprising thing? It’s the larger companies that are doing fine. They have a clear separation between teams, and having a trained team(s) dedicated to frontend is the norm. It’s the small “agile” companies with 1-3 frontend devs that keep failing miserably.
These small teams usually consist of ex-server devs, just-out-of-school juniors, and a team lead that “has 30% free time and really wants to code.” In most cases they “learned as they went” and never had an experienced frontend dev to oversee the project and its setup and architecture, or provide mentoring. Worse yet, more than one dev manager has relied on a “frontend ninja” who (on closer inspection) turned out to be criminally clueless.
How did this work before?
We had a similar shift ~8 years ago when mobile came to our world—a new complicated technology with its own quirks and knowledge domain. So how are all those smaller companies managing to deal with native mobile? Out of all those companies with failing frontend projects we met, how many had a team of native mobile developers? Zero.
While the idea of taking a server-side Java developer and training him in a week to start building Angular applications seems fine, training the same dev to do Android dev sounds ludicrous to management.
“native is complicated and outside the scope of our existing expertise. Hell, we wouldn't even know how to interview or train someone.”
And yet, I bet in the office space next door you will find 2-3 developers slaving away on a huge Angular app with only a vague understanding of the “digest loop,” Webpack, Flexbox, or how to set up CI. Oh, and one of them probably spent the last 2 months writing a cool utility—that is available from a common NPM package.
Is it that frontend is harder than any other tech? Or maybe that it is as complicated as the others but doesn’t get treated as such?
It appears dev managers are roughly divisible into two groups: the proud and the sad.
We literally argued with an RnD manager at a mid-sized startup who couldn’t understand why jQuery is not enough—“I built a complicated SPA in 2007 with nothing but jQuery.”
The sad know they are in a rut and don’t know how to fix it. They know that if it is taking 3 times as long to build and the app is still not ready, something must be off. Sadly, they find themselves in an impossible position:
- “How can I hire a great frontend dev if no one here can interview and assess him?”
- “We hired someone, but we don’t really know if he is good.”
- “The really good people don’t want to work as a one-man-team alone.”
If you are thinking “we understand fully what frontend is and have none of these issues,” then ask yourself:
- Is your frontend code sitting in the same repository as your backend code?
- Is your iOS and Android code sitting there as well?
Did you say “Yes” to the first and “No” to the second? Time to ask yourself why.
What happens next?
Will it be months or years before missed deadlines and poor products convince management in smaller companies that frontend is not what it used to be?
When will they come to terms with the idea that frontend should be treated similarly to mobile apps—as a separate project and domain? Or understand that frontend is complicated, and requires a dedicated team of professionals and adequate time?
Until then, we’ll be left with uncomfortable meetings explaining why the Angular & jQuery beast the team has been building (as they learn) over the past 6 months (and that takes 30 seconds to load in Chrome on the latest MacBook) should be rewritten in React in 2 months. If only they’d stop and properly train their team.
Viva la frontend!