An analysis of the 2024 StackOverflow survey results where only 20% of programmers reported being happy at their software engineering jobs. Let's look at 6 r...
I first worked in construction, then I worked in electrical engineering, now I do software, and there’s things about software that I find inherently dissatisfying. There’s little physical movement or location variety, your code is published quickly but often deleted quickly, there’s little interaction with coworkers outside of your very specific domain, and the entire field of software has more money than they actually deserve to have based on how hard they work or actual value your code provides to society. Some companies produce very necessary products that do very necessary things for all of society to function, most of the software jobs are instead working on bullshit marketing apps that waste people’s time or just enrich some financial services company or other societal middle man that doesn’t actually need to be any better or richer.
The main upsides are the immediate return (some buildings take like a decade to build, most code is published that month), the remote work / hours flexibility, and the aforementioned undeserved pay and benefits.
I’ve written it countless times before, but software engineering desperately needs to do some engineering.
What you’re describing is absolutely true, but compare the way you’re working with an actual engineer. No sane engineer would start investigating the production process of a steel beam just to build a regular old warehouse. The steel beam has certain characteristics and unless you have very good reasons, you don’t need to question that.
We are software developers however need to know a lot of our steel beams and can’t rely on many of them. That means even simple stuff takes forever and we tie ourselves to it way more than we should.
Again, I used to work doing actual electrical engineering, working at an architecture firm designing bridges and buildings, and what you’re describing as “actual engineering” is the whole reason I went into software.
Because if the actual engineering you’re doing is just combining a lot of well defined parts to fit certain acceptance criteria, then you don’t really need a person doing that, software can do it.
Let’s divide the problem sphere very broadly into business and technical. The business problem is “I want to store an order” the technical problem is “We need to connect to a database and map our data onto the table structure”.
What we should be doing is solving the technical problem once, and then map thousands of business problems onto that. But instead, the same technical problems are solved again and again, even though there is a technical solution, because that solution is too leaky for us to rely on.
I don’t want to write the 200th iteration of basically the simple problem again and again. I want to solve the actually hard problems. Yes, software can do the simple stuff, that’s what’s the entire point of our profession. Every developer should try to make themself obsolete.
I don’t want to sound harsh, but your sentiment reminds me a lot of the “back when men were men and wrote their own mouse drivers” comments from ye olde time. But that’s not what our job is about.
Quite frankly I don’t really know what you’re complaining about. You’re literally describing how we reuse standard database technologies like SQL, or standard patterns like REST, or standard application and data access frameworks, which we do literally all the time.
Quite frankly, I think you don’t understand what I mean.
Don’t kid yourself, “patterns” are boiler-plates so common they have a name. Yes, SQL makes things much faster, but that’s just the beginning. As soon as you venture out of the almost trivial cases, things get ugly fast. Think about something as simple as a form. That’s a standard problem. But I can’t just write down a “form-spec” and have a frontend and backend for that. No, I need a bunch of libraries that don’t quite work together and need a lot of persuasion to work together.
Or think of Rest-APIs. How many times could you really just ingest a spec and have everything working as expected? That’s very rare. Some libraries are plain weird, some don’t support certain aspects of what you want, etc. etc. etc.
A simple CRUD app should not require a single line of code. Yet, 80% of us are essentially doing exactly that.
Think about something as simple as a form. That’s a standard problem. But I can’t just write down a “form-spec” and have a frontend and backend for that. No, I need a bunch of libraries that don’t quite work together and need a lot of persuasion to work together.
Honestly, what are you talking about.
You can just spin up a Next.js project complete with API calls and ready to go forms. Pick a full stack framework and go with it, there are several.
The larger reason that there is separation between front and back end though is that there is intentional decoupling between them because the backend might also be responding to requests from native applications, or other servers.
Hell, what you’re describing with Gui based application builders also exist everywhere. That’s basically airtable or salesforce or flutterflow, and guess what, those applications all kind of suck because a form is not as standard as you think. In a good application, there will always be customized design, flow and logic that happens to capture user input on the frontend, and on the backend there are a myriad of reasons to optimize different databases for different things. Look at the limitations you run into with Salesforce and Airtable databases because every database needs to have a whole plethora of features just to support the frontend Gui interface to manipulate them.
You’re not crazy or harsh. This is a very real problem. I have been stuck doing business development at every company I’ve worked for. There’s always some shitty load-bearing Django app whose schema determines what the business is capable of doing, and somebody’s gotta maintain it. It’s gotten to the point where I assume that any interesting things I do will be outside of work and not for pay.
This is still a business problem. The truth is, we solved basically all the technical problems that could be practically solved by the 2010s. We have all the technology, we know what people want and need. We could, and should, build a lifetime personal computer (phone form factor) for every person on Earth that provides for their communication needs, acts as a personal assistant and organizer, and more. And we’ve had those, dozens if times.
But how do you keep selling people stuff once you’ve met all their needs? You tear it all down and keep rebuilding and reselling it. You enshittify to squeeze money out, customers flee, so you encircle them with another capitalist enclosure and rebuild the same shit again. Repeat.
Software devs should basically all be making games and trying to teach AI to be smarter but instead we’re replacing internet search (a problem we solved in the 90s!) with LLM enabled advertising engines that literally can’t find info for you so they make it up. And we’re iterating on the 10 thousandth version of an e-commerce site because all internet shopping is part of a giant global MLM now. Seriously, “drop shipping” is the latest iteration of the same old scam they used to run on diet pills and knives and magazine subscriptions.
But every college student with a fresh business degree can set up a Wix site to resell sunset lamps. It’s uber for scams. The reseller takes on all the risk, sets up the e-commerce site with a builder, firehoses ads all over their social media, and does all the work. There are multiple industries now entirely supported on conning desperate people into being your salesforce, workforce, advertisers, and customers all at the same time.
Not even just bullshit marketing, rather on making someone rich a smidge richer. For weeks and weeks of figuring out how to solve a problem that the client could solve by just not insisting they can export every single view to excel and re-import from excel “because that’s what I’m used to”.
There’s little physical movement or location variety
That’s the main reason I switched from computer science to electrical engineering with a focus on embedded software. Programming microcontrollers to achieve something tangible is a lot more satisfying for me than writing some application that only runs on my pc to shuffle some bits around
Yeah, it was a great feeling when I had it for the first year and a bit of my career working on architecture software. I had it again recently when working on back end auth systems for a major automotive company but then we lost the contract and I had to rotate off. Now I work building software that is necessary, but the parts that are prioritized for development aren’t the parts that make the average workers’ life easier (which would increase overall efficiency when measured on a time basis) but the parts that enrich management because that’s easier to sell.
I first worked in construction, then I worked in electrical engineering, now I do software, and there’s things about software that I find inherently dissatisfying. There’s little physical movement or location variety, your code is published quickly but often deleted quickly, there’s little interaction with coworkers outside of your very specific domain, and the entire field of software has more money than they actually deserve to have based on how hard they work or actual value your code provides to society. Some companies produce very necessary products that do very necessary things for all of society to function, most of the software jobs are instead working on bullshit marketing apps that waste people’s time or just enrich some financial services company or other societal middle man that doesn’t actually need to be any better or richer.
The main upsides are the immediate return (some buildings take like a decade to build, most code is published that month), the remote work / hours flexibility, and the aforementioned undeserved pay and benefits.
I’ve written it countless times before, but software engineering desperately needs to do some engineering.
What you’re describing is absolutely true, but compare the way you’re working with an actual engineer. No sane engineer would start investigating the production process of a steel beam just to build a regular old warehouse. The steel beam has certain characteristics and unless you have very good reasons, you don’t need to question that.
We are software developers however need to know a lot of our steel beams and can’t rely on many of them. That means even simple stuff takes forever and we tie ourselves to it way more than we should.
Again, I used to work doing actual electrical engineering, working at an architecture firm designing bridges and buildings, and what you’re describing as “actual engineering” is the whole reason I went into software.
Because if the actual engineering you’re doing is just combining a lot of well defined parts to fit certain acceptance criteria, then you don’t really need a person doing that, software can do it.
But that’s exactly what’s holding us back.
Let’s divide the problem sphere very broadly into business and technical. The business problem is “I want to store an order” the technical problem is “We need to connect to a database and map our data onto the table structure”.
What we should be doing is solving the technical problem once, and then map thousands of business problems onto that. But instead, the same technical problems are solved again and again, even though there is a technical solution, because that solution is too leaky for us to rely on.
I don’t want to write the 200th iteration of basically the simple problem again and again. I want to solve the actually hard problems. Yes, software can do the simple stuff, that’s what’s the entire point of our profession. Every developer should try to make themself obsolete.
I don’t want to sound harsh, but your sentiment reminds me a lot of the “back when men were men and wrote their own mouse drivers” comments from ye olde time. But that’s not what our job is about.
Quite frankly I don’t really know what you’re complaining about. You’re literally describing how we reuse standard database technologies like SQL, or standard patterns like REST, or standard application and data access frameworks, which we do literally all the time.
Quite frankly, I think you don’t understand what I mean.
Don’t kid yourself, “patterns” are boiler-plates so common they have a name. Yes, SQL makes things much faster, but that’s just the beginning. As soon as you venture out of the almost trivial cases, things get ugly fast. Think about something as simple as a form. That’s a standard problem. But I can’t just write down a “form-spec” and have a frontend and backend for that. No, I need a bunch of libraries that don’t quite work together and need a lot of persuasion to work together.
Or think of Rest-APIs. How many times could you really just ingest a spec and have everything working as expected? That’s very rare. Some libraries are plain weird, some don’t support certain aspects of what you want, etc. etc. etc.
A simple CRUD app should not require a single line of code. Yet, 80% of us are essentially doing exactly that.
Honestly, what are you talking about.
You can just spin up a Next.js project complete with API calls and ready to go forms. Pick a full stack framework and go with it, there are several.
The larger reason that there is separation between front and back end though is that there is intentional decoupling between them because the backend might also be responding to requests from native applications, or other servers.
Hell, what you’re describing with Gui based application builders also exist everywhere. That’s basically airtable or salesforce or flutterflow, and guess what, those applications all kind of suck because a form is not as standard as you think. In a good application, there will always be customized design, flow and logic that happens to capture user input on the frontend, and on the backend there are a myriad of reasons to optimize different databases for different things. Look at the limitations you run into with Salesforce and Airtable databases because every database needs to have a whole plethora of features just to support the frontend Gui interface to manipulate them.
You’re not crazy or harsh. This is a very real problem. I have been stuck doing business development at every company I’ve worked for. There’s always some shitty load-bearing Django app whose schema determines what the business is capable of doing, and somebody’s gotta maintain it. It’s gotten to the point where I assume that any interesting things I do will be outside of work and not for pay.
This is still a business problem. The truth is, we solved basically all the technical problems that could be practically solved by the 2010s. We have all the technology, we know what people want and need. We could, and should, build a lifetime personal computer (phone form factor) for every person on Earth that provides for their communication needs, acts as a personal assistant and organizer, and more. And we’ve had those, dozens if times.
But how do you keep selling people stuff once you’ve met all their needs? You tear it all down and keep rebuilding and reselling it. You enshittify to squeeze money out, customers flee, so you encircle them with another capitalist enclosure and rebuild the same shit again. Repeat.
Software devs should basically all be making games and trying to teach AI to be smarter but instead we’re replacing internet search (a problem we solved in the 90s!) with LLM enabled advertising engines that literally can’t find info for you so they make it up. And we’re iterating on the 10 thousandth version of an e-commerce site because all internet shopping is part of a giant global MLM now. Seriously, “drop shipping” is the latest iteration of the same old scam they used to run on diet pills and knives and magazine subscriptions.
But every college student with a fresh business degree can set up a Wix site to resell sunset lamps. It’s uber for scams. The reseller takes on all the risk, sets up the e-commerce site with a builder, firehoses ads all over their social media, and does all the work. There are multiple industries now entirely supported on conning desperate people into being your salesforce, workforce, advertisers, and customers all at the same time.
Not even just bullshit marketing, rather on making someone rich a smidge richer. For weeks and weeks of figuring out how to solve a problem that the client could solve by just not insisting they can export every single view to excel and re-import from excel “because that’s what I’m used to”.
That’s the main reason I switched from computer science to electrical engineering with a focus on embedded software. Programming microcontrollers to achieve something tangible is a lot more satisfying for me than writing some application that only runs on my pc to shuffle some bits around
I’m glad I work on software that has value, where I control the entire ecosystem, and where my contributions are significant.
Yeah, it was a great feeling when I had it for the first year and a bit of my career working on architecture software. I had it again recently when working on back end auth systems for a major automotive company but then we lost the contract and I had to rotate off. Now I work building software that is necessary, but the parts that are prioritized for development aren’t the parts that make the average workers’ life easier (which would increase overall efficiency when measured on a time basis) but the parts that enrich management because that’s easier to sell.