It’s a fair question. To the uninitiated, front end development must seem like a breeze. But if this is the case, why aren’t front end developers a dime a dozen?

The answer is simple: front end development, like any specialized trade or spectator sport, is a lot harder than it looks. It isn’t until you’ve dipped your toes in it that you realize just how turbulent the waters are.

Front end development is more complicated than it seems.

Not dismissing the difficulty of server-side development, it’s still important to acknowledge the problems that come with working client-side. As a front end developer, most of the work must be done in HTML and CSS, which leaves limited tools for working around bugs. JavaScript helps here and there, but feature detection comes with performance overhead. It means more code, and more opportunities for that code to fail. Plus, CSS is painful to work with once your site starts to grow. It’s very static, and you wind up keeping up with a lot of it in your head.

The steep learning curve is partly due to the ever-changing nature of the field. With front end, there’s always something new to learn: responsive media queries, HTML AppCache, CSS transforms, WebGL, etc. Each of these tools introduces exciting new possibilities for front end developers, but also changes the way their work is done.

That also means changing the way front end development is taught, as frequently and accurately as possible. Unfortunately, no instructor can ever hope to keep pace with the changing technologies, meaning each new front end developer joining the workforce is already several steps behind, struggling to fill their toolbox with a never-ending supply of necessary resources.

There’s more to front end than just development.

With front end, it isn’t just about the code. It’s about how the code interacts with the consumer. With client-side development, poor design can easily become a roadblock between the product and the audience. A good front end developer needs an understanding of web performance, and the various metrics that determine online success. That means http caching, optimizing dns lookup times, using minification build scripts, and selecting the best CSS layout engine for the project.

Not only that, a good front end developer also needs to have an understanding of marketing. That means knowing the psychology of the consumer, prioritizing the accessibility and usability of the product, and maintaining strong SEO. It also means having a basic understanding of design theory, and occasionally, working with graphic designs that are nearly impossible to implement.

With client-side development, it’s also important to focus on the security of the product, protecting against CSRF, XSS, DNS pinning, and clickjacking. But not all front end development is client side — even front end developers need to dig in to server side code from time to time. That’s right: a good front end developer needs to be a good back end developer as well.

It means making the product compatible with everything.

Developers Peter-Paul Koch, Douglas Crockford, and Nicholas Zakas all agree — ”front end development is the most hostile development environment in the world.” The reason: compatibility. Once a front end developer has finished doing their job (and a bunch of other jobs as well), they get right back to work making sure that the product functions optimally on every browser, mobile device, and high-end toaster oven under the sun. That can be a lot of work.

Off of the top of your head, how many internet browsers can you think of? Just to name a few, front end developers have Chrome, Firefox, Opera, Safari, Internet Explorer, and now Edge to develop for — not to mention each browser’s past several releases, which must be considered for compatibility. Consider this: each version of Internet Explorer, from 6 all the way up to 10, has its own unique bugs and limitations. It’s still important to cater to each, though, or else fail to make your product accessible for that many consumers.

And that’s just the desktop market. Now consider each make and model of smartphone and tablet that consumers might use to access your service, each with different input methods that must be considered. Does the service work without a keyboard? Does it work without a mouse? Does it have touch support? Does it have gestures? The service has to work on all of these — even when users are adjusting the output to suit their own needs. Whether the user adjusts the size of the text, alters the colors, or disables CSS or JavaScript entirely, the product must remain functional. As front end developer Bulat Bochkariov puts it, “We work with crappy tools on inconsistent platforms run by every kind of device you can imagine… making sure the product works for everyone, no matter what.”

So, why is it so hard to find a good front end developer? Because being a good front end developer is hard — maybe a lot harder than you might think. A good front end developer has to be patient, committed, and willing to fulfill a lot of different roles outside of traditional development, all while making sure the product is optimized for the largest possible audience — and yes, that’s bound to be hard to come by.