I have a bone to pick with all those people out there happily expositing to the world about the difference between “front end” development and “back end” development. Go google it, and you will find people who sweetly explain that the front end is about the appearance and experience of things -the user interface and user experience while the backend is about server side code – managing and processing data. It is about algorithms and business logic that is necessary to make a web application work.
This is true, for the most part, but there is bullshit – subtle and then not-so-subtle bullshit waiting in the wings. I have done both frontend development and backend development on the web, and I can tell you exactly where the B.S. starts to creep in. Front end development has changed dramatically over the past 10 years, in fact some might argue that front end development was hardly considered to be a real thing 10 years ago. The explosion of smartphone usage, the rapid advancement in browser technology, and the advancement of javascript into a more versatile and developer-friendly language has changed everything. Now most of your business logic could be run in the client – (on the front end in the browser). There is even a database built into your browser (IndexedDB). The point is that you could build a fully functioning web app with database storage without the need for server side code.
I would not advise you to do that. My point is that the premise that business logic belongs on the server, and that algorithmic code, or even API calls are always going to hide somewhere on the backend is simply not true.
There are things that are better to do in the client and the server respectively. Code that requires heavy processing or an extra level of privacy like a secret api key are good candidates for the server. Code that benefits from being literally in the palm of the hand of the user – like code that is fetching user GPS coordinates, or time zone – you want that in your client. There is a lot of wiggle room in the middle. There is a substantial amount of functionality that could be built on either the client or on the server. There are quite a few opinions on what should go where. I have my own opinions on that topic but I’m not going to wade into that discussion today.
What I want to talk about is the biased-B.S. There is a bias, a very prevalent bias, a little twinge belief that hides in the attitudes of dev managers and developers everywhere. That bias is the idea that backend development is more rigorous or more technical that frontend development.
It starts with something like the above suggestion that the business logic, the data management, or the “algorithmic” code must be in the backend and progresses to the suggestion that the frontend developers are working on “appearance” but not “functionality.”
Just a quick google search lead me to the following gems of B.S. from some otherwise respected bloggers, and vloggers:
from https://learn.onemonth.com/frontend-vs-backend-developers/:
- Frontend developers build how a website looks.
- Backend developers build how a website works
….
later in the article we see this:
“Backend developers, on the other hand, need to have critical thinking skills. A backend dev is often debugging code, as well as designing systems for how the user will interact with the website. “
Front end developers don’t need critical thinking skills?! Front end developers don’t need to know how to debug stuff?! Ummm… javascript is a programming language. HTML and css have to be debugged too they are actually languages. OMG, this statement is so bizarrely wrong it hurts.
A vlog that I didn’t make it all the way through suggested that without server side code front end developers could only build “static websites.” This statement has not been true for a very, very long time. But alas many of the people who think they know about building software on the web are stuck somewhere in 2011, when JavaScript was seen as inscrutable to many developers, no one really cared if their website looked good on a tablet, and even when companies developed client-heavy applications they expected users to only access those from their desktop computer.
We aren’t in that world anymore.
Not only that, but the world of web technology has been changing at an ever increasing pace. The premise that frontend development is less rigorous or that front end devs are less than, or lite developers is not even close to true. From my own experience, I found backend development to be a far simpler world than the one I now inhabit. The front end world is one in which code quality and a rigorous approach to development matters more, not less than it did when I wrote back end code.
But let me give you a little taste of what I have worked on in the past year.
I’ve had to write python, luckily I already had experience as a python developer. See there is this thing called server-side-rendering. That is when you build your client side appearance layer with server-side languages. So the idea that we front end devs might get by without knowing a server-side language is faulty at best. I’ve worked with PHP, python, ruby, and node.js. Node tends to be the preferred option for front end developers because you are likely already working with it, if you have any kind of task runner or build process.
I created my own build process for a front end application using node.js. We are on the server again. Funny how us front end developers can’t get away from server-side code even though we supposedly only work on the “appearance” of a web app. I also experimented with several libraries for that purpose – parcel.js, webpack.js, rollup.js. I am now mostly working with rollup.js. I occasionally work with gulp on my older projects. Gulp is a task runner that can double as a build process.
I built several client side applications in Vue.js. I started learning Svelte.js. I revisited Angular for a project, only to realize that it has changed dramatically since I last used it four years ago. I helped another developer get an extension spun up using React. I am not proficient in react. I am proficient in getting frontend libraries and frameworks to run in the SDK environment that I work in so I was able to help another developer get react working in our environment.
I trained multiple people in writing javascript tests in mocha.js. I learned how to build and style web components. For those of you that don’t know, these are custom components defined via javascript. You can encapsulate both javascript functionality and styles into these components. The last few weeks have seen me digging deep into the shadow dom API, and figuring out the nitty-gritty of working with and styling slotted content. I fixed obscure bugs that were only a problem in a mobile IOS app. But the problem was webkit-related and my cross-browser debugging experience turns out to be what was needed. Speaking of which, I did a massive amount of cross browser, and cross device testing and debugging. I helped a few younger devs get better acquainted with dev tools. I’ve got a good working knowledge of chrome’s dev tools, firefox’s dev tools, safari’s dev tools, Edge’s dev tools, and IE’s dev tools, all of which I’ve had to work with in the past 6 months. Internet Explorer 11 dev tools aren’t as bad as you might expect, particularly if you happen to remember the IE9 dev tools. I’ve spent some quality time working with SVG’s – I needed server side rendering in a python-based template of a custom, configurable icon library, so I templated svg in a jinja2 template.
I’ve trained multiple other developers on using Voiceover to test how well a component or extension works for screen reader users. I’ve trained multiple developers on how to make a web page keyboard accessible, screen reader friendly, and even helped to brief product owners on the new WCAG 2.1 accessibility standards. I’ve built and repaired many not-quite-responsive layouts so that they responded properly to all screen sizes. I’ve helped multiple backend developers understand git workflows better. I’ve helped multiple backend developers write better javascript. I’ve written unit tests in both python and javascript, and I’ve resolved many problems that arose in our python-based web server/sdk environment.
That is just a taste. The reason I’m feeling so bitchy about it is that I am not tolerant of the suggestion that what I do is not “development”. I’m not tolerant of the idea that I don’t need logic skills, critical thinking skills, an understanding of algorithms, problem solving and debugging skills, and a deep understanding of the ever changing technologies of the web. I’m not tolerant of the idea that my work is “appearance not functionality.”
When I was a junior developer I was comfortable in python and knew a little jquery (a javascript library), people assumed I could do anything. They assumed that I would want to know about architecture, about databases, about deployment, about getting users permissions sorted out in unix. They encouraged me to try things and learn them even when I told them I didn’t know how to do something. Now there are those that assume I know little, and that I want to know even less.
“You don’t need to come to this meeting, it is about the server architecture in the SDK. It’s not relevant to you…” Me: “You mean the server architecture I run every day and build stuff on top of… that architecture.” I do need to know it. I did. I learned it. If I hadn’t I would be running to another dev every time I ran into a minor hiccup on my local server, why would I want to do that?!?
Do you know how many times I have run into a time-consuming problem only to discover that there is a great tool for that – a tool that makes fixing that problem quick and easy… “We would have shown you how to use that tool but we didn’t think you needed to know. You are just working on the UI after all.” Several times. Several.
I had no idea moving to front end would require gaining a far wider skill set than back-end coding, but would also mean regularly dealing with people who don’t quite understand that you are a developer. And while front end development necessitates solid logic skills – the kind you might have picked up in a discrete math class, what you really need is something most back end developers don’t have: spatial reasoning skills. Spatial logic matters on the front end.
I don’t want to steer anyone away from the front end, it’s a great career path, just keep in mind that backend development is much, much easier and no one will ever doubt that what you do is “development.”