Is Vibe coding effective?
It appears the answer is “Yes”.
Just saw a talk from a team that did an experiment to prove it.
They built the same app using two teams:
1. DIY team that can’t use AI for anything.
2. AI team that must use AI to write all code. No manual coding allowed. They used 80% Cursor and 20% Copilot.
Result?
AI team was about 45% faster, and quality was comparable. A senior dev was shown both codebases and couldn’t tell which one was AI generated.
The AI team used the Figma MCP to build the pages based on Figma docs which is why the pages were built WAY faster than the DIY team.
AI was slower in some cases because AI struggled to get it right, so they had to keep trying prompts (since the rule was no manual coding for the AI team).
Fascinating.
Problem: Separate dev and QA teams aren’t collaborating. Dev “throws poorly tested work over the wall” to QA.
Solution: Unify the teams.
If dev and QA have separate management, they’ll operate as separate teams. So, unify them.
*One* mission.
*One* delivery team.
I've never enjoyed writing CSS, but two innovations solved that:
1. Tailwind. No more wasting time coming up with class names. No more worries about globals and brittle cascading styles.
2. LLMs. They're great at writing Tailwind, so I just tell the LLM what I want.
Example:
In TypeScript, many people argue over when to use type vs interface.
My rule? Use type when necessary.
Here are 5 things only type can do.
Otherwise, prefer interface. Interfaces display better, and are more performant.
Collection of insane and fun facts about SQLite. Let's go!
SQLite is the most deployed and most used database. There are over one trillion (1000000000000 or a million million) SQLite databases in active use.
It is maintained by three people. They don't allow outside contributions.
Good news: the @nodejs downloads reached an all-time high in August, when Node.js v20 finally surpassed Node.js v18!
Bad news: Node.js v16 still has major usage; go update, it has been out of LTS for a year!
Really bad news: who the heck is still using Node.js v14 and v12?
7 things I search for when I audit a TypeScript codebase:
any - Use a narrower type.
?. - Avoid by narrowing type.
?: - Optional properties are often overused/misused. Can often eliminate via a discriminated union.
string | number - Codebases often needlessly switch between number and string. Pick one. Narrow if possible.
= 0 - Zero is often misused to represent the explicit lack of a number instead of null.
let - Often a sign of needlessly complex mutative code.
as - Avoid type assertions. Not type safe. Zod often helps here.
The most common needless use of `let` I see:
Setting an initial value, followed by mutations.
This is hard to read because it requires the reader to hold the initial value in their head while reading, and monitor any mutations along the way.
Solution: Call a function instead.
Code that expresses its intent does not require comments.
Code is not a perfectly expressive medium, so some comments will be necessary. However minimizing comments, by working hard to make the code more expressive, is a worthy goal.
Keeping things simple is crucial to be a great developer.
Programming is already complicated. There's lots of moving parts, lots of things that can go wrong - especially at scale.
If you can reduce the complexity and make your systems easier to understand, you'll be golden.
Development == problem solving.
You're gonna *constantly* run into problems when coding.
Which is why I use this simple 3 step process to tackle an difficult coding problem:
Short 🧵 👇