400 karma · joined February 21, 2023
There is a other mechanism DO has to allow multiple accounts under one billing context (I think it might be called 'teams'?) but sadly this is still extremely coarse grained, and doesn't allow you to lock a key down to a particular resource, or even a class of resources.
For a simple example, I'm running externaldns on a kubernetes cluster. For production use, I'd want to at least have an API key that can only access the DNS domains and nothing else. As is, the key can create compute resources or delete anything (including object storage buckets!). Again with no dev/prod isolation, so a leaked dev key that looks innocuous means your prod resources are now compromised.
Some second tier providers do better at this, OVH and scaleway both have some concept of ACLs, but DO just don't even try.
Apologies for the slight rant but it's frustrating to see something so basic overlooked by a company the size of DO.
I am considering moving our DO to ovh mainly because DO lacks fine grained IAM
It's internet explorer all over again.
The only way that your manager could be classed as a success is if you and the others who left were not necessary to the business. As mercenary as that sounds, we are talking pure business outcomes here.
My main point is attempting to counter the narrative popular on HN that postgres should be an automatic default. For sure there are many aspects in which postgres is superior, I absolutely do not debate that, especially when it comes to developer experience. But there is much more to it than that when it comes to delivering business value. That's where ops and DBA concerns start to matter, and IMO MySQL is so far ahead in this regard that it outweighs all the other hideous warts of working with it, when you consider the bigger picture of the business as a whole.
Unit tests are deeply coupled to the internal structure of your system - refactoring often implies changing unit tests, which opens the door to bugs where the code and test both change to match each other.
As you say, integration tests validate your public API, which from a 'correctness' point of view is really the only thing you care about, not the internal structure of the system. That's why I love integration tests, you can make sweeping refractors without needing to change the tests, because the test will still tell you whether the behaviour of the whole system is correct.
For example, the right database schema or the right architecture I could easily see saving you 10x the development effort, but these are the things copilot is least able to help you with.
Am I misunderstanding something here? Or could it be that what you are finding is that your experience is helping you build faster, and this is being misattributed to AI?
Yea it's true that if someone tried to truly exercise the latter, for example by allocating several trillions of bot accounts, then for sure you're going to get a call from the provider politely instructing you to desist. And I think that would be reasonable of them, and the marketing should not be considered deceptive.
The question is, does the same logic apply to TBs of storage? Is there anything that distinguishes these two use cases?
I guess the marketing offer of 'unlimited' could perhaps be read as 'all that 99.9% of customers ever need, but if you're one of the remaining 0.1%, you have to pay extra'.
That is to say, perhaps 'unlimited' could be read as a class of user that encompasses the vast majority of cases, as opposed to a literal resource quota. Is this reasonable or deceptive?
Would you say that because of this, Zanzibar engines like spicedb only become useful on systems of a certain size / complexity? Fundamentally you run into data synchronization issues whether you are syncing denormalized data back to your db via Watch or whether you write the relationships to both data stores in the first place. This article[0] on the latter topic touches on this, but brushes over some tricker parts of implementing such a thing correctly (eg. 2 writes section only covers insert not update or delete which is generally less harmful to have a ghost update that persists in spicedb, streaming updates brushes over some major footguns).
Granted there's nothing unique to spicedb in this sort of complexity, but by nature of being a db, using spicedb mandates that users must take on the complexity.
Is it then fair to say that it is appropriate to use spicedb once a project reaches a certain size / complexity, or would you expect a startup to adopt it from the beginning?
[0] https://authzed.com/blog/writing-relationships-to-spicedb
Zanzibar implementations (eg. Spicedb, keto etc) offer functionality for listing resources accessible to a given principal, but as far as I can see none have a coherent solution for filtering and ordering.
The only solution I can see to this is as you suggest maintaining a shadow copy of the relationships in your db so you can answer the question with a regular SQL query. This obviously comes with a lot of headaches, and is the sole factor preventing us from adopting one of these systems, so I really hope I'm wrong about this.
I think the specification from elsewhere is all about the business value that the code delivers. At the end of the day, the business doesn't care about how exactly your code is decomposed into classes/functions/etc, the business cares about 'can I register a customer' and 'are customers prevented from writing to resources they only have read access to'. Of course there is some requirement for the code not to be a complete mess, as this has impacts delivering features and reducing bugs down the line, but with tests that sit closer to the value the code delivers than the structure of the code, you're free to refactor and the tests will tell you what you've inevitably broken. I find this considerably more valuable than unit tests.
Unless you've already started a follow-up branch before the first gets merged (eg. Waiting for QA, PO review etc.)
Then you at minimum will need to rebase your second branch after the first is merged. Not a disaster but it adds overhead.
I'm not saying that fraud is an easy problem to solve, but I think you're absolutely right that this is a case of misaligned incentives. If it were Stripe's liability, it would get solved for _everyone_, rather than being in this middle ground where if you're lucky you might get help if you post on HN
That said, I really hope open source models can succeed, it would be far better for the industry if we had a Linux of LLMs.
But isn't this the point of the Turing test? Since we cannot determine otherwise, if something exhibits all of the outward observable behaviour of consciousness, we must conclude that it is conscious.
Otherwise we may be in the farcical position of needing to declare some humans not conscious under the same justification.
Instead, it gives us exposure to a new set of higher level security problems, that over time we will need to develop higher level primitives to navigate. We would still have these problems with lower level languages, we'd just be too overwhelmed with smaller issues to properly address them
But I do think we need better tools to generate said declarative state, regardless of its serialization format (yaml, JSON or other). Hand editing the raw declarative state is clearly untenable, hence the development of the various templating solutions. But I don't see an issue with using an imperative program to generate the declarative state either, as long as the declarative state is what forms the substance of the API to the cluster.