Ask HN: How are you feeling about software engineering in 2023?

18 points by mbm ↗ HN
A lot is changing in our field. Share how you're feeling.

58 comments

[ 3.2 ms ] story [ 122 ms ] thread
For the last decade or so, I've been growing increasingly unhappy about the field in general. It's grown disturbingly mercenary. People are increasingly getting into the field for the pay rather than for a love of programming, the quality of the software being produced is decreasing, and the most visible parts of the industry have some serious ethical issues that nobody seems worried about enough to even start to talk about addressing them.

Honestly, I think it's time for me to find another line of work.

Thanks for sharing. If you could share also, what was the field like for you when you first came in?
I think the main difference is that the field has effectively turned into a kind of factory work.

An analogy to the car industry holds very well, I think. Early in the automotive days, people built cars because they loved to build cars. As it became an industry, and then a mature industry, that was largely lost. Now, the people who "build cars" are factory workers, punching a clock and putting in their hours. The industry stopped being about excellence and started being about maximizing profit.

That's where software is now.

I'm not saying that's a bad thing. It's clear that's a natural progression of new industries. However, that's not the sort of work that I want to do, and not what fulfills me.

I'm increasingly suspecting that there is no longer a role for the likes of me in the software industry.

It depends... you could always start your own project or work on tooling. Whatever you do, needs to have some market to survive, but there are options. Even if less well paying, less secure and/or less stable. Or, harder to break in to.
> you could always start your own project or work on tooling.

I've been successfully doing that for most of my career, actually! But even as a small independent, you can't ignore the nature of the industry. Especially if you're selling to the industry. So it doesn't shield you from the market forces very much.

I fantasize about there being a market for high-end, boutique tools, libraries, and such -- but I don't think it exists. I'm not sure that it can exist given the nature of the industry overall.

I was mainly meaning, working for a company that already provides some kind of tooling. :-)
> [...] the most visible parts of the industry have some serious ethical issues that nobody seems worried about enough to even start to talk about addressing them.

Thanks for sharing. What kind of "ethical issues" are you referring to?

There are all sorts of ethical issues -- just take a look at the industry news over the past couple of decades for a taste.

But the ones that bother me the most are the ones where we abuse our customers for the sake of profit. Issues like data collection and use, "move fast and break things", removing customer autonomy, etc. are all things I struggle to be OK with, but are all things that are heartily embraced by the industry these days.

And don't even get me started on the acceptance of overt law-breaking. Companies like Uber (only an example, they're not the only ones that have done this) achieved success by breaking the law, and overall as an industry, we tend to accept this and even celebrate it -- as long as a successful, profitable business is the result.

I like to think of it as "move fast, don't be afraid to break things, and fix them fast". I've been in workplaces with months long release cycles with multiple versions at various stages of testing and it's incredibly slow, difficult and problematic. I've also worked at places where if code touches the main branch, it's in production in about 5 minutes. In the latter production was broken about half a dozen times in the first year. And it was always fixed in about 10 minutes. In the former, there are bugs that take months to correct. I'm not convinced the latter option isn't the better one.

Much like you put up hand rails on stairs, you will put guardrails on your CI/CD pipelines and processes. Do you do this from the start, or along the way. It really depends on what state things are in. Most industries cannot tolerate the development of software as more of an engineering discipline. This is disappointing when the likes of the auto industry doesn't. But it's largely expected otherwise.

Software development is a craft discipline, not an engineering one more often than not. Most systems are not life and death critical. It's more akin to making a dog house than a sky scraper most of the time.

