Backend vs Frontend
I have done a pretty good amount of both backend and frontend engineering work. Contrary to popular perception, frontend is enormously more difficult. Itâs not even close.
In backend work, you fundamentally have a decent idea of whatâs going on. You know your data structures and your algorithms. You use your standard library. You write functions and make APIs to deliver data as best you can. Sure, sometimes there are annoying third party libraries. And you probably donât really understand what the OSâs scheduler or your L2 cache is doing. But thereâs a core feeling of solidity and clarity.
The frontend is chaos. It is a fractal nightmare. Youâd think (for web) the consolidation on a single language (JavaScript) would help. But in reality:
- There are multiple competing package managers with subtle incompatibilities.
- Nobody documents anything. Enormously popular projects have maddeningly confusing documentation.
- Nobody even documents their API. They often think they donât have APIs.
- Even well-documented projects can have types that defy all annotation, and hence code thatâs impossible to understand or extend without days of arcane study.
- The platforms on which you run, web browsers, all still behave differently in egregious and maddening ways.
- Operating systems also run the same web browser differently, causing different behavior and different bugs. This is true even for different platforms by the same company (e.g., Googleâs Chrome implements APIs differently on Android).
- Your goal is not to deliver data to a clean specification. It is for graphical objects to feel good to users. This is wildly challenging to design, measuring is so arduous nobody bothers, and the exact requirements change as often as fashion trends.
- There are a billion frameworks. They all have nearly identical landing pages, none of them describe precisely what they really do, and half of them are no longer maintained.
- The only way to figure out what the non-garbage frameworks are, and what slice of the puzzle they solve, is to talk to people in the know, who will help you thread the needle between âtoo modernâ and âjust modern enoughâ
- Magic abounds. Seemingly obvious entities like hyperlinks are plumbed through layers of abstraction and middleware that things will either break or work for reasons you cannot see or smell or taste.
- The quality of advice online is abysmal. Stack Overflow and Medium abound with redundant CSS classes, hacks from the last decade, misunderstandings, mischaracterizations, and an overall feeling of âit worked for me.â Everyone is doing something slightly different with a different set of at least 4 frameworks, so youâre never really sure if any magic incantation will apply.
Despite all of these I keep building websites because itâs the best option we have.