HNHacker News
TopNewBestAskShowJobs

swisniewski

102 karma · joined January 2, 2023

submissionscomments
swisniewski··on Go: Support for Generic Methods
The real problem is that Go produces interface implementations dynamically.

The determination wether type T implements interface I is made at runtime. So is generation of the necessary vtables to produce the interface implementation.

So you can do things like this in package a:

  type S struct {
      //...
  }

  func (s \* S) Foo() {
      //..
  }
and something like this in package b:

  type Foo interface {
      Foo()
  }

  func DoSomethingWithAFoo(f Foo) {
  }
and something like this in package c:

  func Stuff(obj any) {
      theFoo, _ := obj.(b.Foo)
      theFoo.Foo()
  }
And then do:

  var s a.S
  c.Stuff(s)
And everything works.

For generic functions, go uses a strategy similar to C++ templates: when you call a generic function the compiler statically produces a concrete specialization of the generic function based on the inferred types for generic parameters.

That is, if you do:

  func Bar[T any](x T) {
    //...
  }
And you do:

  var x int
  var y string
  var z float64

  Bar(x)
  Bar(y)
  Bar(z)
The compiler statically generates 3 versions of Bar, one that takes an int, one that takes a string, and another that takes a float64.

These two things don't work well together. If I have a variable typed as `any`, and I want to cast that to an interface, I need to dynamically determine 2 things:

1. The shape of the interface's vtable. The go runtime does this by iterating over the runtime metadata for the interface type.

2. For each named method in the interface's vtable, the address of the concrete function to stick in that vtable slot. This is done by accessing the reflection metadata for the implementing type. It verfies the method with name X for type T matches the required signature for the method with name X for interface I, then sticks that method pointer into the appropriate vtable slot.

The problem, however, is what happens when the method with name X is generic. There may, or may not, be an actual concrete method for the set of type parameters. It's possible that statically type T does implement interface I (via generic methods) but that dynamically it doesn't because the particular generic instantiation needed for the particular interface was never made statically.

Prior to go 1.27, this was never an issue, because methods could not declare their own type parameters. They could reference the generic parameters of the receiver, but once the receiver type was known, there was only ever one concrete method X for that receiver.

Once you allow methods to have their own generic type parameters, the compiler can introduced several different concrete implementations for a method X.

This is ok, when you do somethnig like:

  var x SomethingWithGenericMethods
  x.Foo(1)
  x.Foo("hello")
  x.Foo(1.2)
Because the compiler knows statically from the Foo call sites which concrete methods it needs to generate.

But, when you introduce a dynamic cast:

  var x SomethingWithGenericMethods
  var i SomeInterface

  i = x.(any).(SomeInterface)
  i.Foo(1)
  i.Foo("Hello")
  i.Foo(1.2)
It's entirely possible that the necessary Foo implementations don't actually exist in the binary.

So, go 1.27 introduces generic methods, but it gets around this problem by saying:

1. Interface types can't define generic methods

2. Generic methods can't be used to implement interfaces

Thus, it allows adding generic methods without introducing the issues that crop up with dynamic interface implementations.

swisniewski··on Waymo pauses Atlanta service as its robotaxis keep driving into floods
But humans do make mistakes like that (driving into oncoming traffic or driving down a light rail track).

For example, here’s a case where a human did it to avoid an ambulance:

https://www.click2houston.com/news/2012/09/18/10-injured-in-...

This guy says he was blinded by the sun:

https://kutv.com/news/local/trax-train-hits-vehicle-in-sandy

Sometimes people are drunk:

https://komonews.com/news/local/police-suspected-drunk-drive...

swisniewski··on OpenAI's o1 correctly diagnosed 67% of ER patients vs. 50-55% by triage doctors
Let’s assume the AI does out perform the DR.

I still want humans in the loop, interpreting the LLMs findings and providing a sanity check.

You can’t hold an LLM accountable.

That’s the min responsible bar for LLM authored code, which normally doesn’t really matter much. For something as important as ER diagnostics, having a human in the loop is crucial.

The narrative that these tools are replacing human intelligence rather than augmenting it is, quite frankly, stupid.

We should embrace these tools.

But, “eliminating DRs”… hardly.

swisniewski··on WireGuard makes new Windows release following Microsoft signing resolution
How big is the Wire Guard user base on Windows?

How often do they ship new versions?

My understanding is that:

1. Windows drivers are Attested by Microsoft

