I don’t disagree, nor do I have any solution but man, 1-2 years is a LONG time when you start a new gig and can tell within 1-2 weeks that it’s not a good fit.
I’m trying to pivot my career from web/business app dev entirely into embedded, despite the steep learning curve, many new frameworks and tool chains, because I now have a full-time infinitely patient tutor, and I dare say it’s off to a pretty good start so far.
If you want to get into embedded you’d be better suited learning how to use an o-scope, a meter, and asm/c. If you’re using any sort of hardware that isn’t “mainstream” you’ll be pretty bummed at the results from an LLM.
Why not both? An LLM as a tutor, for the o-scope, meter, and assembly is pretty good at getting you unstuck. It doesn't have to do everything for you. It can do the parts you're not interested in and you can focus on the parts that are interesting to you.
I asked an LLM (google search LLM result) how to install steam on Rocky 9 without flatpak this evening, and it completely fucked it up. The correct answer were 3 dnf commands I found on reddit.
I don't know if I'd trust an LLM to teach an o-scope.
I got into embedded 10 years ago, there really is something about driving hardware directly that is just so rewarding.
For AI I've been using Cecli which is cli and can actually run the compile step then fix any errors it finds - in addition to using Context7 MCP for syntax.
Not quite 10x yet but productivity has improved for me many times over. It's just how you use the tools available
Steve Martin said that after 60 years of playing, he considered himself to be a pretty good banjo player. But then he saw Eric Clapton play guitar and thought “This guy’s not funny at all!”
Yeah I've worked at enough places that could generate vastly more software feature ideas than they could ever implement, to find the "justify your own existence"-type places utterly insufferable. And I absolutely refuse to suffer them and everyone else should too.
I've never really figured out a test to tell if the company is going to fall into that category without actually working at the company.
It's not as simple as "BigCo" vs startup; I've worked at startups where layoffs were frequent enough that it devolved into existence justification, and I've worked at BigCos that actually did give a fair bit of leeway in how you do things (within some degree of reason).
The closest thing to a "rule" that I've come to is if they use a less-mainstream language; if they're routinely using Haskell or something, they're probably a bit more onboard with experimentation, but that's still not a hard and fast rule.
Genuinely not the guy's real name, but let's say that this manager's name was "Steven".
When I said that the job boiled down to a lot of people trying to justify their existence, Steven said "do you really think that people are doing things to justify their existence in the company, Tom? Really?"
I responded back with "Yes. I think some managers, STEVEN, really like to schedule meetings to make it look like they're doing important work, STEVEN, despite the fact that most of these meetings are useless and could have been handled over slack STEVEN. I don't want to name names STEVEN, but I have observed it on the management side. I suppose you'll need to figure out who I am talking about STEVEN".
This was several years ago so I'm paraphrasing, but barely. I really disliked that job and when he wouldn't just let me answer with "it wasn't a good fit" I got (maybe irrationally) angry and it ended up being an excuse to air all my grievances. I could tell that he was getting upset when I started basically resorting to thinly-veiled insults. Not my proudest moment, to be 100% honest, but I also can't really say that I'm sorry either because I meant everything I said.
As an outsider of Big co's. I always felt that if youre not on one of the 10-20 awesome product teams. Eg, Google maps, aws lambda, windows core os. Something along those lines. It seems like a territory for justification Olympics.
Just my view as a dev who's largest co was like 500 people. ~100 engineers.
Big companies are significantly better to work in when you're either (a) in sales with a clear path to hitting/exceeding quota, (b) a strategic revenue generator, or (c) a super hot and extremely well funded corporate initiative (basically all AI projects right now).
The money tap is always on, you get all the cool toys, travel perks are great, and you get to work on amazing stuff without as much red tape.
Yeah, I was working on more of an infra thing (involving caching and indexing). Certainly important given the size of the company, but not something that gets lots of hype or sexiness.
There were occasional bits of ambition to occasionally work on interesting stuff, but it was mostly a “keep the lights on and then figure out how to make yourself seem important”.
One of my biggest pet peeves is when engineers say that we can’t do something because we would have to learn something new. I got into several arguments because I wanted to rewrite some buggy mutex-heavy code (that kept getting me paged in the middle of the night) with ZeroMQ, and people acted like learning it was some insurmountable challenge. My response would usually be something to the effect of “I’m sorry, I was under the impression that we were engineers, and that we had the ability to learn new things”.
As I said, complaints about my attitude weren’t completely unfounded, but it’s just immensely frustrating for people using their unwillingness to learn new things as an excuse to keep some code in a broken state.
You're complaining about resume driven development in the same thread you're upset they wouldn't let you rewrite everything in ZeroMQ? That is a very inconsistent position, and reflects extreme confirmation bias, and by itself justifies that you may need to look in the mirror.
I didn’t want to rewrite everything in ZeroMQ. I wanted to rewrite one 2000 line service with ZeroMQ because the service was already broken and I was the only person who was dealing with the consequences because I was the only person who got paged for that particular service.
Usually I advocated for doing things a more boring way, and I certainly don’t agree with making every damn thing an “initiative”, which was my biggest issue at BigCo.
I don’t think it’s inconsistent. I wanted to use the right tool for the right job. Usually I can get by with Java’s built in tooling, and that was my initial attempt at a rewrite, but I ended up trying to re-invent a bunch of concurrency patterns with BlockingQueue and I found that literally everything I was spending a lot of (my own free) time was handled in like four lines of ZeroMQ.
I have a single line on my resume for ZeroMQ as a keyword, despite having used it in many, many projects, so it certainly wasn’t using explicitly to pad my resume.
If @tombert worked for me at BigCo, I'd give them a big raise for doing the exact right thing. This is Employee of the Year performance.
@tombert recognized that the homegrown tech was awful (*) and proposed a mature, reliable, well documented and supported, low-cost, utterly mainstream and mature replacement. That's not resume packing, that's pragmatic, rational software design.
@tombert also knows that every tech professional must routinely learn new things, otherwise they'll be unemployable dinosaurs long before retirement age. Tech dinosaurs aren't a pretty thing in the workplace.
(*) Especially awful because these are mutex and concurrency bugs, and @tombert knew that nondeterministic bugs cost expensive resources to investigate, find, and fix, simply because these bugs are unreproducible. Unlike straightforward deterministic bugs, concurrency bugs are open-ended tar pits that managers and engineers despise. These kind of bugs can eat up a project's schedule and energy.
edited: formatting bug. Fortunately it was reproducible!
I mean, obviously I agree with my own perspective :), but I do kind of understand the pushback to a certain extent.
Of course there are an effectively infinite number of potential routes you can go down with software, and of course you can't learn all of them, and you can't import every single helper library you'd like to.
We all like to think that the way we want to do things is objectively the best way, and I do think that there are objectively better ways of doing some things involving concurrency and the like, but a lot of the time it is subjective.
But as you said, I wasn't trying to import a library that was the latest hype on Hacker News; it's ZeroMQ. It's fast, well documented, easy to use, and very mature software with very good libraries in every major programming language, and it implements nearly every concurrency pattern that you'd want to use for most projects, and importantly it implements them correctly, which can be harder to do than it sounds.
As I said, I did have an attitude problem at that point in my career. I can blame it on a lot of stuff (untreated sleep apnea being a big one, as I later discovered), but I will admit I probably could have and should have been a bit more diplomatic in how I proposed these things.
I didn't really blame the person who wrote the code for it breaking (who had since left the company), because writing correct concurrent software is hard, I'm sure he had a reason at the time for doing it the way that he did, and of course all non-trivial software has bugs. What bothered me is that I had been designated at the sole person to deal with these issues, so I was the only person who had to deal with the consequences with these actions. The code hadn't been touched by anyone in years outside of adding basic NPE checks, and so I felt like people should let me try and fix it in a way that I thought would be less error-prone, and if it breaks I'd be the one forced to fix it anyway, and I could feature flag the hell out of it in case my code didn't work.
> it implements nearly every concurrency pattern that you'd want to use for most projects, and importantly it implements them correctly, which can be harder to do than it sounds.
This is key. Writing nontrivial and bug-free concurrent code is extremely hard, it's like writing absolutely solid crypto code. Both look easy, both are incredibly hard and anyone who doesn't know that, shouldn't be writing code at those layers.
Recommending a proven, off-the-shelf concurrency technology is the mark of an experienced and thoughtful software architect.
I think i found something even better. I'm just adjacent to the big money maker. We keep folks on the page a little longer but don't need to concern ourselves with revenue and ads. Just make it good so folks stick around but important enough that we won't get axed.
> Big companies are significantly better to work in when you're either (...)
You're basically stating that people who are hired to staff projects that are superfluous secondary moonshots are more likely to be fired than those who maintain core business areas. That's stating the obvious. When a company goes through spending cuts, the first things to go are the money sinks and fluff projects that are not in any key roadmap. This is also why some companies structure their whole orgs around specific projects and even project features, because management limits the impact of getting rid of entire teams by framing that as killing projects or delays in roadmap.
reply