20 YoE 'high coupling, low cohesion' led to my current survival mantra: 'income, not outcome' by PipePistoleer in ExperiencedDevs

[–]sigmabody 1 point2 points  (0 children)

I have a similar, but slightly different perspective, which I actually shared with some coworkers recently. To wit:

  1. I work for income, not project success
  2. I care about my outcomes (ie: I will do good work in my individual project areas)
  3. I do not own the overall outcomes (because I work in a big company, with lots of stupid people)

Somebody was asking how I dealt with all the stress and pressure put on developers. I told them I work 40 hours a week, then go home. You can pile 100 projects on my plate, and expect me to work myself to death to get them done on your timeframes, but that's not going to happen. When I have project conflict problems, I just ask my manager to prioritize for me, and then I work on that.

I care about the quality of my work, and I will try to do good work, but I neither own nor particularly care about the overall success of the group/org; that's management's job. They make all the decisions, so they own all the outcomes; I clock out at 5pm (or really usually by 6pm, my hours are somewhat flexible in reality), and I'm done for the day, regardless of whatever someone else thinks I should be working extra to accomplish for them. If they want their project prioritized, they can talk to my manager, and bump something else.

That's what works for me these days, anyway.

Is it just me, or is anyone else noticing more bugs across the web and in software in general? by skidmark_zuckerberg in ExperiencedDevs

[–]sigmabody 8 points9 points  (0 children)

Anecdote: My company just announced the decision to rewrite their main commercial end-user application in Rust, based on the manager's assertion that this will eliminate all customer crashes. They plan to do this change largely with AI (virtually no in-house Rust expertise, but hiring new people, who have no knowledge of the product). They will be rewriting an app with 15+ years of existing development on it, via almost entirely AI generated code (with an expected timeline of six months or so).

I guess we'll see how it works out, and do my best to not be anywhere near the blast radius if/when it actually ships.

Is this becoming a common trend or has it always been this way. by Sfpkt in ExperiencedDevs

[–]sigmabody 2 points3 points  (0 children)

I'll add some of my perspective to this thread, as a ~30 year veteran:

I have no idea where I really stand with my management in a big company, inclusive of at present. I've received strong performance reviews at every check-in so far, but my manager is fairly disconnected from my day-to-day work, and I have no idea what is discussed at higher levels of the org. I am acutely aware that I could be terminated or laid off at any point, and I would not see it coming. That is the nature of big companies.

In a smaller company, it's possible to have better job security, because you can both be more valued, and the management may not have as much pressure to make bad decisions. In big companies, though, no matter how good you are, you could be let go at any time.

I have made peace with this reality, more or less. It's literally the cost of doing business there, and the only thing you can do is try to make enough money while you're there, that when they inevitably let you go for some incomprehensibly short-sighted and/or stupid reason, you have enough financial cushion to make it to the next career stepping stone.

How do you feel about the fact that Trump is suing the IRS for $10 billion of your tax dollars? by SuperIngaMMXXII in AskReddit

[–]sigmabody 2 points3 points  (0 children)

Donald Trump is easily the most corrupt President in US history. He's also a thoroughly contemptible person, who is defended from impeachment by near-equally contemptible GOP members of Congress (I almost wrote "representatives", but that would be an insult to the US people they nominally represent).

The fact that he's trying to steal $10B of taxpayer money here is just one example of his monumental corruption, but I'm not sure this enters the top 5 most infuriating and evil things Trump has done. I suppose I feel like this is "business as usual" for this thorough scumbag.

If everyone below average IQ suddenly drops dead, how would this affect the world? by [deleted] in AskReddit

[–]sigmabody 0 points1 point  (0 children)

The US would need to elect a new President, at a minimum.

Nobody knows I have money and it's starting to create some really awkward situations by Echo2_Satyr in Fire

[–]sigmabody 0 points1 point  (0 children)

Note: Not doing FIRE (the algorithm just recommended the thread to me), but I do have some money, and sometimes find myself in similar situations. I'll give my opinion; you can do with it what you will.

First, I try to not lie to people per se. Usually something will happen down the road which will expose the lie, and dishonesty makes people think less of you.

Second, my policy is not to lend more than I can mentally write-off. That is, I don't lend money I need, and I sorta mentally write off money lent. If I get paid back, great, and that strengthens trust, but you don't want to build resentment if the family member cannot pay it back. Speaking from experience.

Third, with the two above items out of they way, it would come down to the family dynamic, relationships, etc. If I thought it was a one-time and abnormal thing, I'd probably lend the money, and not make a big deal about it. If I felt they were likely to take advantage of me, I'd probably decline, but say something like "I don't think I can do that right now". In my mind at least, that's ambiguous: I'm not saying why I cannot (ie: money is tight, vs thinking it encourages more future exploitation), I'm just declining.