2. Windows collects driver telemetry

Which means a really good question to ask is:

Why are they canceling driver signing accounts without looking at metrics?

swisniewski··on Is BGP safe yet?
You can use BGP hijacks to spoof another website.

You just need to get a publicly trusted CA to mint a certificate for your new site.

This can be done, for example, with let’s encrypt, using several of the various domain verification challenges they support.

There are some protections against this, such as CAA records in DNS, which restrict which CAs can issue certs and depending on the CA which verification methods are allowed. That may not provide adequate protection.

For example if you are using LE and are using verification mechanisms other than DNS then the attacker could trick LE to issuing it a cert.

That also depends on the security of DNS, which can be tricky.

So, yes, BGP hijacks can be used to impersonate other sites, even though they are using HTTPS.

When you configure your domains, Make sure you setup CAA, locked down to your specific CA, and have DNS sec setup, as a minimum bar. Also avoid using DV mechanisms that only rely on control over an IP address, as that can be subverted via BGP.

swisniewski··on Spring Boot Done Right: Lessons from a 400-Module Codebase
There is no right way to do Spring Boot.The entire idea is broken.

Dependency injection is good. It makes it possible to test stuff.

Automagic wiring of dependencies based on annotations is bad and horrible.

If you want to do dependency injection, you should do it the way Go programs do it. Create the types you need in your main method and pass them into the constructors that need them.

When you write tests and you want to inject something else, then create something else and pass that in.

But the idea that you create magic containers and then decorate packages or classes or methods or fields somewhere and then stuff suddenly gets wired into something else via reflection magic is a maintenance nightmare. This is particularly true when some bean is missing, and the one guy who knows which random package out of hundreds has that bean in it is on vacation and the poor schmucks on his team have no clue why their stuff doesn't work.

"I added Spring Boot to our messy Java project."

"Now you have 3 problems."

swisniewski··on GitHub appears to be struggling with measly three nines availability
To be honest, I’m not surprised that GitHub has been having issues.

If you have ever operated GitHub Enterprise Server, it’s a nightmare.

It doesn’t support active-active. It only supports passive standbys. Minor version upgrades can’t be done without downtime, and don’t support rollbacks. If you deploy an update, and it has a bug, the only thing you can do is restore from backup leading to data loss.

This is the software they sell to their highest margin customers, and it fails even basic sniff tests of availability.

Data loss for source code is a really big deal.

Downtime for source control is a really big deal.

Anyone that would release such a product with a straight face, clearly doesn’t care deeply about availability.

So, the fact that their managed product is also having constant outages isn’t surprising.

I think the problem is that they just don’t care.

swisniewski··on Bringing Chrome to ARM64 Linux Devices
I use a DGX spark, with Cosmic as my DE, and it's super awesome.

This is a bit of a franekin-distro, as it's ubuntu + nvdia packgages + system 76 packages, but it works pretty well.

I've been using Flatpack chromium, which is ok for most things. It performs a bit better than Firefox does. Having access to official Chrome will be nice though, as it should come with Widevine support. Chromium doesn't support DRM, so some things like Netflix don't work.

swisniewski··on GPT-5 outperforms federal judges in legal reasoning experiment
The premise seems flawed.

From the paper:

“we find that the LLM adheres to the legally correct outcome significantly more often than human judges”

That presupposes that a “legally correct” outcome exists

The Common Law, which is the foundation of federal law and the law of 49/50 states, is a “bottom up” legal system.

Legal principals flow from the specific to the general. That is, judges decided specific cases based on the merits of that individual case. General principles are derived from lots of specific examples.

This is different from the Civil Law used in most of Europe, which is top-down. Rulings in specific cases are derived from statutory principles.

In the US system, there isn’t really a “correct legal outcome”.

Common Law heavily relies on “Juris Prudence”. That is, we have a system that defers to the opinions of “important people”.

So, there isn’t a “correct” legal outcome.

swisniewski··on Software factories and the agentic moment
Some of this is people trying to predict the future.

And it’s not unreasonable to assume it’s going there.

That being said, the models are not there yet. If you care about quality, you still need humans in the loop.

Even when given high quality specs, and existing code to use as an example, and lots of parallelism and orchestration, the models still make a lot of mistakes.

There’s lots of room for Software Factories, and Orchestrators, and multi agent swarms.

But today you still need humans reviewing code before you merge to main.

Models are getting better, quickly, but I think it’s going to be a while before “don’t have humans look at the code” is true.

