You may not know it (we’re bad at marketing), but Bytes is actually just a small part of what we do as a business. The other ~90% is spent teaching the JavaScript ecosystem and as part of that, we just pushed out the final content for our React course, 🕹️ react.gg.
Whether you’re new to React or just need to learn all the latest React v19 features like Server Components, concurrent rendering, actions, and transitions – I don’t think there’s a better way to do it than with react.gg.
And for the next little bit you can get 30% off if you enable your microphone and chant “Why is my component rendering twice?” at checkout.
Now back to Bytes 🫡.
Today’s issue: The VeggieTales component library, shattering my beliefs about how Node.js works, and using HTML freedom for the greater good.
Welcome to #390.
When you accidentally manifest 60 years of exponential progress with one spicy op-ed
Two weeks ago marked the 60th anniversary of Moore’s Law, and my family and I celebrated by dressing up as our favorite computing era and shocking each other with targeted electrical pulses while we chanted, “the number of transistors on an integrated circuit will double every two years.”
But the crazy thing about Moore’s Law is that it isn’t really a scientific “law” at all. It’s not based on physics or chemistry, it’s based on one guy’s prediction that came from a tiny sample size and some quick napkin math – aka vibe science. So why did it change the world?
Making the prediction: In 1965, before co-founding Intel, Gordon Moore was the director of R&D at Fairchild Semiconductor. Electronics magazine was celebrating its 35th anniversary that April, so they asked Gordon to write a contributing story about the future of semiconductors.
Gordon’s article was titled Cramming more components onto integrated circuits, and it was basically content marketing to hype up the future of Fairchild’s integrated circuits – which weren’t selling great at the time.
The article noted that it had taken about five years to get 50 components (or transistors) onto one integrated circuit, and that they had doubled the amount of transistors per IC each year. Moore simply predicted that this doubling would continue each year, reaching 65,000 transistors per IC by 1975.
We didn’t have Twitter in the ’60s, so I’m not sure how much blowback he got for this take – but in 2015, Moore himself admitted this was a pretty “wild extrapolation” for him to make back then.
A self-fulfilling prophecy: Gordon might’ve been shooting from the hip, but he turned out to be spot on. The 1975 numbers were correct, and people started referring to Moore’s Law for the first time. Moore then revised his prediction to be a doubling of transistors “about every two years” going forward.
At this point, the tech industry started working backwards from Moore’s Law as a constant. People assumed it was possible (and perhaps inevitable) that a semiconductor company would be able to double the amount of transistors per IC every two years.
And because no semiconductor company wanted to be left behind, they used Moore’s Law to guide billions of dollars of R&D investments in a variety of production technologies, which has enabled the consistent fulfillment of Moore’s Law for the last 60 years.
Bottom Line: Moore’s sh*tpost Law changed the world of computing forever – not because it was technically “correct”, but because it got people to believe that it was correct (or at least act like it).
And now you understand why we do our JavaScript predictions issue every year.
![]() ![]() ![]() ![]() |
How I sleep knowing I'll never have to build another janky React table
It’s fast, customizable, packed with enterprise features, and is used by 90% of Fortune 500 companies.
AG Grid works seamlessly with any JavaScript framework and gives you everything you need to effectively display large amounts of data without losing your mind:
Blazing performance that handles millions of rows and thousands of updates per second
Powerful enterprise features like pivoting, filtering, live updates, and other stuff that’s usually a huge pain to build from scratch
Custom themes and components you can easily extend, plus integrated charts that let your users visualize data directly from the grid
Try it out for free – and see why companies like Adobe, Nike, and Amazon all use AG Grid.
They’re a tiny technical literature boutique that partners with the best dev-tooling organizations to write technical content for their future users.
const userIds = [1, 2, 3];
async function fetchUsers() {
userIds.forEach(async (id) => {
try {
const user = await fetchUserById(id);
console.log(`Fetched user: ${user.name}`);
} catch (error) {
console.error(`Failed to fetch user with ID ${id}:`, error);
}
});
}
async function fetchUserById(id) {
return new Promise((resolve) => {
let delay = Math.random() * 1000 + 1000;
setTimeout(() => {
resolve({ id, name: `User${id}` });
}, delay);
});
}
fetchUsers();
If you want to get a preview of 🕹️ react.gg before you give us your money, check out Why React?. It’s the first lesson of the course and it’ll give you a sense of the vibes.
How Node.js Works Behind the Scenes shattered my previously held belief that Node is just three servers standing on top of each other in a trench coat.
Basedash built an AI-native Business Intelligence platform that lets you generate charts and make dashboards using natural language – no SQL required. You can easily connect to 550+ data sources to instantly generate dashboards for product, sales, marketing, and more. [sponsored]
Socket’s Threat Research Team wrote about malicious Go modules that contain hidden disk-wiping malware, and that’s my perfectly legitimate excuse for why this newsletter issue is 24 hours later than normal.
Right on cue, Anthony Fu wrote this friendly reminder to categorize your dependencies.
Mantine v8.0 comes with granular global styles exports, support for submenus in the menu component, and lots more. It’s been a popular React component library for years now, but every time I see Mantine, all I can think about is Barbara Manatee.
Unverceled Next.js is a tooling-heavy Next.js 15 starter kit deployed to Cloudflare Workers using OpenNext. Let the spite-driven development begin.
CarbonQA provides QA services for dev teams, so you’ll never have to QA test your own app ever again. They work in your tools, talk with your team on Slack, and let your developers focus on building and shipping new features. [sponsored]
Expo Router v5 (Expo’s full-stack framework) is now officially stable and comes with React Server Functions (beta), React 19 support, and API routes that let you build “universal apps” – which are kind of like the “universal remote” Adam Sandler uses in the movie Click, just without all the ugly crying at the end.
Dan Abramov wrote about Functional HTML, asking “If you had complete freedom, which features would you add to HTML and in what order?”
The forEach
loop is synchronous, meaning it doesn’t wait for the inner async function to complete. This results in the data potentially being out of order when logged to the console. To fix this, you can use a for...of
loop with await
:
const userIds = [1, 2, 3];
async function fetchUsers() {
for (const id of userIds) {
try {
const user = await fetchUserById(id);
console.log(`Fetched user: ${user.name}`);
} catch (error) {
console.error(`Failed to fetch user with ID ${id}:`, error);
}
}
}
async function fetchUserById(id) {
return new Promise((resolve) => {
let delay = Math.random() * 1000 + 1000;
setTimeout(() => {
resolve({ id, name: `User${id}` });
}, delay);
});
}
fetchUsers();