"Move fast and break things" was originally meant to refer to agile development methodologies that encourages developers to iterate quickly on their implementations and to encourage a development culture where developers are not afraid to make changes to the codebase. However, I believe the quote "move fast and break things" has unfortunately been used by some people to justify and encourage reckless, socially-damaging behavior by companies and individuals. I believe that's what the poster was referring to when critiquing "move fast and break things."
Oh, I definitely get it... I also remember an Alt.Net movement (people that liked C#, but didn't like the MS "enterprise" patterns) that had a motto of "running with scissors."

Of course, there's also times where intentionally breaking something is the best solution to getting the fix done. From literally deleting the code/class/library that you are replacing and dealing with all the compiler errors as part of the fix. Or similarly, actually shutting off the non-secure protocol servers when the company decree has been to only use secure channels (TLS or similar) for communications, and breaking the systems that are still using the insecure channels after remaining up for years, "just in case."

> I believe that's what the poster was referring to when critiquing "move fast and break things."

Yes. The original sense of the term was fine and expressed a reasonable thing. Since then, it's been taken much too far and has been applied far outside the development process itself.

This attitude is, in my opinion, one of the things that has turned the software industry from being mostly a force for good into a very mixed bag.

> People are increasingly getting into the field for the pay rather than for a love of programming,

> the quality of the software being produced is decreasing

I feel these two are related. I mean, one could say the same looking at companies like Boeing post McDonald Douglas merger.

There's nothing wrong with programming for the pay. Your motivations shouldn't have an effect like that on the quality of your work. Even if you love programming, do you really love the programming you do at work every day?

There are lots of great reasons to pursue work in computers, and not wanting to clean toilets for a living is a perfectly valid one.

I'm not saying that there's something wrong with being motivated by pay, although I do think that is one of the factors that has led to a decrease in software quality over the years. (If you're doing a job just for pay rather than because you enjoy the work, you're much less likely to go above and beyond to produce the finest work you can do.)

It's just not what motivates me, and I'm commenting about why I don't feel like there's a role for me in the industry anymore.

> If you're doing a job just for pay rather than because you enjoy the work, you're much less likely to go above and beyond to produce the finest work you can do.

Just spitballing, but I wonder if that’s in part because theres not much monetary incentive to go above and beyond.

Companies don’t seem to give out raises or promotions for good work as much as they do for more political reasons. And I’m sure we’ve all heard stories about the new guy getting hired on for much better pay than the loyal veterans. Personally, this is why I think job hopping and resume driven development are so popular.

If I’m someone primarily motivated by money, and there’s no monetary incentive to go above and beyond, why would I waste my time trying?

More money won't make me do much more. I already get enough, and my dislike of something and the added stress of slogging through it isn't worth it. I'm not a frycook desperate for more hours to make rent this month.

Genuine interest in the technology? That'll boost my competence leaps and bounds (through the experience I have pre-cached from my time off of work alone) for no extra pay!

In other words, at dev level,

> someone primarily motivated by money

is likely far too up Maslow's hierarchy for extra pay to make up for the problem of having pure "hired guns".

> Honestly, I think it's time for me to find another line of work.

Count me in when you find it!

What I miss from technology is the group of people I used to collaborate with during my university years. We used to work on one thing and one thing only (UNIX Philosophy anyone?) and there was no way we would not master our craft back then or the subject we were given to work on.

Nowadays everything feels like work on bleeding edge and don't care about the quality of code nor the security of your own libraries.

I feel so awful with myself for choosing such a wrong direction.

It sounds like you're in webdev. :p (I stay away from it for an ineffable mixture of feelings I get from it that are similar to yours even though my programming career is too new to have your memories or preconceptions.) How true is this for work with legacy codebases or embedded?
From friends that work or have worked with both legacy codebases and embedded systems I can say this: those who worked or still work with embedded systems love it, because they are working on a single thing only.

Those who work with the legacy codebase, it really depends of the type of legacy infrastructure.

If it's a mad chaos, they prefer not to discuss it with me because they get anxious knowing they will work on that monstrosity the very next day and don't want to ruin their evening lol!

Else if it's rather clean comparing its legacy status, they don't mind, but worry about their future; they don't want to stay outdated from a tech point of view, in case they need to look for a job.

I feel trapped to be honest with you...on one side is young developers that their mind is a sponge comparing my old grumpy half-burned brain-cells (lol) and on the other is the AI that does incredible things that could easily replace us one way or another.

I don't know anything else apart from technology and I feel doomed -_-

Yeah I really regret going into the field now, especially the way I did it.

There’s just no where else to go that isn’t just less of the stuff I like about it and more of the stuff I hate about it. I had a plan to go back to school and switch fields, but the more time passes, the more I realize this isn’t going to happen. Everything keeps getting more and more expensive, both in terms of money, and more notably time.

> There’s just no where else to go

Yeah, that's a problem. This is literally the only marketable skill I have.

What field were you thinking of switching to?
I don’t like to talk about that too much on this site, but I’ve have been a number of ideas, mostly still in technical fields.

I thought I had my head set on something, but it was, funny enough, all predicated on having a well paid software job to fund the jump. I planned on starting this year, using community college along with statewide transfer programs to get started as quickly and as affordably as possible, but the layoff and current economic/financial situations rocked me, and I’m not sure I have the capability brains, or money to pull it off anymore.

The use of LLMs as a programming aid are another strong indication to me that I need to get out of this business.
Why? I've been employed in the industry since 2017 and I love Copilot and ChatGPT. They make everything more convenient, especially repetitive code, and suggest good new ideas sometimes. They've been a godsend for debugging, figuring out/generating command line options, setting things up like ftp servers with weird configs, etc. It's like we've gone from walking around on foot to figuring out horseback riding. I feel freshly inspired in my productivity since I've started using AI tools.
Not to mention, if you're able, you can paste in code to ChatGPT to give context and tell it to generate unit tests. I've found it does a generally good outline of code that annoys me to write, and then I can tweak the cases and add more as I need. Makes a chore I dislike much, much easier.
But writing my own unit tests and code outlines, as annoying as they are, make me a better programmer and let me produce better code. I can't tell you how many times the act of writing unit tests -- just writing them, not even running them -- has given me an important insight into the code that I would have missed otherwise.

Using tools to do these things for me means that my skills and abilities will suffer.

I make great use copilot for test cases now. I still think through what I'm trying to do and start writing it, but as I go along copilot will tend to write what I had in mind anyway and complete 20 lines of the likes of `assertEquals("overriden address 1", model.getAddress1());` before I can blink. I'll also often enough be caught offguard by some strange output and realize it's because I did something wrong, so I catch the problem much sooner.
Since 2017? You're still wet behind the ears!

It tells me I need to get out because it represents a shift to a higher level of abstraction in programming. In the ideal I hear expressed, instead of programming you'd be just describing the code you want and letting someone/thing else do it for you.

That's management, not programming. I want to program.

Understand that I'm not even saying there's anything wrong with that. It's just that it indicates that the things that I enjoy about being a programmer are the things that are being optimized away.

> It tells me I need to get out because it represents a shift to a higher level of abstraction in programming. In the ideal I hear expressed, instead of programming you'd be just describing the code you want and letting someone/thing else do it for you.

To me, LLMs are just "advanced" (read: statistical) codegen, unlike compilers and interpreters that are deterministic (should generate functionally equivalent code). But there's as much novelty there as there was when the C compiler or LISP repl was introduced.

> To me, LLMs are just "advanced" (read: statistical) codegen, unlike compilers and interpreters that are deterministic

That's fair, although I would disagree with the notion that compilers are code generators.

But using code generators is not something that is interesting to me even a little. They remove much of what interests me about programming. So your explanation -- while it makes sense and I wouldn't argue that you should feel any differently -- underlines that I need to get out of this industry.

I'm somewhat mixed. From what I've used, for relatively high level boilerplate code, the stuff I hate, it's okay with. For anything more complex, there are a lot of mistakes, and you still have to understand the technical and the domain to spot the mistakes. I think it will be all that much harder to become skilled as AI generated code becomes more common, because fewer relatively speaking, developers will be able to spot said errors and correct for them.

It's hard enough to keep up with PR reviews of a half dozen developers while doing my own work now. Hard to imagine that with 3-4x the output.

I feel similarly. I've loved computers and programming from an early age, and I was inspired by the stories of researchers like Dennis Ritchie, Ken Thompson, Marshall Kirk McKusick, Alan Kay, and others. However, after graduate school and after spending nearly a decade in industry, I discovered that the world today is very different from the world these researchers lived in during their heyday. There are no groups today that have the ethos of 1970s Xerox PARC or Bell Labs. There seems to be less room for long-term exploratory work; instead there's immense pressure to quickly deliver short-term results and produce deliverables such as papers and code. The trailer of the documentary "Message Not Understood: Profit and Loss in the Age of Computing" (https://messagenotunderstood.com) summarizes how I feel. I'm also disillusioned by the state of personal computing today and by the overt attempts by platform companies to squeeze their users as much as possible.

Even so, quite frankly I love computing and I don't want to leave it behind, even if I feel disillusioned about the tech industry. Some of my thoughts include becoming an independent researcher and also starting a non-profit software company that is devoted to improving the personal computing experience, but I have to figure out how to make a living while pursuing these ideas, and it seems that the cost of living is outpacing my ability to keep up (especially housing costs, which jumped over 30% since 2020 where I live).

> Even so, quite frankly I love computing and I don't want to leave it behind, even if I feel disillusioned about the tech industry.

The commentary here has allowed me to reach an interim decision (subject to change in the future as I ponder these things more deeply).

I am going to find another line of work. That way, rather than leaving it behind, I can make it a hobby again and do the sort of projects that improve my life.

Perhaps that way, I can honor and maintain my love of computing, and earn a living doing something else. I'm perfectly OK with taking a large pay cut if I can live a happier life in exchange for that.

I've been thinking about this, too, with teaching being my prime candidate. One of the downsides of leaving the tech industry is the reality of taking a massive pay cut at a time when the cost of living (especially housing) has been rising rapidly. As an aside as an American I feel very pessimistic about the state of the American economy and about the medium-term future of this country; it's getting harder for people to get ahead thanks to rising costs (especially housing, health care, and higher education), our politics has become extremely polarized, and the general mood is becoming more tense, as if we're one or two crises away from this nation completely falling apart. It seems that this nation's economy rewards rent seekers, and it's becoming harder for people to make a living through other means.
That's exactly what I have been thinking for a while now.

Thank you John, you gave me hope that I am not alone, that feels this way.

Where can I find the complete film? (https://messagenotunderstood.com)
The film hasn't been released yet. There is a 30-minute version that has been shown at various events, but the final version of the film won't be released until late 2023 or early 2024, as there are still some interviews the directors want to do.
I've been in the industry for 20 years.

For 23 years, every time a discussion like this the same answers come up:

- People aren't craftsmen like the used to be. (new gen is worse) - Young people learn faster. (youthful vigor has advantages) - The industry changes so fast. (tech is like that) - People are only in it for the money. (as always)

The older I get the more I feel like nothing actually changes besides the colors of our IDE.

I've been in the industry for nearly twice as long, and I agree that it was about 20 years ago that you started commonly hearing that sentiment.

But it wasn't a common one earlier than that.

Could it be because that 40 years ago there wasn’t an industry in the sense that we have now to have those sentiments about?

Seems like the folks around in the 80’s were standing on the shoulders of the original researchers who pioneered the whole shebang, there was no “old blood” to really complain.

The industry was certainly immature, but it had absolutely existed for a while (you could argue since the '60s, although I've heard good arguments to place its start in the '50s).

When I entered it, there were already graybeards, and I was the young whippersnapper.

Newb feelings: stuff is changing really fast and hopefully it's good! Old people who don't even know anything about programming are running everything and refuse to retire and let us get on with actually doing stuff.

Young dudes are way more respectful of other engineers' actual skill, and less likely to ask female coworkers on dates or do other weird things that drive them away. My mom has actually seen a few younger guys step up and defend her after like forty years of handling these dickbrains on her own. The social side of things, at least in most companies we've seen, has become moderately better for everyone who isn't at work to get a date.

Wait...

> Old people who don't even know anything about programming are running everything and refuse to retire and let us get on with actually doing stuff.

and

> Young dudes are way more respectful of other engineers' actual skill

Directly contradict each other. Those "old people" you're insulting probably know more than you think. I'll admit that I'm biased, being a graybeard myself, but I don't know of any engineers my age that are still working who don't have a modern skillset.

The old dudes in the first quote appear to be managers and non-techies, when the latter quote explicitly mentions engineers.
Ah, my mistake. I'm a bit touchy about age-related comments because it's become so incredibly common for young devs to assume that older devs have old, out of date skills. So I flinched.

That's another thing that makes me think I need to get out of this industry.

I get it, getting closer to 50 myself. I've seen plenty of older devs that try to coast it in at the end. I never had any intention of ever retiring, so I just keep learning. Still spend 10-15 hours a week reading on things. I don't always have the motivation to actually experiment on non-work projects as much though.
Oh sorry, I don't mean old engineers who actually keep up with tech. There are plenty of people who are young and don't care about improving their skills, and plenty of old people who are smarter than everyone else. I think part of it is also that my awareness of this is from big companies that do military contract type stuff, and there's a lot of people who have just been around forever and climbed the corporate ladder with things other than engineering skills who are not good at communicating with engineers. Though I guess this is now a selection bias because in twenty years maybe the zoomers will be in charge and do the same thing :P
Wonderful. After doing it for 15 years I finally feel like I am becoming good at it. There are so many amazing tools, services, and resources out there to take advantage of.
hate the profession, but the money/benefits are good ... on most days, i'd rather be digging holes or raking leaves. a good day is no, or limited meetings, as little facetime as possible with sociopathic middle management and career ladder climbers, and an absence of non-work related conversation (i am so sick of managers leading team meetings with fluff about what everyone did over the weekend or ice breakers/strange trivia).
It's complicated... again. I've been at this for close to 3 decades now. When I started, there was so much to learn and understand. Then as I learned and understood, I had a better footing and knew there was more still. From the mid 90's through now, it's continued to get complicated and there's still more to learn.

All said, some things are easier. There will be restarts/reboots/refactors/refreshes and new tooling that makes the old tooling easier to live with. Docker made LXC better... Rust makes WASM easier (and so much more).

I do think that too many places have jumped too many sharks along the way. You don't always need kubernetes and five 9's of up time. You also don't always want to break every minute action into a separate lambda/function. I feel so much for the gray beards from when I was in my 20's. Keep it as simple as you can. If you must add complexity, make sure you wrap it in such a way that makes everything else simpler. Don't create a large application for what you can do with a small script. Automate anything you have to touch more than a couple times.

There will be times where you are slogging, and times where it is easy. You will work with brilliant people and certifiable idiots along the way. Such is life.

If you are passionate about the work, and love to constantly learn. You'll be okay. If you aren't, then find that balance in life, and do what you need to in order to keep up.

I've been a programmer since the 1980s. I feel that the peak of the field was somewhere between 1995 and 2000. We had Windows 95/98, the Internet, and all programs were local applications run on a desktop, that people had gotten very productive on.

The existence of Visual Basic and VBA support in the Microsoft Office Suite made it possible, and even practical, for most domain experts to build usable applications that allowed everyone to get their jobs done. If there were performance problems, or it needed to be made more reliable, professional programmers would be brought in to rebuild things in a more properly designed manner.... it was at this point that we almost shifted to being actual Software Engineers, and professionalized.

Since then VB was cast into the pyre as a sacrifice to the very unnecessary migration to .Net, and the bloat that ensued as desktop programming lost a decade of productivity, people decided to just shove everything onto the web.

It was only as this was starting to happen that Steve Jobs further crippled programming by introducing the iPhone, and suddenly GUI applications were expected to work on tiny screens (in either orientation) without proper input hardware like 3 button mice and keyboards, connected across a slow and unreliable network connection.

Needless to say, the last 2 decades have been a total loss as far as programmer productivity goes, with one shining exception.... GIT. Git has its flaws, mostly arising when people don't realize it's a set of snapshots that fake storing deltas, and not the other way around.

GIT/GitHub, et al... are fantastic. The ability to just keep multiple machines up to sync without hassle in seconds is sooooo good. I used to keep stacks of floppy disks with ZIP files of source code, all manually managed.

In the future, we need to recover to the point where you can drag/drop GUI elements and have them work anywhere, like we were with VB/Delphi/Hypercard.

When we get there, we'll let users build basic applications, and we can finally professionalize and apply actual engineering practices to the art of programming.

Until then, please stop calling it engineering. We don't put in anywhere near the effort that Margaret Hamilton (the first actual Software Engineer) and crew did, in safely getting men to the moon. We're programmers, not Engineers. As Uncle Bob said, we don't profess anything. We certainly don't use engineering practices as described by The Engineer Guy.

---

Example: You can plug a lamp into an outlet, and in the US, it can draw up to 15 amperes, and under almost all circumstances, you can't damage the wiring in the house via a fault in the load.

We have no equivalent in software. Chroot, sandboxes, etc... are far too unsafe. We have no standard way of letting the user choose resources to give to applications at run time.

The worst part is, most people don't even see the deficiency. Imagine the current power grid with no fuses or circuit breakers.... the first wiring mistake would crash civilization.

We can do better, we must do better.

Given all the advancements in the field of AI, I want to program more. Go more for low level programming. Talk to the hardware
(comment deleted)
I'm getting bored with web development. It feels like so much of my job is just accounting for the shortcomings of the frameworks we use, and we chose our frameworks so that our bootcamp grads can write javascript on the backend and don't have to learn java or C# or something which would make our backends a lot easier to work with.

I do DirectX Graphics and native programming for fun on the side, but it doesn't seem like there's any good money in it. I look up DirectX jobs but a lot of them are AI using GPU pipelines, and AI is really uninteresting to me