I think this was a poor choice of words by the OP. I think Matt moved exactly to where he was needed. Use what works best for you, whether it’s his curated free and public skills or paid course(s). The fact he’s on here engaging with some of this shit is a testament to him being a standup hooman.
@dqnamo@upstash Using for general sandboxed coding with codex or building an app that uses sandboxes? Was just looking at it today vs Vercel’s stuff. Already a fan of Redis, Workflow, and Search. Wasn’t sure how baked Box is yet.
don’t believe anyone who tells you thinking is obsolete because of ai. it matters more because every thought is instantly amplified.
this september, we're hosting a conference to celebrate thoughtful designers, products, systems.
https://t.co/0mqH338o2u
https://t.co/3OCU283ANo
Latest episode of Databased dropped with 6 pieces of Counter-Intuitive Systems Wisdom (based on designing exabyte-scale systems etc):
1. You can't test your way to correctness.
Testing stateful systems is harder than writing the code and requires a level of conceptual understanding you generally won't have unless you designed it.
Tests don't accurately model the real world. Data can change in unexpected ways and sometimes your hardware even lies to you.
(fun story in the podcast about the time we had to have a CPU manufacturer fly out to debug a batch of CPUs branching incorrectly)
2. Slow is worse than broken.
If your system takes 5s to respond instead of 10ms you're now handling 500x more concurrent load. You'll likely enter congestion collapse and fail unrecoverably instead of applying backpressure and allowing upstream clients/systems to back off.
3. Steady state should be worst state.
Don't design your system to be efficient most of the time but perform expensive retries under failure scenarios. That's the worst time to make your system less efficient. Large systems have to be provisioned for peak load anyway so just take the hit at steady-state so you don't fail unrecoverably when overloaded.
4. Simple is better than sophisticated.
Simple systems scale. Simple systems are easily understood when things break. Simple systems are extensible when requirements change. Simple systems are *way harder* to design than sophisticated ones. Amateurs write complex code.
5. Architecture is more important than performance.
Raw performance numbers are irrelevant if a system is architected to have 20 request waterfalls and no caching. Architectural changes can easily have several orders of magnitude difference in workload. Never take an architectural hit for some small performance wins.
6. Queues are hard and usually bad.
Both in distributed systems and computer networks, long queues are almost always a huge design mistake that will turn a small blip into a large outage. Small amounts of queueing is often fine but if your system is receiving more load than it can handle all a queue is going to do is increase latency and guarantee all your requests time out. Queueing theory is very subtle and "slap a queue in front of it" is usually a bad idea.
Lots more nuance to go along with all of these and some positive steps you can take to avoid disaster at scale. Good thing we made a podcast episode about it...