swisniewski··on Reducing Dependabot Noise
This is not satire.

If you have a large dependency graph, you are going to have a lot of vulnerable stuff.

Letting one computer send you patches and the other computer merge it for you when all your tests pass is a good thing.

swisniewski··on Reducing Dependabot Noise
Take a look at pr-bot:

https://github.com/marqeta/pr-bot

The answer to dependabot, or snyk prs is to automatically merge them once all the status checks pass.

This free your devs from having to worry about patching.

PR-BOT will let you define policy on when it’s ok to automerge prs.

swisniewski··on AI misses nearly one-third of breast cancers, study finds
The article has the headline "AI Misses Nearly One-Third of Breast Cancers, Study Finds".

It also has the following quotes:

1. "The results were striking: 127 cancers, 30.7% of all cases, were missed by the AI system"

2. "However, the researchers also tested a potential solution. Two radiologists reviewed only the diffusion-weighted imaging"

3. "Their findings offered reassurance: DWI alone identified the majority of cancers the AI had overlooked, detecting 83.5% of missed lesions for one radiologist and 79.5% for the other. The readers showed substantial agreement in their interpretations, suggesting the method is both reliable and reproducible."

So, if you are saying that the article is "not about AI performance vs human performance", that's not correct.

The article very clearly makes claims about the performance of AI vs the performance of doctors.

The study doesn't have the ability to state anything about the performance of doctors vs the performance of AI, because of the issues I mentioned. That was my point.

But the study can't state anything about the sensitivity of AI either because it doesn't compare the sensitivity of AI based mammography (XRay) analysis with that of human reviewed mammography. Instead it compares AI based mammography vs human based DWI when the humans knew the results were all true positives. It's both a different task ("diagnose" vs "find a pattern to verify an existing diagnosis") and different data (XRay vs MRI).

So, I don't think the claims from the article are valid in any way. And the study seems very flawed.

Also, attempting to measure sensitivity without also measuring specificity seems doubly flawed, because there are very big tradeoffs between the two.

Increasing sensitivity while also decreasing specificity can lead to unnecessary amputations. That's a very high cost. Also, apparently studies have show that high false positive rates for breast cancer can lead to increased cancer risks because they deter future screening.

Given that I don't have access to the actual study, I have to assume I am missing something. But I don't think it's what you think I'm missing.

swisniewski··on AI misses nearly one-third of breast cancers, study finds
Huh? I was commenting that there were no controls and the doctors were given skewed data, so any conclusions of ai ability vs Dr ability seem misplaced. Which seems to be what you just said… so I am confused about what I said that was inaccurate.

Can you clarify?

I also hinted at the fact that I only had access to the posted summary and the original linked article, and not the study. So if there is data I am missing… please enlighten me.

swisniewski··on AI misses nearly one-third of breast cancers, study finds
The description from the summaries sound very flawed.

1. They only tested 2 Radiologists. And they compared it to one model. Thus the results don’t say anything about how Radiologists in general perform against AI in general. The most generous thing the study can say is that 2 Radiologists outperformed a particular model.

2. The Radiologists were only given one type of image, and then only for those patients that were missed by the AI. The summaries don’t say if the test was blind. The study has 3 authors, all of which appear to be Radiologists, and it mentions 2 Radiologists looked at the ai-missed scans. This raises questions about whether the test was blind or not.

Giving humans data they know are true positives and saying “find the evidence the AI missed” is very different from giving an AI model also trained to reduce false positives a classification task.

Humans are very capable at finding patterns (even if they don’t exist) when they want to find a pattern.

Even if the study was blind initially, trained humans doctors would likely quickly notice that the data they are analyzing is skewed.

Even if they didn’t notice, humans are highly susceptible to anchoring bias.

Anchoring bias is a cognitive bias where individuals rely too heavily on the first piece of information they receive (the "anchor") when making subsequent judgments or decisions.

They skewed nature or the data has a high potential to amplify any anchoring bias.

If the experiment had controls, any measurement error resulting from human estimation errors could potentially cancel out (a large random sample of either images or doctors should be expected to have the same estimation errors in each group). But there were no controls at all in the experiment, and the sample size was very small. So the influence of estimation biases on the result could be huge.

From what I can read in the summary, these results don’t seem reliable.

Am I missing something?

swisniewski··on Netflix to Acquire Warner Bros
look up the parent tree... There was this statement:

