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.
@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!