San Francisco, California

I Don’t Believe in Full-Stack Engineering

There, I said it. Of all the engineers I’ve met over the years only one has come close to what that title, full-stack engineer, implies: the ability to easily navigate the back-end and front-end with a senior level of expertise. For the rest of us though, it’s simply not possible to do both.

But hold up a sec, what is front-end development? Well I believe that this line of work contains the following skills:

  • Semantic, accessible markup (writing in a sea of spans and divs should make them uncomfortable)
  • Experience of writing clear and concise Sass/CSS (they should fully appreciate the benefits and risks of the cascade)
  • Caring deeply, even obsessively, about web performance (so that means knowledge of font loading, images, SVGs, animations, auditing third party scripts etc.)
  • And depending on the size of the org or project, a deep knowledge of React/Angular/whatever in order to make abstract components that can be constantly reused by different teams.

Yes, learning these skills is possible if you’re an engineer. But doing them well? Heck, doing them to even an acceptable standard? This line of work requires above all else dedication and focus because yesterday’s hack becomes today’s standard and you simply don’t have time to keep up with front-end development if it’s a side gig.

But I see bad design everywhere on the web and I reckon it’s because of this lack of skills — not necessarily because designers are ill equipped for the task at hand or even that engineers are ignorant of web standards and usability or performance issues. It’s because there’s a whole spectrum of web development skills that are being left entirely ignored and pushed aside by the folks that are making hiring decisions at these organizations.

I think this apathy towards front-end development comes from a lot of different places though. HTML and CSS and JavaScript have always been looked down upon by many engineers for their quirks. When they see a confusing and haphazardly implemented API across browsers (HTML/CSS/JS), I see a swarming, writhing, and constantly improving interface that means we can read stuff that was written fifteen years ago and our browsers can still parse it.

Maybe us web developers and designers share part in the blame, too:

It’s sort of frustrating to see a line of work that’s still vital to the health of the web, and the financial stakes of those companies that don’t really care about this stuff, and it’s sad to see developers rename their titles every six months so that they can get more prestige for their LinkedIn profiles.

Front-end development is important today and it will be important in twenty years’ time, it’s not going away anytime soon. It’s always going to be about as cool and as boring as it is today so putting everything in JavaScript and changing your job description won’t change that. It’ll just lead to even more confusion about what front-end development even is.

Not only that but I see a lot of tools and processes trying to replace front-end development and sometimes that replacement comes under the guise of Design Systems tools. A lot of prototyping and design apps seem to shout from the heavens: “Designers! Give this mockup to an engineer and all they have to do is copy and paste the CSS! It’s literally impossible to screw this up!”

Humbug, I say!

Every company that ignores front-end development is doing so at their own peril; they’ll lose millions of dollars every year because their websites are slow, they’ll be sued for violating accessibility laws, and they won’t be able to ship beautiful, high-quality and well-organized interfaces because no-one will be there to build them.

Despite the evidence that front-end development is a focused activity that requires full-time effort I see a lot of companies hiring full-stack engineers and hiring designers without coding experience, and I see design teams focused intently on pixel pushing and making animations without understanding basic HTML structure. I constantly see wildly inaccessible interfaces that don’t have focus states and forms that don’t let you navigate effectively with a keyboard. I see unusable mobile interfaces and giant web apps that feel slow and clunky because no-one really considered how browsers function at the most basic of levels.

If you’re only hiring full-stack engineers then you should carefully consider why that’s the case and you should have a grasp of what you’re sacrificing for that lack of focus and expertise in that area.

Because there’s no such thing as a unicorn and there’s no such thing as a full-stack engineer.