It was 2006. I had an idea for an amazing website I wanted to build. It was going to be big. The idea was hot, all my friends loved it. I just needed to find someone to make it real. It was an app that would change the world.
I went online to find someone to make the site! And searched for…”person to make me a website”.
An hour later I still didn’t know what type of person I actually needed. There were web designers, and WordPress specialists, and backend developers. I was lost.
One of the longer conversations I have with students, before they finish the software engineering immersive where I teach, is around what type of job they want. We begin talking and immediately eyes glaze over.
We are approaching an era where companies have a decent idea of what types of people a job post will bring. In this guide, I’m going to give you an idea of the different roles in the field and what to expect as your daily job duties. This will vary some by the company, but should provide a solid starting point.
If you’re looking for a community to help with the job hunting process, you can join mine here. If you’d like a step-by-step guide to go from zero to full-time software engineer, use my monster blog post on the subject.
Software Engineer Job Description
What does a software engineer actually do!? If you haven’t worked in the field before, you probably imagine someone sitting behind a desk coding all day.
Sorry to burst that bubble. It’s a radically different day, and you’re lucky when you get headphones on time to code. You’ll be fighting for this time because it’s crucial. Much of your time will be spent in a variety of different meetings.
You’ll have process oriented meetings. You’ll discuss what you’re working on with other developers and project/product managers. You’ll have personal development meetings with your boss. You’ll have strategy meetings to plan for future code, structure APIs, and choose data storage techniques.
It’s a lot. And I know, you probably just want to hide and code. Even when you sit down to your computer, you’ll spend time looking at other people’s code or the tickets related to the project. There’s a whole lot of organizational overhead to coding.
All of these aspects are important and add value and organization to the project. However, they need to be balanced. You must spend time coding.
You’ll also likely spend time interviewing new engineers. And showing off your code to other developers and product folks. You may even get to sit in on feedback meetings with end users.
There are so many aspects to being an engineer. Be prepared to wear several hats in any given week.
Software Engineer vs. Software Developer
I hear this question at least once a month. What is the difference between a software engineer and a software developer? I’m going to give you two answers to this question.
- There isn’t any difference. What!? Wait…why? Because most companies don’t actually have a difference between the two internally. Jobs are often posted as “Developer” to justify paying a lower salary to a person. The title of “Engineer” seems more prestigious and often demands a higher salary.
The actual difference of work for the two roles in most situations is non-existent. You’ll do the same job. The majority of companies will expect that you have the same experience and can use the same tools.
- The second answer is that there is a difference. Traditionally, companies that wanted someone who could solve system-level software problems would hire a software engineer. If a company wanted someone who could write code for a web application, they would hire a web developer.
There were software engineers creating desktop-class applications and web folks writing code that lived online. As more applications became web-based this distinction disappeared.
What Do Fullstack, Frontend, And Backend Mean?
These definitions are a little less vague, thankfully! I’ll break down the generic expectations, but know that they differ across companies.
This space tends to evolve quickly as new devices are released. Enjoying design and caring about the user’s experience will help you grow in this space.
Backend engineers typically own the flow of data on the server and database. The backend is the centralized place that all of the individual clients connect to.
This is a complicated space depending on the company and the infrastructure. There are a lot of different languages, frameworks, and databases that you may need to know. The backend may need to handle thousands or millions of requests from users each day. Optimization is the name of the game.
You’ll want knowledge of different tools, their pros and cons, and how to solve complex problems with them. In essence, always be learning and testing. Try new tools and see what they might be useful for.
Fullstack means that you’re comfortable working anywhere on the spectrum. People often like to specialize, but companies want you to be able to contribute anywhere. Some companies organize into smaller teams where everyone can do everything. Some companies like larger groups with specialized individuals.
It just depends on the organization. I would recommend everyone start out as a full stack engineer, and then specialize over time. Until you face real-world problems, it’ll be harder to know what you enjoy the most.
By starting as fullstack, you’ll also understand the challenges that your coworkers encounter. Be a team player.
What’s The Difference Between A Junior And Senior Engineer
This isn’t a question I can give you a great answer to. I’m sorry.
It has to do with experience, knowledge in the field, and your ability to help others. Every company has a different definition of what this means.
Ultimately, discover if your skillset meets the qualifications that a company has for being a senior. If so let them know you’d like to be viewed as one. Apply for jobs that fit this space.
The main things that I look for in senior engineers are:
- The ability to lead a small group
- The ability to design a feature or system
- The ability to debug most problems in your area of expertise
Yes, these are vague. I don’t have a more clear answer though and neither will many companies. Ideally, it means you have some experience and have deployed code to production in a modern environment. Beyond that….
List Of Software Engineering Roles
Fullstack Software Engineer
You are the jack of all trades. Whenever a problem arises, a new feature needs to be built, or a bug crops up, you handle it.
The expectation is that you can do it all. With a little bit of time and research you can accomplish anything.
You’ll be working on the frontend for the app, creating tables or editing the database, and potentially changing tests or deployment. Even though you have several areas of responsibility, most teams will have more specific expectations. Teams tend to be split into areas of expertise.
This is a great beginner role. You’ll get exposure to everything. It’s also a great advanced role as you can pitch in and help everywhere.
Remember to always be learning and always test your assumptions across the stack. You’ll have the power to implement a feature from end-to-end.
Frontend Software Engineer
This was traditionally where new engineers got their start in the industry. Today, the frontend has become more complicated. There are a huge number of ways to optimize the frontend of an application.
You’ll spend time working with the design team to create their vision. You’ll own the accessibility and usability for the website. You’ll likely own some of the build tools.
There are a number of pieces to learn, from how to manage the bundle a user downloads to the different ways to make a website responsive.
There are Ems, Rems, %s, pixels, vws, and more! Sizing, and spacing, and animation will be your friend and your enemy.
Expect to make things pixel perfect, and then break the grid. Frontend engineers solve problems of speed, size, and usability. You’ll meet with customers and designers to mold a better user experience. You’ll create the smallest download possible for mobile users and strive to build a blazing fast site.
Backend Software Engineer
As a backend engineer you will own the centralized data store for the entire application. This role centers around speed and access control to data in remote databases, and the servers for accessing this data.
Backend engineers use a wide array of tools, from different languages and frameworks, to different types of servers and databases to accomplish their goals. You’ll solve a variety of problems across the stack.
You’ll spend a majority of your time remotely accessing other servers and controlling the code and environments running on them. Mastering the command line, remote workflows, and testing will lead you to success.
One of the main collaborative points will be modeling the data for the application with the rest of the engineering team.
You’re the best friend of every other engineer on staff. You create and own the tools that make the development lifecycle better.
You’ll implement the testing framework, the continuous integration, and deployment systems. All of the tooling that enables the other engineers to write safer and more performant code will be your domain.
You’ll also oversee the scaling and infrastructure for the remote hosts and databases.
Another major area you’ll own is the safety of the application. You’ll strive to prevent vulnerabilities and notify other members of the team when there is room for improvement.
The architect is the wise-seer that can predict the future. You’ll oversee the upfront and implementation-level choices the rest of the team makes.
A large part of this role is to see the bigger picture across multiple individual applications. As new applications come online into a larger system, you’ll manage their integration points and the handing-off of data.
In the world of services oriented architecture and microservices you’re the conductor of data. As a company grows and the systems become more distributed, many larger-scale decisions need to be made. The architect owns these decisions and helps the rest of the team implement the details.
The engineering manager is the glue that binds the team of engineers together. Your role is to find the perfect balance of sharing information and protecting the time of your devs.
The manager helps to level-up junior engineers and find projects to allow the more senior members to continue to grow.
The manager also keeps the team on task with the business needs of the organization. There will always be a give-and-take between the desire to over-engineer a solution and the business need for new features asap. You’ll need to advocate for both sides.
You’ll also need to be a mentor and an actual manager to team members. You’ll spend time discussing compensation, and creating action plans for employees who are struggling.
Some of your time will be spent in spreadsheets and working with middle/upper management. Remember to find some time to code if you can, but it will be tricky.
QA or Test Engineer
QA engineers perform an important role, especially on larger teams. You’ll create the rules and automation to test out new code that’s added to the production environment.
A part of this role is your communication skills and your ability to troubleshoot. You’ll need to meet with the other engineers and understand what they are trying to build and why. Then, you’ll need to foresee how people can break the application.
You’ll live in the world of edge cases. Your code needs to be two steps ahead. You need to foresee problems with data and build in the safety net.
The larger any application becomes, the more important your role. Test engineers empower features to be refactored and the addition of new features. You’ll be the unsung heroes of feature releases and API changes.
UI or UX Engineer
This is a newer role that is appearing more frequently on mobile teams. While you may find this role in an enterprise organization for a desktop app, it’s rarer. The expectation is that you’re a master of web and native mobile application development.
You’ll be a specialized frontend engineer. Your focus is on the implementation details for an app’s user interface. This means owning the layout and animations in native OS code (or the equivalent in React Native).
Expect to spend lots of time with the design team discussing how to implement an app.
You’ll be master of screen sizes, learning how to layout features across a variety of devices. You’ll also need to understand the native features of a device like TouchID or FaceID and how to implement the equivalent.
For more visually intense applications you’ll need to build advanced animations and create a seamless user experience.
Database Engineer or Admin
Lastly, we have our DBA or DB Engineer. This is the true master of an application’s data. You’ll own the instances of the database.
When an application needs to scale, new features are added, or a rewrite takes place, you’ll make sure that the data isn’t lost.
You’ll interact with the backend team and the architects to make sure the data is properly indexed and optimized. You’ll also help with dev ops team’s selection of tools.
Ultimately, you’ll need to learn a variety of tools. You’ll spend time diagnosing problems and live in a proactive environment. The health and uptime of the system will be your metrics. Your skills are specialized, and your depth of knowledge will save the company money and time.
There are a variety of roles that exist. Your goal is to find what you enjoy and go deep. Always be learning and have empathy for the rest of your team. Ask questions!
There’s never been a better time to be an engineer. We’re in a golden age of possibility — there are a huge number of solutions that make our lives easier.
If you live with a playful mindset you can find success down any of these paths. If you want to learn more about finding your first engineering job I recommend you check out my post here. Any further questions about roles or specific jobs? Let me know!