> From a Hacker News perspective, I wonder what this means for engineers working on HBO Max. Netflix says they’re keeping the company separate but surely you’d be looking to move them to Netflix backend infrastructure at the very least.

The HBO Max service has something like 128M subscribers. This is < half of the 301M subscribers Netflix has, but is still a large number.

Certainly there's going to be some duplication, but it would be unwise to suddenly disrupt the delivery vehicles that you have 128M paying customers using in favor of a different delivery vehicle.

So, you should expect all the various HBO Max clients in existence to continue working for at least 5 years after the acquisition closes, if not longer.

Suddenly turning that off and saying "go use the Netflix app" wouldn't be good.

In any case, moving all the WB content onto the Netflix CDN and making it available on all the Netflix clients is "product integration", not "infrastructure integration". You are likely to see that very quickly. Weeks to months after the acquisition closes.

But, getting rid of all the HBO Max client software that talks to the HBO Max Servers running in whatever data center or cloud WB is using, and downloading video from whatever CDN WB has, and all the associated infra stuff, that's infra integration and it won't happen for a while. I think that will take 5-10 years.

swisniewski··on Pop_OS 24.04 LTS with COSMIC desktop environment
I use Cosmic on a DGX Spark, as my daily driver, and it works pretty well.

They don’t have a pop os iso for arm64, but they do have arm64 Debian repo. So I just took DGX os (what Nvidia ships on the device), added the pos os “releases” repo, and installed cosmic-session.

It works like a charm and provides a super useful tiling experience out of the box.

This is replacing my M3 Pro as my daily driver and I’ve been pretty happy with it.

I recently upgraded to an ultrawide monitor and find the Cosmic UX to be hands down better than what I get in the Mac with it.

If you want a Linux desktop with the productivity boost of a tiling window manager with a low learning curve, it’s pretty good.

swisniewski··on Netflix to Acquire Warner Bros
Generally with large acquisitions, product integration tends to precede infrastructure integration by years to decades.

Look at GitHub as an example, they were acquired in 2018, and are just migrating to Azure now after 7 years.

Microsoft shipping integrations with GitHub in 20108.

This is definitely the case with several Salesforce acquisitions (early product integration, little, no, or much later infrastructure integration).

So… I predict some level of content integration within a few months.

But infra integration is likely years away.

swisniewski··on Fizz Buzz without conditionals or booleans
Not sure why this got downvoted.

The technique could be implemented without conditionals, but not in python, and not using iterators.

You could do it in C, and use & and ~ to make the cyclic counters work.

But, like I mentioned, the code in the article is very far from being free of conditionals.

swisniewski··on Fizz Buzz without conditionals or booleans
Sigh…

Saying the code doesn’t have conditions or booleans is only true if you completely ignore how the functions being called are being implemented.

Cycle involves conditionals, zip involves conditionals, range involves conditionals, array access involves conditionals, the string concatenation involves conditionals, the iterator expansion in the for loop involves conditionals.

This has orders of magnitude more conditionals than normal fizz buzz would.

Even the function calls involve conditionals (python uses dynamic dispatch). Even if call site caching is used to avoid repeated name lookups, that involves conditionals.

There is not a line of code in that file (even the import statement) that does not use at least one conditional.

So… interesting implementation, but it’s not “fizzbuzz without booleans or conditionals”.

swisniewski··on Disassembling terabytes of random data with Zig and Capstone to prove a point
Another interesting thing… random data has a high likely hood of disassembling into random instructions, but there’s a low probability that such instructions (particularly sequences of such instructions) are valid semantically.

For example, there’s a very high chance a single random instruction would page fault.

If you want to generate random instructions and have them execute, you have to write a tiny debugger, intercept the page faults, fix up the program’s virtual memory map, then re-run the instruction to make it work.

This means that even though high entropy data has a good chance of producing valid instructions, it doesn’t have a high chance of producing valid instruction sequences.

Code that actually does something will have much much lower entropy.

That is interesting…even though random data is syntactically valid as instructions, it’s almost certainly invalid semantically.

swisniewski··on Too Much Go Misdirection
There's a much simpler way to do this:

If you want your library to operate on bytes, then rather than taking in an io.Reader and trying to figure out how to get bytes out of it the most efficient way, why not just have the library taken in []byte rather than io.Reader?

If someone has a complex reader and needs to extract to a temporary buffer, they can do that. But if like in the author's case you already have []byte, then just pass that it rather than trying to wrap it.

