Software engineering is a broad field, with many different specialisms. I tend to consider 4 distinct roles. None of these roles are more senior than another. These are explicitly specialisms, not a hierarchy. There is no right way to be an engineer. You can be one or more of these things, with more thrown in.

Backend engineer

Backend engineers create APIs for others to consume. Typically strong domain modellers, they are up-to-date with latest thinking about REST, binary protocols, API chattiness, and data storage.

Frontend engineer

Frontend engineers craft user interfaces. Good at breaking down interfaces into semantic components, removing cruft and using design elements to create a smooth experience, with deliberate friction where a user should stop and spend more time. HTML and CSS are their main toys, with a bit of JavaScript thrown in where necessary. But progressive enhancement and accessibility are their mantra.

Operations engineer

Tools for others, automation, infrastructure as code, PaaS usage, data storage.

Test engineer

The best testers are sick people. Why would you want to use an API like that? But they will anyway, and help you create a better, more secure product for your users.

Beware of labels

There are other things outside of these. In some organisations, they may be a distinct role. For others, they’ll be a hat that someone wears on occasion.

The boundaries are also fluid. I used to be a backend engineer, became more frontend as I did mobile web stuff, then back to backend, and finally operations.