There’s a pervasive idea in the tech industry that front-end development is relatively simple, especially when compared to back-end development. While this may or may not be true depending on the situation, it is harder than people usually imagine. Non-technical people don’t understand why it could be so expensive to build an app in the browser, and technical people with computer science backgrounds in back-end tend to oversimplify front-end development.
This is a question that we get asked sometimes here at 500Tech, and there are many things to consider when thinking about the difficulty of front-end development. Here are a few technical and conceptual reasons why front-end development is hard:
In contrast to traditional back-end development where everything is procedural and you can manage one request at a time, front-end is all about user interaction. This kind of environment means that everything happens asynchronously and in parallel. While a user clicks on one control, other elements on the page could do something else. There is also much more information available on the screen then, let's say, a console app.
Because many things happen asynchronously, a user can interact with the app while he is waiting for another action to complete. He can switch pages, move between tabs, lose and regain internet connection - and everything needs to work seamlessly. This asynchronous nature makes it challenging to develop a good user interface for your apps. Developers need to consider multiple things while working on a specific interaction.
When developing on the server side, you usually control the infrastructure, the servers, and the network. Even if you don't own the servers, you know precisely where your server code will be executed and can make changes if something doesn't work as expected.
On the client side, you never know the kind of environment your application will run and how end-users will execute it. People use a wide variety of browsers and devices, now including TVs and smartwatches, meaning you need to plan for different screen sizes, settings, and capabilities. Internet connectivity can be on and off, fast or slow. The more mediums you want to support for a flawless experience, the harder it gets to make a great app.
While server-side technologies like infrastructure and hardware also change, front-end technologies, languages, tools, and practices change much faster than their back-end counterparts. It is hard to compare the capabilities of modern browsers with what was possible to achieve even five years ago. Improved tools, new APIs, languages, and concepts migrate from different fields of the software industry to the front-end world.
Because systems and codebases get outdated much quicker on the front-end, it’s a challenge to keep up with everything. These quick changes also affect evolving best practices and approaches to front-end architecture and development. Specific knowledge of various frameworks and practices also get outdated quickly.
Over the last decade, web apps have evolved from simple documents with links to other documents to desktop-grade applications such as photo or video editors. Web as the universal platform pushes the boundaries of expectations, both from users and from companies. It is not unusual to see a client-side application with hundreds of thousands of lines of business-logic code. This fact means that you also have to consider accessibility, code splitting, memory management, supporting different languages, and how everything looks when viewed through different media.
Historically, building websites was relatively simple - throw together some JS and CSS and include links and images. Perhaps you might use jQuery for a few small interactions here and there. Today, front-end engineers get to work with similar patterns known in other fields of software development and design, but because web technologies are so accessible, more newcomers are arriving that lack the necessary experience and expertise for building large-scale complex applications.
Coding bootcamps teach web technologies from the ground up in just 10-15 weeks, and it's hard to imagine such bootcamps for operating systems or even embedded development. Because front-end development is a relatively easy field to enter, it’s now more important than ever to properly vet new talent and agencies to avoid using inferior code, ultimately leading to low-quality products and wasted money.