I think the issue here is that the author is adding more complexity to the interface than needed.

If you need a []byte, take in a []byte. Your callers should be able to figure out how to get you that when they need to.

With go, the answer is usually "just do the simple thing and you will have a good time".

swisniewski··on A Research Preview of Codex
Has anyone else been able to get "secrets" to work?

They seem to be injected fine in the "environment setup" but don't seem to be injected when running tasks against the enviornment. This consistently repros even if I delete and re-create the enviornment and archive and resubmit the task.

swisniewski··on Microservices are a tax your startup probably can't afford
I see this a lot ("if you are a startup, just ship a monolith").

I think this is the wrong way to frame it. The advice should be "just do the scrappy thing".

This distinction is important. Sometimes, creating a separate service is the scrappy thing to do, sometimes creating a monolith is. Sometimes not creating anything is the way to go.

Let's consider a simple example: adding a queue poller. Let's say you need to add some kind of asynchronous processing to your system. Maybe you need to upload data from customer S3 buckets, or you need to send emails or notifications, or some other thing you need to "process offline".

You could add this to your monolith, by adding some sort of background pollers that read an SQS queue, or a table in your database, then do something.

But that's actually pretty complicated, because now you have to worry about how much capacity to allocate to processing your service API and how much capacity to allocate to your pollers, and you have scale them all up at the same time. If you need more polling, you need more api servers. It become a giant pain really quickly.

It's much simpler to just separate them then it is to try to figure out how to jam them together.

Even better though, is to not write a queue poller at all. You should just write a Lambada and point it at your queue.

This is particularly true if you are me, because I wrote the Lambda Queue Poller, it works great, and I have no real reason to want to write it a second time. And I don't even have to maintain it anymore because I haven't worked at AWS since 2016. You should do this to, because my poller is pretty good, and you don't need to write one, and some other schmuck is on the hook for on-call.

Also you don't really need to think about how to scale at all, because Lambda will do it for you.

Sure, at some point, using Lambda will be less cost effective than standing up your own infra, but you can worry about that much, much, much later. And chances are there will be other growth opportunities that are much more lucrative than optimizing your computer bill.

There are other reasons why it might be simpler to split things. Putting your control plane and your data plane together just seems like a head ache waiting to happen.

If you have things that happen every now and then ("CreateUser", "CreateAccount", etc) and things that happen all the time ("CaptureCustomerClick", or "UpdateDoorDashDriverLocation", etc) you probably want to separate those. Trying to keep them together will just end up causing your pain.

I do agree, however, that having a "Users" service and an "AccountService" and a "FooService" and "BarService" or whatever kind of domain driven nonsense you can think of is a bad idea.

Those things are likely to cause pain and high change correlations, and lead to a distributed monolith.

I think the advice shouldn't be "Use a Monolith", but instead should be "Be Scrappy". You shouldn't create services without good reason (and "domain driven design" is not a good reason). But you also shouldn't "jam things together into a monolith" when there's a good reason not to. N sets of crud objects that are highly related to each other and change in correlated ways don't belong in different services. But things that work fundamentally differently (a queue poller, a control-plane crud system, the graph layer for grocery delivery, an llm, a relational database) should be in different services.

This should also be coupled with "don't deploy stuff you don't need". Managing your own database is waaaaaaay more work that just using Dynamo DB or DSQL or Big Table or whatever....

So, "don't use domain driven design" and "don't create services you don't need" is great advice. But "create a monolith" is not really the right advice.

swisniewski··on AWS Built a Security Tool. It Introduced a Security Risk
The article is bullshit.

AWS has a pretty simple model: when you split things into multiple accounts those accounts are 100% separate from each other (+/- provisioning capabilities from the root account).

The only way cross account stuff happens is if you explicitly configure resources in one account to allow access from another account.

If you want to create different subsets of accounts under your org with rules that say subset a (prod) shouldn’t be accessed by another subset (dev), then the onus for enforcing those rules are on you.

Those are YOUR abstractions, not AwS abstractions. To them, it’s all prod. Your “prod” accounts and your “dev” account all have the same prod slas and the same prod security requirements.

The article talks about specific text in the AWS instructions:

“Hub stack - Deploy to any member account in your AWS Organization except the Organizations management account."

They label this as a “major security risk” because the instructions didn’t say “make sure that your hub account doesn’t have any security vulnerabilities in it”.

