Software applications are like icebergs.
There is a portion of the application the user sees and then—in most cases—the largest part of the application remains unseen. This is the elusive and mystical “back-end.”
In the chapter on web development, we mostly talked about web development as it relates to direct interaction with the end user––what we might call “front-end web development.”
In most significantly applications, there is much more non-user interface code than user-interface code.
Complex systems have all kinds of logic that happen in the background that make them work.
Data needs to be stored and retrieved, business logic and rules need to be followed, and results need to be calculated.
All of this happens behind the scenes.
The back-end developer is the kind of developer who makes all this happen.
What Exactly Is “Back-End Development?”
For the purpose of this chapter, I’m going to consider back-end development to be any kind of development that doesn’t involve creating code that produces a user interface.
This could encompass back-end web development, but it might also involve writing APIs, creating libraries, or working with components of systems that don’t have user interfaces or even systems of scientific programming.
In reality, even though front-end development gets most of the glory, most of the code that exists in the world—arguably the most useful of it—is back-end code that is never seen by the end user.
Simply put: back-end development is simply writing code that is not seen directly.
What Do Back-End Developers Do?
What back-end developers do can vary greatly, depending on the size and the scope of the application they are working on.
I’ve held many jobs where I was a back-end developer, working on the business logic in an application, and feeding and retrieving data from the front-end.
In the web development world, most back-end developers concern themselves with building the actual logic behind the application they are working on.
Often, front-end developers will build out a user interface, and back-end developers will write code that makes it all work.
For example, a front-end developer might create a screen in an application with a button to press to get the customer’s data.
A back-end developer might write the code that makes that button work by figuring out what data to fetch from the database for the appropriate customer and delivering it back to the front-end, where it is eventually displayed.
A back-end developer might also be heavily involved in the architecture of a system, deciding how to organize the logic of the system so that it can be maintained and run properly.
He might be involved in building frameworks or the architecture of a system to make it easier to program against.
Back-end developers tend to spend much more time implementing algorithms and solving problems than front-end developers do.
I’ve always liked back-end development work because it feels like more of a challenge.
That’s not to say that front-end developers don’t ever solve difficult problems, but often front-end development work is more about creating user interfaces and hooking them up rather than implementing the actual business logic that makes the app work.
Primary Technologies and Skills in Back-End Development
While front-end developers need to know a set of tools used to create user interfaces, back-end developers usually have a completely different set of tools and skills that are required to do their jobs effectively.
One important skill back-end developers need is related to SQL and databases.
Most back-end systems are connected to some kind of database which stores the data for the application.
It is usually the job of the back-end developer to write, read, and process data from a database or other data source, so having skills like SQL can be extremely important.
Back-end developers—at least for web development—also need to be good with server-side languages for the technology stack they are using.
For example, while a front-end web developer might be focused on HTML, CSS, and JavaScript, a back-end developer might need to know more about PHP web frameworks, Ruby on Rails, ASP.NET MVC, or whatever server-side web development framework is being used to build the application.
Finally, I’d say that a back-end developer needs to know much more about application architecture since, for the most part, it is the back-end developer who is going to be building out the architecture and internal design of the application.
A good back-end developer will know how to utilize various frameworks and libraries, how to integrate them into an application, and how to structure the code and business logic in a way that makes the system easier to maintain.
If you like designing the infrastructure of an application, implementing algorithms and logic, and working with data, you’ll probably enjoy working as a back-end developer.
What About Full-Stack Developers?
I thought about dedicating a full chapter to full-stack developers, but I think since we’ve already covered web development and back-end development, it’s easy enough to talk about full-stack development here since full-stack development just involves a developer who does both front-end and back-end development.
Really, full-stack development includes working on all of the components and layers of a system, or software development stack. It may even involve knowing about server hardware and architecture, or what would be considered “dev ops.”
Today, more and more software development positions are looking for developers capable of doing full-stack development since it’s valuable for a software developer to be able to work with the entire technology stack involved, rather than have one developer who works on the front-end while another developer works exclusively on the back-end.
Some of the reason for this is because more and more applications are blurring the lines between front-end and back-end development.
Many popular JavaScript frameworks, like Angular, allow you to create a large portion of what could be considered the business logic right in the user interface portion of the system.
Also, with more and more teams adopting Agile methodologies, individual programmers are being asked to work on more than just their area of specialty, as tasks are being assigned to a team more so than an individual.
While I think it’s useful to be capable of being a full-stack developer—and you should definitely have enough knowledge to understand what is happening at every level of the software—I don’t think it’s the best idea to “specialize” in being a full-stack developer, because it isn’t a specialization at all.
Basically, you should aim to get a broad knowledge of the most common technology stack you will be working with, but you should pick a primary speciality or two where you’ll really get an in-depth knowledge.
All software developers should know how to create a user interface, the basics of the framework they are using, how to store and retrieve data from a database from within the application, and even how the infrastructure works to support the software, but they shouldn’t try to be experts in all of those areas, because all of those areas are rather large and growing.
It’s far better to have a general, working knowledge of everything in the technology stack and a specialized knowledge in a few areas.
Then, you can still call yourself “full-stack,” but practically, you’ll be much more useful to a team.