What knowledge should you have to be a frontend developer?

by Dmitriy Kubyshkin - 24 Aug 2016

One of the hardest things about being a frontend developer comes from the fact that everybody has very different expectations of what it means to be one. This, along with a technology stack, that changes at the speed of light, makes interviewing for a frontend position tricky.

To help you out, and to give an idea as to Zalando’s views on the role, we have prepared some points on what we consider essential knowledge for a frontend developer.

Be able to solve problems

This sounds quite abstract, so let’s talk about what it means. Unlike many other developer positions, a frontend developer wields the power of multiple languages and technologies. Being able to look at a task, split it up into necessary steps, and choose the right technologies for the job is an essential skill—some things need just a line of CSS, but implementing them in JavaScript would require a 100k library, and vice versa.

Sometimes you won’t know the perfect tool for the situation at hand, and this is also fine. However, you are still expected to provide a solution. This solution may not be the nicest in terms of code quality or speed, but it needs to work, at least for the cases presented at hand.

JavaScript

React and Angular, along with other frontend frameworks, are quite impressive pieces of engineering, and it is important to know them well if this is the primary framework you are using for the job. That said, knowledge of JavaScript, it’s core libraries, and browser APIs is something that will support you no matter which framework you use. Additionally, JavaScript is a general-purpose programming language, so doing some simple array or tree processing shouldn’t cause you any problems and shouldn't immediately trigger the reflex to include that nifty 100k library that you would barely use.

One more thing to pay attention to is the asynchronous, but single-threaded nature of JavaScript. You should be comfortable with scheduling pieces of work into the future in various ways and know how to execute some code after those asynchronous calls.

CSS

In the world of component-based frameworks and living style guides, you can get away with minimal CSS knowledge most of the time. Yet, when something goes wrong with your layout, or when you need to implement something unique, you need to know how browser layouting works. In short, we want you to understand CSS, but not necessarily keep all the flexbox properties, or browser-specific hacks in your head, although it is certainly a plus if you do.

Know thy standards and keep up to date

Nothing gives you as much appreciation of the complexities involved in making the frontend work as reading the standards does: HTML, CSS, and ECMA. It’s easy to get overwhelmed with more than 2,000 pages of quite dense and very specific reading, so start small. Websites like Smashing Magazine, PonyFoo, HTML5Rocks (and many others) will keep you up to date on the latest developments and might trigger an urge to understand things deeper.

Network

Every awesome frontend application needs to get to the user’s browser somehow. It’s also likely that you will have to make some asynchronous fetch requests to backend services. All of this makes use of network, which means you should be aware of what is involved in making an HTTP request, at least on the level of Wikipedia with a sprinkle of cache-related topics, plus what request latency is composed of.

While it is not a requirement for a frontend developer, knowing the connection on a TCP level is a nice thing to have, as is awareness of HTTP/2. Knowledge of REST services, at least from a consumer perspective, is certainly helpful as well.

Debugging

This goes back to the initial section on problem solving, but also touches on every other frontend topic. Browsers are extremely complicated pieces of software with years of legacy, but still evolving at great speed, and this software is our domain as frontend developers. So whenever something goes wrong there, it’s our job to figure out why.

Security

Web, being an open platform, is constantly under the threat of various attacks, targeting both users and companies. Every piece of code and every call that the browser makes is a potential source of security vulnerabilities—initial load of the page, AJAX request, external scripts or iframe, and even a simple DOM manipulation can be vulnerable to XSS, CSRF and various other vectors of attacks. Being aware and vigilant is an essential requirement for the safety of the data of your customers and your company.

Testing

QA, as a department or a position, hasn’t existed at Zalando since we brought in Radical Agility in 2015. We believe that it’s each developer’s responsibility to ensure the quality of their produced code, and frontend has some very specific strategies for testing and asserting non-functional properties of the code.

We believe that unit testing is a must for any project, and we highly encourage TDD, especially for a dynamic language like JavaScript. Generally, you would also want to supplement this with some end-to-end or functional tests to make sure users can do what we expect they should be able to do.

Tooling / Automation

All of the topics discussed here also require very specialized tooling. You should definitely be comfortable with the concept of resource bundling and the tools available for this purpose. As mentioned above, testing by hand is not our thing, so a setup with automated tests is a must for every project.

Ideally, tooling and automation should be complemented by CI / CD to make sure no code slips past without running those tests. Depending on the project, you might also want to use a transpiler like PostCSS or Babel to help you write more modern code.

Conclusion

What we’ve collected above is obviously an enormous amount of knowledge and will rarely exist in a single mind, however, you should have an overview of these topics and have a keen insight with a select few to stand out as a frontend developer.

If you’ve got further questions or queries, feel free to contact me on Twitter at @d_kubyshkin or via email.