AWS shouldn’t have to tell you that, and calling it a major security risk is dumb.

Finally, the access given is to be able to enumerate the names (and other minor metadata) of various resources and the contents of IAM policies.

None of those things are secret, and every dev should have access to them anyways. If you are using IAC, like terraform, all this data will be checked into GitHub and accessible by all devs.

Making it available from the dev account is not a big deal. Yes, it’s ok for devs to know the names of IAM roles and the names of encryption key aliases, and the contents of IAM policies. This isn’t even an information disclosure vulnerability .

It’s certainly not a “major risk”, and is definitely not a case of “an AWS cross account security tool introducing a cross account security risk”.

This was, at best, a mistake by an engineer that deployed something to “dev” that maybe should have been in “prod” (or even better in a “security tool” environment).

But the actual impact here is tiny.

The set of people with dev access should be limited to your devs, who should have access to source control, which should have all this data in it anyways.

Presumably dev doesn’t require multiple approvals for a human to assume a role, and probably doesn’t require a bastion (and prod might have those controls), so perhaps someone who compromises a dev machine could get some Prod metadata.

However someone who compromises a dev machine also has access to source control, so they could get all this metadata anyways.

The article is just sensationalism.

swisniewski··on What If We Made Advertising Illegal?
Digital content is not “published” in the same way as traditional content.

Digital content is published by placing data on a computer, connecting that computer to the intent, then running software on that computer that allows software on other computers to connect to it and download that content.

Attempting to ban ads is an attempt to censor the content of that communication. It’s analogous to attempting to ban the things people can say over telephone calls. It would be a clear violation of the 1st Amendment.

The Author’s points about “Dopamine Megaphones” and “tracking” don’t hold up.

Posting something online is not the same as yelling through a megaphone. And restrictions on tracking are about behavior, not speech.

One can outlaw both of those things without unreasonably restricting speech.

But banning ads is absolutely unreasonable restraint of free speech rights.

If I speak on the telephone, I am allowed to hand the phone to someone else for a moment and let them speak. Banning such a thing would be unconstitutional.

Many online ads work in the same way.

Similarly, I can take money from someone, and in response speak things they want me to speak. Restraining that is also a violation of free speech rights.

Just because online ads are horrible, doesn’t mean they can be outlawed without trampling on fundamental rights.

swisniewski··on PR process killing morale and productivity
I usually adopt a policy with my teams:

You are not allowed to complain about style in code reviews.

If it’s important enough for your to comment about, it’s important enough for you to add a linter to the build and block the build if the style isn’t met.

If it’s not worth enough of your time to add a linter, it’s certainly not worth your peer’s time to deal with comments about style.

swisniewski··on How to give a senior leader feedback (without getting fired)
I think you may be making assumption: that the feedback you are trying to give is clear, articulate, and constructive. When speaking to someone significantly more senior than you it’s entire possible that your feedback may not be.

And that is really the point of the post. Here is advice on how to make sure your point is clear, articulate, and constructive.

As someone becomes more senior 2 things happen:

1. They acquire more authority 2. They have more demands on their time.

In these situations, you need to work to make sure you are communicating what you intended to communicate. That requires effort.

I wouldn’t view this advice as “how to deal with fragile egos”, but instead would view it as “how to make sure you are not misunderstood when having critical conversations with high stakes”.

In that regard it is good advice.

swisniewski··on Monorepo – Our Experience
I would be hard pressed to call the Linux Kernel a mono repo.

It’s all one kernel really.

The Kernel is a monolith, but that doesn’t make its repo a mono repo.

FreeBSD, on the other hand, is a mono-repo. It has the kernel, all the user mode tools, basically everything in a single repo.

That is very different from the Linux ecosystem as whole.

Linux is not a mono repo.

swisniewski··on What are the best options for Amazon SDEs thinking about leaving over RTO policy
Have you had a conversation with your manager?

If the policy requires S-Team approval, it could be hard at the SDE 3 level, though it should be much easier at the PE level.

If your Director is willing to go to bat, and you have a track record, it’s not unachievable.

TBH, the policy is likely not aimed you…

Though I will say…back in my AWS days, I did gain a bunch from being able to drop into Mark Brooker’s office and ask questions about distributed systems.

I didn’t get always like it… but I learned a lot from it.

If you have a solid performance argument in your favor, make it and see what happens.

Worse case, they say “no” and you leave anyways.

Page 1 of 2Next →