What does a backend developer do?
Feel free to tell about what your day looks like. I'm exploring different positions so it'd be very valuable to me. I've already done a few courses in C# and Python, they seem to be quite common. My goal here is to get to know this role better, for now I have limited information about it. Is it rather repetitive, or is there always something new to do? What part of it do you enjoy the most and the least? Is it true that many desktop apps are really webapps?
I'd call myself a backend developer. Primarily we build data stores and APIs that encapsulate low-level business logic for cloud applications. Some backend teams mostly make CRUD APIs, but my team tends to work at a lower level, such as file objects, transformations, CDNs, bulk operations, etc.
Things we have to deal with include:
So sometimes wearing multiple hats. Personally I enjoy what I do a lot because it always presents a challenge. I love solving complex problems, and almost monthly I get to play around with large-scale software problems where the naive approach will almost certainly perform like crap and needs a more clever design.
We're a cloud-first company though so primarily in the context of that.
May just be bias from my experience, but a lot of back end stuff is cloud now. I had to learn how to design, deploy, and maintain Azure resources. Programming is still in C#, but now I have to give extra considerations into the limitations and abilities of Azure Function Apps. To me, it's like a puzzle. How can I design a system to best achieve what the company needs done? Do I use Cosmos DB, Storage Tables, SQL? Every step of the cloud infrastructure design is up to me.
The last part of you post is pretty true though, lots of desktop apps now are just web wrappers. Stuff like Discord, Spotify, Etcher to name a few.
Just when I thought it couldn't get any more complicated haha. I like the puzzle part though, I'm thinking in a similar way.
And it only gets more complicated.
The entire IT world is just a huge ball of complexity. Partly because the actual (domain/business) problem is simply hard, sometimes because you have to deal with legacy systems, partly because you have to deal with difficult people.
As developer (and especially backend) our job is to coax or coerce this bundle of sorrow to do what we want it to do and hide as much duct tape as possible. Frontend then has to make that crap presentable and usable.
The reality is, 90% of my work is not writing code, but all the stuff around it. I spent several hours in meetings to coordinate, how to split a long string into three. I'm not exaggerating. But there's just 5 different consumers of this data and three different sources and you have to find a way to make all eight parties happy.
As a backend developer- we make everything work. We are the glue behind the scenes.
Everything goes through our code.
We are god.
That sounds nice :D
Although- do keep in mind- Front-end developers are cool too. They possess the reality stone, and can change reality to see how they see fit.
They speak mystical languages such as javascript, react, etc... and they were responsible for building the world as you see it. (We just created the physics which makes the world work)
Perhaps, but don't forget every god has had to learn a few things the hard way.
Many will cherry pick or apply self-serving interpretations of your pronouncements.
Many false prophets will arise.
Many will rail against your very existence and create competing systems.
Eventually, you will be considered archaic and replaced by the gods of the new thing.
Tongue in cheek, obviously, but not too firmly. :j
It depends on the company for how much any developer role will be responsible for, but a backend developer would typically be responsible for anything that isn't the user interface. I'm unsure how often the web app statement is true, honestly.
As a lead backend developer I'm responsible for the overall scalability of the platform I work on. Scalability ties to performance, throughput, and maintainability. In my specific position, I tend to leave performance of the code to the members of my team who are implementing a feature while I am building designs that focus more on throughput and maintainability.
This obviously requires a knowledge base of the language I'm working in, but also various mechanisms for distributing work across multiple services and locating bottlenecks in a platform to target for improvement.
I currently work in a combination of Python and Rust. My last position was Golang. Cloud infrastructure comes in to play quite often. AWS knowledge will be really useful in this field. Some relationship database knowledge will go a long way. Learning how to properly build and use a cache.
Overall, I would say it's not repetitive in the long term. Early on it might be a lot of hammering out other people's designs but you get a greater degree of flexibility as you progress and learn more.
I’ve been a backend web dev (now full stack) for over 10 years. Many things are rather boring CRUD apps. This is the part I enjoy least, but it can be dealt with rather quickly. The projects I enjoy the most are the ones where the business logic is rather complex, since that is almost always done on the backend. It’s a nice feeling, to build something custom for client that will fit their exact workflow and spit out the numbers or the reports or whatever that they need to make their business work efficiently. Where I work we decided against the cloud and use a docker based architecture on physical servers. There is also quite a bit of server administration / devops involved if your company does not have a specialised person. Many desktop apps have a server component, whether they are web apps or not. In these case there will be a backend component.
You're looking at a description from a pure backend dev?
A pure backend dev will only be a role in big companies and projects that have enough work or scale where such a specificity is possible and worth it.
Most developers may work on backend, but as part of the project, and shift roles according to needs and tasks.
As a backend developer you're not doing anything with "looks". No interface design, HTML CSS, or anything like that.
The most common backend work involves the following:
I enjoy it. It feels like I'm designing special wires that connect different computers together. It can be repetitive if you're not designing your code to be extendable. If you're writing the ideal code, you're always writing new stuff. If you're just copy-pasting from other examples, that should indicate that there is a general solution that's being ignored.
It depends, and there's a lot of variation obviously, but,
A frontend developer writes the stuff that runs on the client,
A backend developer writes the stuff that runs on the server (it can be repetitive--any programming can be, but it certainly needn't be. It's not always as flashy as frontend but there are still some exciting challenges),
And finally, a full stack developer does whatever the company wants, and damn it, they had better enjoy it too.
Not to overwhelm you, but I'd definitely also suggest looking into learning SQL and familiarizing yourself with Linux if you haven't already.
Really depends on who you're working for / what you're working on. In general, a programming job shouldn't be repetitive; the repetitive parts should be automated (and you should have the autonomy to automate them yourself). If a job is truly repetitive, something is probably wrong.
Well, that really depends on the architecture of whatever you're working on! I've done some fairly miserable work where the backend was 90% just an interface that the frontend used to access the database, communicate with external APIs, and schedule background jobs. I've worked other places where the bulk (or entirety) of the web app's logic happens in the backend, and the front end is just there to act as an interface to the user, and that's much more enjoyable. But yeah, the bread-and-butter is going to be:
Then you'll also have challenges that you wouldn't have with non-networked desktop application programming: