HNHacker News
TopNewBestAskShowJobs

cstrahan

1,132 karma · joined January 10, 2012

Charles Strahan cstrahan.com

Software Developer in Washington, DC

[ my public key: https://keybase.io/cstrahan; my proof: https://keybase.io/cstrahan/sigs/yV0wzDolQldJ9GSMuflLE9_PIggrsCf9jzIQPUHqzKE ]

submissionscomments
cstrahan··on Korea fines Twitch $327k for suspending service
You should go reread the conversation as your response indicates that you misunderstand the person you are replying to, suggesting that you didn't follow the thread very closely.

Summarizing the salient bits here:

>>>> Those penalties don't always have exemptions for stopping service. In fact it might have the opposite to avoid trying to put political pressure by doing that.

>>>> Doesn't mean it is a regulated industry which is actually a very narrow term.

>>> What is a regulated industry? I'm not aware of it as a legal term. Basically all industries are regulated in my understanding to a greater or lesser degree. Even in a lesser one, you can run up against those regs

>> [insert blurb about concrete instances of "regulated industries", where an intensional definition was clearly desired instead (not an incomplete, extensional definition)]

> Not a very operational definition. You can't start a hot dog stand without permission either.

So, from the top: some industries are regulated. But, oh, not all industries which are subject to regulation are what we would call "regulated industries" -- that's "a very narrow term."

Great! What exactly is the definition of that very narrow term?

The immediate response to that inquiry was several supposed examples of "regulated industries".

But that's not a satisfactory response, because it doesn't generalize. For instance, a hot dog stand is subject to regulation ("you can't start a hot dog stand without permission either") -- but is it a so called "regulated industry" (which, remember, "is actually a very narrow term")?

And then we have your response:

> That’s because restaurants are, believe it or not, also a regulated industry.

The sarcasm is cheeky, but it still doesn't provide a meaningful answer to the original question: if not all industries which are regulated are "regulated industries", then what exactly does "regulated industry" mean?

So, a couple questions for you:

1) How do you know that restaurants fit the original commentator's definition of "regulated industry"? Were you told that restaurants are among the set of "regulated industries", which you've accepted without understanding why?

2) If you actually do know what makes restaurants a "regulated industry" (not merely just regulated), why not share the definition?

3) Alternatively, could it be that neither of the first two question apply: you made your comment without first comprehending the conversation?

cstrahan··on Atuin – Magical shell history
"I have a one-liner zsh function that does the same thing"

I think you mean "I have a one-liner zsh function that does a tiny subset". It's lacking:

- The ability to filter by current directory

- The ability to filter by current shell session, instead of across all shell sessions (that's assuming you use zsh's shared_history; if not, then the opposite is true: you can only search within the current shell session. See https://zsh.sourceforge.io/Doc/Release/Options.html#index-SH...)

- Search history across hosts

Until recently, I used zsh+fzf, with the default ctrl+r binding replacement provided by fzf. It's been great, but it has lacked functionality that I've wanted for a while now. Atuin fills in these gaps for me.

cstrahan··on Atuin – Magical shell history
As I commented elsewhere, you can:

- Filter by commands run within the current shell session

- Filter by commands run within the current working directory

- Filter by commands run across hosts (as opposed to filtering commands run on your local machine)

- Filter by commands run within the current shell session

- All of the above searching functionality, with nice fuzzy finding support, time stamps, etc.

Before atuin I used zsh's builtin history, with ctrl+r rebound to present that builtin history through the `fzf` fuzzy finding tool, and zsh configured to share history across shells. The deficiencies I found: I couldn't optionally filter by commands _only_ run in the current shell, I couldn't filter by commands run in the current directory (useful for quickly finding commands I often need to re-run for a given project), and I can't search for commands run across hosts.

If you don't find yourself valuing these things, you may find that you have little to gain from using atuin.

cstrahan··on Atuin – Magical shell history
I've recently switched from zsh's built-in history + fzf, so perhaps I can answer.

First, a bit more about my zsh+fzf use: I use `share_history` so that my history is available across shells, allowing me to quickly find and re-run commands. (https://zsh.sourceforge.io/Doc/Release/Options.html#index-SH...)

Sometimes I want to switch back to some terminal tab/window and find a command that I nkow I ran in that session, but now it's flooded with 1000+ commands that I've entered elsewhere, making it difficult to find what I'm looking for. So the shared history is both useful and a hindrance, depending on the scenario.

Compare with atuin: I can filter by commands entered specifically within the current shell, or across all shell sessions, and possibly even across other hosts (when using atuin's sync functionality -- haven't tried that yet).

Given the metadata that atuin collects (current working directory, start time, exit status, duration, etc) I'm sure there are some other clever things that can be done with my shell history now, vs the the "line per entry, with optional start timestamp" approach used by zsh's builtin history functionality. Actually, more on that first point: you can also filter by commands entered within the current directory.

cstrahan··on Pkl, a Programming Language for Configuration
Kubernetes config is a decent example. I had ChatGPT generate a representative silly example -- the content doesn't matter so much as the structure:

https://gist.github.com/cstrahan/528b00cd5c3a22e3d8f057bb1a7...

Now consider 100s (if not 1000s) of such files.

I haven't given Pkl an in depth look yet, but I can say that the Industry Standard™ of "simple YAML" + string substitution (with delicate, error prone indentation -- since YAML is indentation sensitive) is easily beat by any of:

- https://jsonnet.org/

- https://nickel-lang.org/

- https://nixos.org/manual/nix/stable/language/index.html

- https://dhall-lang.org/

- (insert many more here, probably including Pkl)

cstrahan··on Zed, a collaborative code editor, is now open source
Helix is another interesting option:

https://helix-editor.com/

cstrahan··on Chronic inflammation may be a "disease of affluence"
Is that true for unprocessed meats like steak, too? Stats predominantly reflecting a diet consisting of pizza, sandwiches, burgers (chased down with soda and/or beer) are irrelevant, if we’re talking about carnivore.
cstrahan··on What's something difficult programmers make look easy?
Unless you're Rockstar North:

https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times...

https://news.ycombinator.com/item?id=26296339

cstrahan··on Slashing data transfer costs in AWS
I hear you.

> We disagree on the definition of "prove". I would not object to the claim if it had used "determine" or "detect" instead of "prove".

I do find that a bit odd, though. If I consult the Merriam Webster dictionary, I see precisely one entry under "prove" that says anything related to law and/or courts:

> to establish the existence, truth, or validity of (as by evidence or logic)

> "prove a theorem"

> "the charges were never proved in court"

Even there, the only mentioning of court is in the example sentence, rather than the definition itself -- naturally, we want our court system to be based in reasoning rather than whim.

Additionally, the meaning of "prove" given by this definition is exactly what the study of formal logic sets out to codify, and given that this is hacker news (where many are interested/involved in computer science and/or formal logic itself), it seems counterproductive to ascribe some legal meaning to the word "prove" here, as it would (to my mind, at least) be quite unlikely for others to do so.

cstrahan··on Slashing data transfer costs in AWS
> In this case they are actually losing money not gaining by allowing this kind of abuse, both because the bandwidth usage costs money and also because of potential lost billing from other services which now is not billed.

Your statement here is absolutely correct (we are in agreement); it is also absolutely orthogonal to what I (and others) have said.

Let me use an analogy.

Marijuana is illegal in most states of the US (and, federally, it is still a controlled substance). And yet a (relatively) recent survey[1] showed that around 7% of respondents grew marijuana at home.

How is this possible? Shouldn't that be 0%? It's almost like the DEA is slacking off or something.

... or maybe it's because they can't practicably round up each and every one these people: the DEA isn't omniscient, and given the 4th amendment they can't ransack every home within the US to catch these people. If you don't do something that gives them sufficient evidence to acquire a search warrant, there's nothing they can do about you growing pot in your domicile.

Back to Amazon. Could you, at a high level, describe a process by which they could, for a given account, determine if that account's use of LightSail is legitimate, or is instead intended to avoid incurring data fees from other services? And you must satisfy some additional, absolutely crucial qualifications: this process must not negatively impact abiding users (because they would abandon AWS, resulting in financial harm to AWS), the cost to AWS of executing this process must not be prohibitive (in terms of compute, human resources, etc), and the process must be applied across all accounts within a reasonable time frame (if it takes 1 year for AWS to comb through 1% of accounts, that means you have a mere 1/100 odds of having your service terminated for abusing LightSail for an entire year).

Something being prohibited doesn't imply that it is practicably, fully enforceable.

[1]: https://pubmed.ncbi.nlm.nih.gov/36288408/

cstrahan··on Htmx changes license to Zero-Clause BSD
Does this proverb sound familiar?

"Fool me once, shame on you; fool me twice, shame on me."

Maybe MongoDB is great now. That doesn't change the fact that many people have been burned by MongoDB.

But, perhaps we can let maybe we can let bygones be bygones if we can determine that MongoDB is solid and dependable now. How do we make that determination?

If we decide that MongoDB is now robust based on present popularity and general satisfaction, that's fallacious reasoning:

https://yourlogicalfallacyis.com/bandwagon

After all, there was tons of stoke about MongoDB early on, only for people to realize later that their data was being silently nuked, which is why there is such a grudge against MongoDB in the first place. If an appeal to popular belief is proof, then we have a paradox.

Not everyone has the time and skill to thoroughly analyze MongoDB like Kyle Kingsbury / Jepsen:

https://jepsen.io/analyses/mongodb-4.2.6

And even then, there are so many other databases that have a better track record, so it would be hard to argue that the effort would be worthwhile.

I don't see how you're struggling with the notion of reputation here.

Maybe bias in favor of MongoDB is too strong? If that's the case, one last ditch effort:

If your friend's dog has gruesomely bit you 10 out of the last 10 times you've visited him, but he swears the dog is now rehabilitated, do you just shrug off being bit over and over again, and visit your friend without even the slightest apprehension? Or do you, at the very least, remain hypervigilant, given you're history with the dog?

Now replace "dog" with "MongoDB", and replace "bite" with "invaluable production data being absolutely eviscerated, resulting in your customer's lost trust and also immeasurable financial harm being done to you and your family".

cstrahan··on Inside the Steam Deck's APU
> It is very hardware dependent.

NVIDIA GPUs definitely make things more difficult, at least in the suspend-then-hibernate case. Here's where I reported a hacky workaround:

https://forums.developer.nvidia.com/t/systemds-suspend-then-...

See also:

https://github.com/systemd/systemd/issues/27559

NVIDIA kinda sorta just doesn't give a shit, unfortunately.

cstrahan··on Slashing data transfer costs in AWS
> Amazon does not have prove anything to anyone.

True. And no one has said that they must prove anything to anyone.

Amazon wants to make money, so they probably don't want to terminate the service of people who are acting in good faith. But that's just another way of saying that they probably want to determine with some certainty that someone is not acting in good faith before terminating their service.

So it's not that Amazon needs to prove anything to anyone. But they do want to prove something to themselves.

cstrahan··on Slashing data transfer costs in AWS
I don't think you parsed their message correctly. It's not about litigation.

Re-posting a bit of the service terms for easy reference:

> 51.3. You may not use Amazon Lightsail in a manner intended to avoid incurring data fees from other Services [...]

As you point out, they may terminate your service without any justification in a court of law. So how do they go about terminating the offenders? Well, one trivial way (from a technology and/or policy perspective): terminate everyone's service! If you blindly terminate everyone's service, that will certainly prevent anyone abusing LightSail.

But that's, uh, not good for business. So they probably want to terminate the service of only those people actually abusing it. But how do you do that?

You'd have to look at each account's usage and do something to determine if that traffic is or isn't a means of avoiding data fees from other services. In other words, you'd have to determine the intent of that traffic. Or, put yet another way: "this requires proving the users intent".

If doing so was as trivial as detecting any traffic between LightSail and the other services, they'd just prevent such connections in the first place. So how can AWS tell if some traffic between services is legitimate or not? The unspoken premise of the person you're replying to is that this probably isn't feasible for AWS to catch any and all people abusing LightSail in this way, with the conclusion being that you can (in practice) probably get away with it unnoticed.

cstrahan··on NixOS: Declarative Builds and Deployments
I agree with all of the above.

And I just realized: I should probably clarify what I meant when I suggested "the abandonment of software that is so poorly designed that it is difficult to package and/or run under Nix" as the means for a "cleaner base".

While that would make things cleaner in some sense, it's not what I'm suggesting Nix should do. I was mostly trying to clarify that the majority of what needs cleaning is extrinsic, rather than some intrinsic failing of Nix itself (though things could certainly be improved there, too).

The greatest source of difficulty for packaging/running things under Nix (having contributed at least a couple dozen packages, and the entirety of the Ruby/Bundler support) is software violating well established principles. To pick one silly example: say you need to get the home directory for the current user. Yes, you could do the equivalent of "/home/${USER}", and while that might coincidentally work on 99.999% systems, that's still wrong -- there's nothing keeping someone from having their home dir be something arbitrary like "/home_is_where_the_heart_is", and now your software will break. The funny thing is that the right way to handle this is also the easy way: use "${HOME}" if it exists, and failing that, fall back to `getpwuid` (or whatever your language calls it). It's easier/simpler because you no longer need to make any assumptions about how the file system is laid out -- either the user tells you through $HOME or you consult the password entry. Easy. But what happens when you send a pull request to fix the objectively wrong logic of the first example? You get push back saying "well, it works on my machine, and this is the first complaint we've heard, so no, I don't think I'll merge your request".

So, I guess I'm being kind of roundabout, but the takeaway I'd like for everyone to have is this: if working with your programming language is difficult on Nix, please go look for (and upvote) open issues in your language's issue tracker (they're probably there) from other Nix maintainers begging for fixes that would not only make it easier for Nix users, but would also remove latent correctness problems that have gone unnoticed solely due to the coincidental uniformity of all other commonly used distros. Just because something works everywhere other than Nix doesn't mean that the code in question isn't needlessly complicated/fragile and/or dependent on non-standardized assumptions that just so happen to be common on other systems.

cstrahan··on NixOS: Declarative Builds and Deployments
> What exactly would this "cleaner base" look like?

My interpretation would be something like: the abandonment of software that is so poorly designed that it is difficult to package and/or run under Nix.

This commit message (from one of my commits) details some of the struggles supporting Ruby under Nix:

https://github.com/NixOS/nixpkgs/commit/b6c06e216bb3bface40e...

Each of those problems is due to either:

1. Some unmotivated contrivance in Bundler, where the maintainers refused to make their stuff less needlessly broken, or

2. Ruby programmers in general not programming with packaging in mind (haven't touched Ruby/Rails professionally in a while, but when I did, it was par for the course to rsync/capistrano files around -- no one saw the utility of any sort of packaging)

And the two really reinforce each other. Bundler is the de facto way to declare and pin dependencies at the app level, but then Bundler makes it nearly impossible (see the commit message for details) to package software using Bundler, which reinforces the "fuck it, we'll just rsync files around over SSH", which means no one pressures Bundler to Do The Right Thing.

It's the same thing everywhere else. There are complaints elsewhere in this comment section about the nodejs/npm experience on Nix: same underlying problem. The design behind npm is so unnecessarily shit-tacular that it kinda sorta just barely works on its tier 1 platforms. I don't envy the brave souls that have worked on supporting npm packages on Nix.

cstrahan··on NixOS: Declarative Builds and Deployments
The same reason Bazel builds avoid using Cargo when building Rust software, so I'll describe why Bazel would do this:

- Bazel wants to cache remote resources, like each respective crate's source files.

- Bazel then wants to build each crate in a sandbox, and cache the build artifacts. Because bazel owns this process, instead of Cargo, it can trivially distribute those build artifacts to other developers, or in CI, etc -- instead of everyone having to build everything from scratch.

This is an established practice, and Nix wants to drive the build for the same reasons.

See:

- https://github.com/bazelbuild/rules_rust

- https://github.com/google/cargo-raze

cstrahan··on NixOS: Declarative Builds and Deployments
> And Nix doesn't?

If you're asking if installing/running software with Nix requires containers like Docker does: no, it does not.

> At least with Docker you can get something useful within 2 minutes

  % nix shell 'nixpkgs#ruby' -c irb
  irb(main):001:0> puts "Hello, world!"
  Hello, world!
  => nil
  irb(main):002:0>
That took me about 5 seconds to type out, and now I'm in an IRB REPL slinging Ruby code, despite having never installed Ruby prior to running that command. Add another 5 seconds for nix to fetch the necessary files (which are then cached locally, so a second `nix shell` invocation will be immediate) and we're sitting at roughly 10 seconds end-to-end.

If it takes 2 whole minutes to use Docker, Docker must be pretty bad. I guess vintage things have their appeal, but apart from that I don't see why people would be so attached to such archaic, inferior technology.

cstrahan··on NixOS: Declarative Builds and Deployments
How does apt-get install handle the following scenario?

You need the following software:

- You need the latest release of Erlang for your app

- A database (like Riak), whicn in turn happens to need an older version of Erlang

- The new Erlang needs the latest libopenssl

- The old Erlang needs an old v1.x libopenssl

- You used some open source software written in C++, so you need libstdc++

- Some of your own C++ code has exposed a bug in libstdc++, so you need yet another libstdc++ with your patches, but just for that software

- Etc

How does apt-get install allow you to have multiple versions of a given dynamic library (with the same SONAME) and multiple binaries (erl, clang, etc) installed at the same time?

The answer: it doesn't.

Nix has no problem handling everything I described above, and it handles it easily.

So, yes, you can pin versions with apt-get install, but you're out of luck if any of those packages have any transitive dependencies with different versions.

Also, the pinning guarantees are higher with nix: you can be guaranteed that your packages and their transitive dependencies are byte-for-byte identical, every time. Pinning end-to-end across all packages (and every transitive dependency thereof) is not a normal, happy-path thing to do in apt, so you would be hard pressed to find anyone that does that, given how onerous that would be -- whereas it's trivial in Nix.

cstrahan··on NixOS: Declarative Builds and Deployments
> All of the above?

Nope.

At best, you can do something like this: apt-get install gparted=0.16.1-1

That handles the semver case, but that doesn't address the rest of the "all of the above":

- sha256 calculated by the content of the package (Content Addressed)

- checksum calculated from all the inputs that were used to create the package install spec (Input Addressed)

> Nix isn’t the first package manager to do something unique.

Sure. But it is the first package manager to do the above unique things. After all, the reason for Nix's existence is just that: no other package manager before it has done what it does.

cstrahan··on NixOS: Declarative Builds and Deployments
It's also used at Repl.it:

"How we went from supporting 50 languages to all of them"

https://blog.replit.com/nix

cstrahan··on Cloudflare employee posts layoff call with HR and goes viral [video]
I’m not entirely sure if I follow, but my guess is that the comparison to a fictional character known for being aggressive is intended to (maybe playfully?) tease me.

I don’t see it as exceptionally aggressive to call people out on their bullshit. If you have the ability to humble someone being an asshat, they just may learn it’s in their best interest to chill out, which could possibly spare someone else - maybe someone else that doesn’t have the strength to stand up for themselves.

cstrahan··on Cloudflare lays off new hires
Where was she “arguing”? Did you misread her interaction as her trying to maintain her employment there?

If you genuinely believed that you were being let go for something that was completely fabricated, would you not confront them? Is there ever an appropriate time to speak up? For instance, if they also attributed the fruits of your labor to someone else, and then compared you to that other person to justify your termination, would you just remain silent?

I don’t see how having a backbone is self-destructive.

cstrahan··on Cloudflare lays off new hires
> > it is common knowledge that layoffs are usually conducted as one massive group meeting with all parties at once

> This is common knowledge? I've literally never heard of a layoff conducted like this, only the reverse. The major tech layoffs this week (Google, Twitch, Unity, Discord) were conducted in the reverse fashion.

Everyone I know who has been laid off has been let go in a group meeting. This is also my firsthand experience, having been laid off almost exactly a year ago, and again last week. I’ve never heard of it being handled in any other way. Now I’m curious about the stats.

> Edit: TL;DR: Either it's a complex, multi-level conspiracy that's somewhat dysfunctional but not in a way that would lead to the conspiracy falling apart... or someone has a poor manager.

I admit I’m probably biased: I admire CloudFlare’s engineering acumen, so it’s easier to suspect malice than incompetence, especially when they outsource firing to HR. It very well may be that she had an extraordinarily bad manager, and that there are other rotten apples higher up the org chart and in HR that would approve of not having the manager there.

cstrahan··on Cloudflare employee posts layoff call with HR and goes viral [video]
I’m well aware that bad behavior is a thing. Some driver’s cut each other off in traffic, weaving in and out of lanes. Some customers condescend to service workers, knowing they can’t retaliate without losing their jobs. And some reprobate employers do shitty things like we’re seeing here.

Are you really arguing against me when I say that this is exceptionally abhorrent?

That’s all I’m saying: that this isn’t the kind of thing to shrug at. There are plenty of companies lead by grade A people that treat their employees well instead of heartlessly throwing them under the bus.

cstrahan··on Cloudflare lays off new hires
Before I respond to individual points made in your comment, I'd like to address the general notion that her termination was an honest firing and not a thinly veiled layoff.

She said that multiple coworkers had been let go earlier that day. Also, this is happening just as news breaks about layoffs at CloudFlare.

So I will invoke Occam's razor: which is more likely?

- CloudFlare decided to layoff employees while also firing multiple employees on the same day, back-to-back

- They somehow came to the conclusion that these people were under-performing all around the same time, and that they should all be fired at the same time.

- Her boss decides not to participate in her exit call.

- Despite her receiving positive feedback, she was actually not meeting the expectations of her role.

Or this:

- When her boss said she was doing well, she was actually doing well

- CloudFlare wanted to layoff employees, but they didn't want to pay out severance and assist with benefits.

- But that doesn't look good, so in order to save face they try to justify everyone's termination by claiming they under-performed. Now they can say that these employees were fired.

- However, they are fully aware that it is common knowledge that layoffs are usually conducted as one massive group meeting with all parties at once (this is usually done because, with everyone being let go all at once, this minimizes the window where a vengeful employee could try to harm the company using their internal access -- trying to have one-on-one exits with each person's manager would be infeasible here, given the many-to-one relationship).

- To keep up appearances CloudFlare chose to have small, rapid-fire exit meetings (conducted by HR) with those being let go, instead of meeting with their boss. (I would bet money that they probably conducted these meetings in parallel to try and quickly clear out employees before word could spread far, to further minimize the window of possible vengeful reaction.)

It's incredibly plain to me that the latter is so, so much more likely. I'm already disgusted enough by the objective details (that is, leaving all interpretation aside), it's only that much worse if it truly is a regular occurrence for CloudFlare to hire a bunch of individuals, praise their work, and then later decide that they weren't all that great (which is an admission that CF is both incompetent at hiring and management), terminate them (with no PIP) all without their boss present.

Are you making the case that CloudFlare is really that incompetent and mismanaged?

> FWIW, the HR people did assert this claim was false but said they weren't able to go into specifics.

Making a contradictory assertion is very different than asserting that her claim is false. It doesn't matter that logically, sure, the latter is implied by the former -- they are still two very different things when it comes to human communication.

For instance, if you say "Wow, what a lovely blue sky!" and I respond with "Yeah, never seen a better green sky before. Love it.", and then you respond with "Green? What? It's clearly blue. And apart from sunset/sunrise and pollution resulting in a a red or orange sky, it's always been blue. So... I'm confused." to which I respond "I get that you feel that way. Totally understandable. All I'm saying is, you know, I love this glorious green sky over our heads right now."

In that hypothetical, I've managed to equivocate around the contradiction with non sequitur. That's not me claiming that you're wrong, which would then require me to provide a reasonable argument. Instead, I leave you to wonder if I don't see the apparent contradiction, or if I do but I'm just not engaging with you for some reason, etc. It's a shitty way to communicate with someone, and really isn't much better than simply stonewalling.

> I'd also point out that she says she's been receiving positive feedback despite not meeting standards.

I don't think that's what she was doing. My reading of the situation, if I put myself in her shoes: her execution was perfectly acceptable and she got only positive feedback from her boss, and so she felt deeply wronged by the incongruent claims made during her exit. Given the asymmetric power dynamic (they can just hang up on her at any point and happily go on their way, leaving her with zero closure), panic set in -- time is ticking, and she wants to have them verbally recognize they were in the wrong; to not have them admit to wrongdoing before the conclusion of the call would further emphasize their power to mistreat her, which would likely crater her emotional state (as it would mine). While she should have probably left it at "my boss, who is responsible for assessing my performance, thinks (and has told me) that I've done a great job, so could you provide any justification for telling me anything otherwise right now? No? Alright. You've admitted to not acting in good faith, and it wouldn't be fruitful to discuss this with you any further, so I won't." she instead tries to provide objective details in hopes that they'll actively address something that she's saying: she was on a 3 month ramp (where sales are not expected) followed by maybe three weeks to make a sale in a month where making one sale would be extraordinary, and despite all of that she still almost managed to make a sale.

I don't see that as under-performing and then making an excuse for doing so, and I'm not entirely sure how anyone can see it that way. My best guess is that evidently, in her panic, she gives excessive details and she has adrenaline jitters from the panic she's feeling (from both the aforementioned timing/power aspect, but also because most people find it incredibly stressful to engage in even mild mannered, respectful confrontation -- my pulse shoots up to around 150 bpm just thinking about it), which some seem to interpret as her being "heated", "emotional" and/or making excuses, but I'm not entirely sure.

> Aligning standards and expectations would fall under the manager's duties. Because, again, HR drones aren't going to be knowledgeable about the ins and outs of sales.

That's already enough of a problem. The thought of that is incredibly offensive, and it would also be the height of cowardice for a boss to have someone else fire one of their reports for them. I hope that isn't what you see as the norm, as that certainly isn't what I have seen in practice.

Again, the simpler explanation is that CloudFlare wanted to have its cake and eat it too: decrease payroll, minimize risk of harm to the company, and try (in vain) to save face by passing off a layoff as firings (to justify not giving severance and minimize negative sentiment for more layoffs).

cstrahan··on Cloudflare employee posts layoff call with HR and goes viral [video]
> What is the biggest potential upside?

The upside is an emotional one: not feeling saddened from letting someone easily walk all over you.

In the case of this woman's termination, they have lied to her face about her performance, and would presumably also lie to anyone that asked about the cause of her termination (they would say she was fired, when it was a lay off). They probably expected her to just silently take it. By calling them out on their lies, it makes it clear that she knows where she stands, and it makes them look and feel incompetent as they have no concrete evidence to back up their lies, so they must resort to pathetic equivocation. And, since such people often feel that they are in the right if they are met with zero resistance, this also helps them see that they are actually wrong.

If that doesn't make sense, consider: what would you do if someone walking by shoulder checked you? Would you do absolutely nothing and keep walking?

I would stop them and first ask if that was intentional -- it's possible that was an accident, and we can laugh about it. If it was intentional, I would tell them that I am sorry for their condition: that they feel that the only way to be seen is to bug people in indirect ways (as they are clearly too chickenshit to resort to outright violence) because they are too worthless a person to pay any mind to otherwise. I would wish them luck with that and then go on my way.

The only reason I would be silent is if I felt weaker than the other person, so the downside of just taking their abuse is that some core, subconscious part of me would lose respect for myself. I generally find nonviolent confrontation -- when warranted -- to not only be satisfying, but also crucial for how I perceive myself, though I suppose maybe not everyone is wired that way.

cstrahan··on Cloudflare employee posts layoff call with HR and goes viral [video]
> It's a bummer, but this is how this has been done for decades (generations?) and everybody knows it's how it's done, and that has in no way made companies "think twice" about business leaders assigning fairly low level employees or consultants to do these meetings just like this.

No, avoiding the words "we're laying you off" by lying about your performance and telling you that you're instead being fired is not "how this has been done for decades".

cstrahan··on Cloudflare lays off new hires
Before I respond to your comment: I was laid off two days ago (not at CloudFlare), and while I'll greatly miss what I was working on and everyone I was working with, and I also don't like the stress of not having an income, the news was broken to me with sincerity and tact, very much unlike how CloudFlare handled the termination in this video.

> She cut them off after 21 seconds and then went into a heated complaint, including calling what they're doing "bullshit"

There's nothing "heated" about confronting deception -- that's just setting healthy boundaries and, hopefully, giving the other person room to grow as a human being.

She established that her supervisor's feedback for her was that she had done "a great job". If that was not the case, the people letting her go would have asserted that this claim is false.

If I try to interpret their words charitably (that is, if I pretend that when they said "you have not met CloudFlare's expectations for performance" they really meant was something quite different), it would seem that they are letting her go because:

1) CloudFlare has decided that it is financially in their best interest to layoff enough people to reduce payroll by $X, and

2) They tried to pick some objective criteria (even if misguided and/or unfair in practice) to pick who to let go, and she met that criteria. For all we know, they may have taken a spreadsheet of everyone with her job title, sorted by sales per month, then sorted by name to break ties, and then laid off the bottom people.

In this scenario, saying "we're letting you go because of your performance" is not only untrue, it's also an incredibly insensitive, tone-deaf cop out.

Yes, performance may have been involved in the calculus of who to let go, but the actual underlying cause of her termination is that they have decided that it's in CloudFlare's best interest to reduce payroll. She wasn't under-performing, so it is, in fact, bullshit for CloudFlare to use that as the reason for her termination, and then equivocate when asked for a single example of her not meeting expectations.

> Once someone becomes this heated [...]

Again, she's not "heated". She is (reasonably) offended that they would lie to her face to deflect responsibility for her termination onto her.

> [...] the only real option is to reschedule a followup call after the person has had time to cool down.

No. The only thing to do is take ownership of the situation they have put her in and the incredibly offensive way they broke the news to her.

> [...] but what would you actually have wanted to hear? If they had instead said "We're cutting you for no good reason" the comments section would be complaining about that instead.

No. If they said that, it would also be a lie.

The appropriate thing to say is pretty easy: you speak the truth.

I can give a condensed, paraphrased version of what I was told two days ago (and, admittedly, what I was told verbatim was more tactful than what I'll produce here, but this is infinitely better than the schlock she was told):

"We regret to inform you that we will be terminating your employment. It's not fair. It's not a failing on your part. We want to be clear that this termination is not a firing; your role is being eliminated as part of layoffs. Ultimately, we have decided that we have over-hired with respect to the current economic climate."

You've probably noted that I didn't mention performance indicators at all, despite them (probably) being used to sort some spreadsheet and layoff people that met and/or exceeded the expectations of their title yet sorted at the bottom (vs a random sampling). Why? Because it's irrelevant in that conversation. What would mentioning it achieve? For new hires, it says nothing, as they hadn't been there long enough. For others, the implication is that if they had overworked themselves then maybe they would still have a job, which is a dick thing to imply. So really, the only positive thing that can come out mentioning it is that the people informing her that her income is about to be $0.00 can feel justified, thus soothing their conscience -- but anyone with a shred of social skill and empathy would know that this isn't the time nor place.

Being laid off sucks, but the problem here isn't that she was laid off. It's clear that isn't what upset her. What's wrong in that video is one (or both) of:

1) These people copping out with bullshit, trying to spin a layoff as a firing, and/or

2) These people having such piss-poor empathy and communication skills that they can't see that what they said was a slap in her face

cstrahan··on A new blog for 2024
It’s a blog post about rewriting/redesigning the foundation of his blog.

It would be titled “A New Blog Post for 2024” if all he did was write a new blog post. But if you read the blog post, you’ll see that he overhauled the entirety of his blog.

Maybe an analogy would help. If you’re a game developer and you replace the game engine of your game, you might update your in-game “about/credits” page to mention “in release x.y.z we switched from Unity to Unreal Engine” — what you wouldn’t do is say “in release x.y.z we updated this in-game ‘about’ page to, well… mention that we changed the about ‘about’ page to now state that we changed the ‘about’ page”.

← PreviousPage 6 of 17Next →