Red Green Repeat Adventures of a Spec Driven Junkie

Should I be a front-end or back-end developer?

I tell every new programmer looking for a job to differentiate themselves by deciding to be: a front end or back end developer. I tell people this, but I never fully qualify this statement. This article is to qualify that statement.

What you tell the world when you choose

When you choose to be a front or back end developer, it demonstrates quite a few things to the world:

  1. you are focusing on a particular skill set to develop
  2. you can focus your online portfolio better
  3. you know yourself well enough to know what you like and don’t like.
  4. it makes things easier for companies to evaluate you for fit.

When you’re looking for a job, these are huge advantages, especially 1 & 2. But how do you choose? Back end and front end developer really differ in terms of the tools they use, the types of code bases they work on, and their role within the larger organization.

What is front end development?

The definition for a front end developer is currently defined as one that writes code that is user facing. The part of the software the end user would use the most for the application. Some typical interfaces depending on the system:

  • server: keyboard input; text interface
  • desktop application: keyboard & mouse input; graphical interface
  • web application: mouse & keyboard input; graphical interface
  • mobile application: touch input; graphical interface

What is a back end development?

For a back end developer, they produce the part of software which the front end application uses to connect to more resources. These resources maybe computing, storage, network or some combination of all three.

  • computing resources: the client sends data to the server to be worked on. easiest to think: video encoding
  • storage: the client sends data to the server to be stored. for later access or access by another system. typically a database system but more recently, straight up files
  • network: provide connectivity to another client, most typically chat.

Differences between front end and back end

The main similiarity between front and back end development is code. Both require code to complete their job. Front end mainly works on a client application whereas back end usually works on a server application. Clients usually connect to a server; a server can connect to… well anything.

How graphical or functional do you like your tools?

Developer tools for each can be the same. Code is code after all. Right now, code is just text specified as programming language in an editor. Some editors make things easier for the front end. As front end engineers tend to deal with graphics more, code editors which are graphical like Visual Studio, JetBrains WebStorm make front end developers more efficient with many standard front end tools integrated into the editor.

A good back end developer relies on just code as the server does not have graphical output so editors which are very good at text handling which runs on the server (vim, emacs), unix system tools such a terminal multiplexers (screen, tmux).

Code bases

Front end code bases keeps changing!

User facing technologies keep evolving. From text based, to graphical interfaces, to now touch systems, there has been significant changes the way a user can work with an application. With each change, there is… a new code base! As there is a new technology, a new code base must be written. This is known as a green field project. nothing has been done in this area yet, so you get to create everything, that includes code!

The downside is that there is very little code to use as reference when building the new system. At the same time, the system you’re using is new, so you might encounter some bugs, especially when you use the system not the way it was designed for.

The programming language of the system is dictated by the original implementation. So, desktop technologies like windows drove C++ adoption and now C#. Web has driven HTML, CSS, and JavaScript. Mobile has driven Objective-C, Swift, and Java.

Back end codebases stay forever!

Back end codebases don’t change as frequently as front end codebases have, yet. There is a nice separation here: as long as the front end client can connect to the back end in a language agnostic way, both systems can be independently developed using the right technologies. This also makes UNIX based systems the most common back end system. Its flexibility allows so many different clients to connect to it, at once!

One distinction of back end codebases is that there is always a significant amount of legacy code and/or system you have to work with. Since the back end is flexible enough to handle whichever front end technology is there, back end technology tend towards the: “if it ain’t broke, don’t fix it” kind of development scenario. Hence, a lot of old code will be in production (and we start hearing horror stories about grandpa coming out of retirement to fix things.) [find reference]

Organizational Role

Everyone in the company is focused on giving the best customer experience. How each person does that through the organization varies. Front and back end developers are usually in the engineering part of the organization. Although in the same part, their roles are vastly different.

Front end role

The front end role is tough. Everyone is always giving feedback on your work (managers, designers, other engineers, etc.) It’s constantly changing as well: What are your competitors doing? What are the ‘design leaders’ doing? What is the industry doing? What is the design trend? There’s constant changes, especially as the product is realized, with that, more tweaks using the rendered product as a source of input.

Front end development is very stressful right before a product launch as everyone is looking at the new product with laser beams, trying to make it perfect. Attributes which will make you excel as a front end developer: you are concerned about form, user experience, and style.

Back end role

Where the front end role is tough because everyone in the organization is looking at the product, the back end role is tough because people are looking at you when the server fails, especially managers. It’s much harder to see a ‘server’, especially with virtualized systems, you need other tools and systems.

Most feedback from managers will be just ‘ideas’ or suggestions of how to do your job. The greatest level of stress as a back end developer is around new server releases (oh god, don’t go down!) but also when user load is very high (i.e. Black Friday for an ecommerce site!) As a back end engineer, there is a chance the organization will put you on-call in case of any unexpected failures. If you care about functionality, stability, and scalability, you will excel at being a back end developer.

What should you do?

Honestly, if your organization can handle it, try both roles separately to evaluate it. Build a ‘full stack’ application, where a server component is necessary and a front end. If you are new to programming, the easiest way to do this now is using the MEAN stack (MongoDB, Express, Angular, Node). Deploying to your own server on Digital Ocean, Rackspace, or Amazon Web Service’s EC2.

If you already have programming experience, take on a web framework which you know the language of and build out the rest from there. If you only know C, you might want to learn another programming language for web programming because it’s a bit crazy

… and many more.

As a new programmer, you will have an easier time finding a job as a front end programmer. There are lots of new things happening on consumer facing technologies, code bases are usually fresher (or up for a full rewrite), and your work hours fall within to the normal.

But if you are someone that enjoys working with more abstract tools, can wrangle lots of old code, and can handle the occasional on-call emergency, then the back end is for you!

Now, go forth and code a full stack!