Programming careers come in many flavors, however there are three big themes that tend to be very common in the current marketplace:
- Front-end or Client engineers
- Server or Backend engineers
- Full-Stack Engineers.
This isn’t to say that these are the only available options, there are plenty of other types of jobs out there — you can be a QA Engineer or Tester, DevOps engineers, IT Support Professional, Database and System Administrator, Data Engineer, Security expert and so forth — however in this post I wanted to focus on the three aforementioned areas for web and mobile application development and share some thoughts around pros and cons of choosing a side. This could be really useful if you are just getting started or if you have already started your career but thinking about changing. So let’s get started.
Understanding System Design
Before we begin, be sure to checkout my post about system design for mobile and web applications. This will help you figure out where will you focus in terms of the software stack. It will also help you understand where other job functions fit and what would be your typical responsibilities.
Frontend or Client Developers
User Interface Design vs Development
Note that a frontend developer is different from a UI designer, as a developer you will most likely be working very closely with a designer. Your job is implementation of the UI, but it will help you immensely if you understood the tools of the trade used by the designer and also basic knowledge of understanding user experience design philosophies. This will not only help you understand the requirements but also implement them correctly. Not only you will be able to contribute to user interface design, you will build a better working relationship with the designer — resulting in success for you and the project.
How to Master Frontend Development
If you want to become a master front-end engineer you must develop a really good eye for user interfaces (UI) and user experience(UX). In addition spend time in understanding the technology behind the frameworks, for example building detailed knowhow of core CSS concepts and how rendering happens in a web page. Dig deep into rendering, pixel density, frame rates and issues relating to animations. You must learn popular user interface development tools like PhotoShop or Gimp to be able to manipulate images and text yourself.
In addition, when you pick up a frontend UI framework, don’t just skim the surface to get the job done; instead go all the way in, learn as much as possible. This will really help you out with implementing complicated UI or when complex and hard to reproduce bugs surface up.
In today’s internet enabled world, a frontend engineer must also work with a backend engineer to access the underlying data in order to deliver the UI the user expects. You don’t need to be an expert but having a decent amount of knowledge about API integration and data layers, and how the backend may be working will go a long way in building and releasing successful software.
Salary Expectations as a Frontend Developer
According to PayScale on average you can expect to make over 70K USD per year after just an year or experience but what most interesting is that salary continues to scale with more experience:
I would argue that this would depend a lot on the type of frameworks you have worked with, the landscape changes quickly — you must keep your self updated all the time or quickly become outdated.
Backend or Server Developers
As a Backend developers you focus on building server application code and data management. For example when a user logs into a web or mobile application the server application handles most of the heavy lifting in terms of creating, retrieving updating and deleting user data. You may work with a SQL or NoSQL data store, often writing queries to work with databases. You must also develop a deep understanding of the underlying infrastructure where the server application will run.
One critical difference with Frontend engineers is that your work may not be visible to your customer, you may not get the same type or level of feedback and recognition. Leaders with deep understanding of the software system will not have any problem rewarding you for your work, but often time your client and customer may not be even aware that you just finished a really hard and complex database migration to take care of future growth or improved an index that effected the response time by 200ms.
Mastering Backend Development
Just like how frontend engineer works with a user interface designer, a backend engineer often work with DevOps or IT staff to deliver their part of the solution. They don’t need to know each and every detail about the hardware but they must understand how different parts of the infrastructure are setup to take full advantage of it. You must develop deep understanding of networking, scalability and high availability. If you are a backend engineer my post about scaling web applications is a good starting point if you are trying to learn about it.
Understanding of unix or unix like systems, Docker and Continuous Integration is also going to be necessary in today’s web and mobile application development world. Another huge plus us learning to write shell script or tools that can help automate the server application development.
Salary expectations for Backend Developers
Just like frontend developers, salary for backend engineers tend to vary significantly based on years and type of experience. Interestingly enough, according to PayScale salary for backend engineers tend to drop after 9-10 years or experience.
In my experience (as a backend engineer myself) I know for a fact that backend work is as much as, if not more, challenging as client work but the career growth may be limited due to visibility of the impact created by backend engineers. Venturing into DevOps and Database administration is a natural way to increase your value and impact. You must then take further steps to create visibility of your work.
Full Stack Developers
Unlike front-end or backend engineers, full-stack developers have the capability to work on all parts of the applications. Outside of the DevOps/IT and UI design they don’t need anyone’s help to develop the application. This is very powerful and I highly recommend learning to become a full-stack engineer. Good full stack engineers can even do a bit of user interface design and DevOps stuff making them extremely useful since they can develop the whole thing from top to bottom without requiring anyone else help.
Mastering Full Stack Development
Because of the breadth of knowledge required, full stack engineer may struggle to be really good at every thing and instead may opt to become the jack of all trades. I recommend avoiding this trap and managing your knowledge by creating an expert to hacker mentality, there by treating different technologies with different level of expertise as needed by you work environment. Where needed, you should learn to consult or collaborate with an expert.
Salary expectations for FullStack Developers
According to PayScale.com full stack developers seems to be getting paid the highest of the group.
Although they do seem to show a downward trend after a while – which I believe is due to changes in technology over time how it becomes a challenge to catch up with everything. I highly recommend becoming a full stack engineer and switching over to an architect or leadership role once you have gained significant years or experience.
Looking at salary and compensation is just one way of looking at a particular career, you must consider other factors, such as job satisfaction and you personal interest to create meaningful work environment for yourself.
Few other avenues offer as much promise for accomplishing valued outcomes as creating meaning in workMichael Steger (michaelfsteger.com)
If you are starting your career and want to become a full stack engineer be sure to checkout my other post about how to become one. I would love to hear what you think or if you have any questions. Feel free to leave a comment or join or community of thousands of members.