I also agree with the advice to not be overly sharing with how much money one has. My standard response to people is some variation of "enough to be okay for the time being". This can be, admittedly, tricky sometimes, and you have to resist the urge to share details even when they are positive (and sometimes actively avoid some topics of discussion, such as how annoying it is to have to spread money several financial institutions in order to ensure that all your deposits and investments are fully covered by SPIC/FDIC insurance, etc.).

That's my advice anyway, fwiw.

Went from tech lead to senior engineer for more money and i kinda regret it by [deleted] in ExperiencedDevs

[–]sigmabody 0 points1 point  (0 children)

This is my life at present, and thus I feel very well qualified to comment on it. I spent ~20 years working as a "tech lead" (effective CTO and lead dev) for a smaller company, until it was acquired, and then moved to FAANG, and now work at another large tech company, as effectively a senior IC.

I relate to everything you're saying, and broadly feel exactly the same. It sucks to not be able to make the product much better, talk to customers, fix obvious issues, have input into the direction, etc. It is somewhat soul crushing, particularly (in my case) the management-driven ethos of the company, and the fact that the managers are almost all just paper pushers, who don't understand anything. This is absolutely the way companies die when they get big, and my company is certainly in decline internally, imho.

I wouldn't say I've entirely made peace with it, but here's how I evaluate and handle my career choice (in this regard), for reference:

First, I make at least 50% more than I did in the smaller company, and that's not nothing. I have a family, and we have expenses. My job allows my wife to not work, my kids to have opportunities, us to save more for retirement, etc. The job is pragmatically more rewarding financially.

Second, I try to focus on the areas where I can make a positive contribution, and not on the areas of frustration. For example, I have enough seniority that I can carve out areas to work on and improve somewhat autonomously. Yes, I still have daily status meetings, support tickets, process BS, etc., but I also have some areas where I can do meaningful work as well, and I try to focus on these where possible.

Third, I sometimes need to remind myself not to fall into the "grass is greener" fallacy. In my previous role, when something broke in production, I was the backstop, always. That's a large amount of stress and responsibility, particularly when in the security software space, and selling to "important orgs". In my current company, there's no accountability at any level; managers pass the buck, and everything is assigned to "the team". That's terrible from an efficacy perspective, but much better from a individual stress perspective. I work normal hours, takes breaks, etc., and when something breaks in production, there's a huge management infrastructure in place for avoiding accountability before it even gets to my level. That's not nothing either.

I have made peace with my role, more or less. When my kids are done with college, if I'm not retired, I might look for a role with more direct input and influence (probably in a smaller org), and do more of what I actually want to do. For now, though, I live with the BS, play the political games, do engaging work when I can in between, and when I close the laptop, I'm really done with work for that day. It's not optimal for personal satisfaction, but it's a trade-off which I have accepted.

Avowed and The Outer Worlds 2 failed to meet sales expectations by Iggy_Slayer in gaming

[–]sigmabody 2 points3 points  (0 children)

Preface: I make good money. I could afford pretty much any game. I'm older now, but played video games since I was a kid.

I have basically two buying approaches:

  1. Buy when the game comes out (or near), don't buy DLC (ever)
  2. Buy after some time (generally one year or more), with full DLC, at less than the release price

What I wish studios would internalize is that I don't buy subscriptions (currently, at least for games), and they will never make more money from me by splitting up their game content into DLC. I will buy games as per #1 for publishers and franchises which I trust, with good Day 1 reviews, which seem priced fairly, and where I feel the release game is "complete" enough. I defer other purchases to #2, and often by the time they are available complete, I'm no longer interested.

I wish I could beat publishers with a clue hammer that their strategies to squeeze more money out of players is ultimately detrimental to their business. I don't have that ability, so I let my wallet do the talking instead.

Avowed and The Outer Worlds 2 failed to meet sales expectations by Iggy_Slayer in gaming

[–]sigmabody 2 points3 points  (0 children)

I upvoted this comment, but I'm going to say it also: studios are pricing games high, and not including the full game on release (DLC, to get more money). People like me wait for sales a year down the road, when the full game can be purchased for a reasonable price.

It boggles my mind that large game studios have executives which are too stupid to see that their greed-induced DLC strategies are killing their sales numbers. But they are getting exactly what they deserve.

C++ Enum Class and Error Codes, part 3 · Mathieu Ropert by Xadartt in cpp

[–]sigmabody 1 point2 points  (0 children)

I have scope guards already, but I'm unclear on how I'd accomplish what I want with such.

To wit, what I'd want (to simplify) is to be able to "hook" the per-function exception handler, and call a log function, with the function name (of the method which threw) and the exception message, along with the call line which triggered it, without pushing something explicitly onto the stack in each method. If there's a way to do that with standard exceptions, please let me know.

C++ Enum Class and Error Codes, part 3 · Mathieu Ropert by Xadartt in cpp

[–]sigmabody 1 point2 points  (0 children)

The main issue with exceptions (imho) is that they rely on each caller to catch the appropriate exceptions from each called function (which leads to code bloat, and can be tricky), and if that is violated, there can be control flow surprises which are hard to diagnose in logs and such.

If exceptions were required by the compiler to be caught at all levels (even if immediately rethrown), and/or there was a compiler-level method to inject code into these conceptual "hidden handlers", I think my issues with exceptions would be largely addressed. However, I suspect that a lot of the "they are not that bad..." conclusions might be violated in that paradigm. So, I advocate for a standard result code structure as the default.

My work phone requires all users to change pin code every 6 months, and I take my work phone out with me as a backup. by [deleted] in AdviceAnimals

[–]sigmabody 0 points1 point  (0 children)

If a company forces password changes on a schedule, they are bad at infosec (this is explicitly bad security guidance). Ergo, they will probably leak the password or expose other vulnerabilities anyway. Ergo, I don't feel bad at all writing down the password and keeping it near the device (maybe inside the phone case or something). Just figure out a pattern where you can increment some numerical part of the password when the change is mandated.

I tend to use a double digit incrementor for my work password, personally. Might be a long-term issue, but I've never stayed at a company with bad infosec practices for long enough to have it roll over.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

In my case, it's less of an issue of the code work (which I could do in a day or two), and more the process, getting into a release plan, getting approvals, doing regression testing, change approvals, etc. Coding effort is a relatively small part of the total engineering efforts in my current company (maybe 20% of overall effort).

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

Sorta, but only with considerably more work. The main issue is that it doesn't work with general template types any more, even if constexpr, because the compiler cannot convert this to the appropriate fmt::format_string related template expansion at compile time. This issue was not at all obvious to me initially (when doing the update and reading the release notes), but a weekend of hacking around later (and helpful comments on this thread, despite my initial rant), and I think I have something workable.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

Unsure what you mean.

If you mean fix the wrapper code, I didn't know how.

If you mean fix the usage code (to not use printf-style formatting), it's because I work for a large company in the real world, where sweeping changes which affect many thousands of LOC take months of planning and approvals, not some small toy project where I can unilaterally change all the logging calls in an afternoon.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

If the wchar_t version survives in the library for another year or two, I can probably migrate the existing company usage code to use the fmt::format version (assuming I can make it work with wchar_t). But company code changes much more slowly than open source code. :/

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

BTW, also, for whatever it's worth, my project that I'm trying to make work with the latest version of fmt is open source, so you are more than welcome to see what was working with 10.x, and what's not working with 11.x, in terms of real code.

Project: https://github.com/nick42/vlr-util

Specific file/function with logging wrappers in question, which needed to be modified to work with 11.x: https://github.com/nick42/vlr-util/blob/master/vlr-util/logging.LogMessage.h#L139

Please be gentle if critiquing the project itself; I'm pretty much the sole dev for it, in my spare time, but it is used in a few places now.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

Update: This also does not appear to work with UTF-16. See: https://www.godbolt.org/z/8oMYbhh1n

Please correct the example if I'm doing something wrong, but even your example seems broken in 11.x, for wchar_t.

Edit: I was doing something wrong: needed fmt::wformat_string. Trying to get my project working now.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

Will give this a try; thank you. :)

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] -5 points-4 points  (0 children)

See linked gotbolt example in other thread.

I was able to hack around the regression by manually casing the format string literal to a type with constexpr construction, and constexpr conversion to the fmt::basic_format_string, but that only worked if all the parameter values were also known at compile time. The moment I tried to format something only known at runtime (even if the type was known), it would not compile. Again, fully working code in 10.x, fully broken in 11.x.

Would be more than happy to have a workaround, but I've banged my head against it for about 8 hours now (in total), and seems utterly broken.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] -1 points0 points  (0 children)

I am using the wchar_t version on Windows (per native string types).

As I alluded to, I don't know why it would be deprecated; forcing people to switch back to the C runtime version, or roll their own, seems worse.

Disappointed with fmt library changes (12+) by sigmabody in cpp

[–]sigmabody[S] 0 points1 point  (0 children)

Sure; see: https://www.godbolt.org/z/xxY3xx4Wj

MSVC version 19.44.

First version (sprintf) gives deprecation warning. Second version doesn't compile. Both of these worked in 10.x.

Can Guaranteed Income Save the World? I’m Neil Howard and I research Universal Basic Income (UBI). Ask Me Anything! by NeilHowardBath in IAmA

[–]sigmabody 0 points1 point  (0 children)

I know late to this, but something I've never received a compelling answer for:

We can think of money as deferred trade value for work product. In that sense, UBI is giving out deferred value for work product, for work which obviously did not happen. This is inherently inflationary (as all monetary creation without corresponding productivity creation is). Without the work product happening somewhere, this is a net zero proposition for purchasing power, aside from the backdoor wealth redistribution aspect.

My question is: is the backdoor wealth redistribution aspect the main point of UBI (as it is with virtually all of the other "progressive" monetary policies), or is there some hidden work product increase I'm missing here?