Random notes and anecdotes from tech and startups.
Don't build your own invoicing
Vibe-coding invoicing to save 1% on transaction fees looks cheap until taxes, coupons, and a billing bug show up.
Focus is the kryptonite for founders
Lack of focus is a company killer. Ironically, founders often have easily-excited distractible personalities.
AI: Think of them as a summer intern
Stop treating coding models as a tool on your machine. Encode the company and give always-on AI a job.
Postpone getting a board
Early startups need speed, and a board can be a big slowdown. Alignment inside the team already eats enough time. Want input? Coffee. Want names on the website? Call them an advisory board.
Make the world your 2nd market
Your neighboring country may look like the same thing, just twice the size. Instead: ship an global version, then follow traction instead of geography.
Obesity is a thing of the past
Novo Nordisk spent a century on insulin, then disrupted themselves with Ozempic. Body composition as a class marker is just getting started.
AI: become a good evaluator
Generating decent content gets cheap. The work that remains is taste, judgment, and deciding what to make.
Give feedback on either Speed, Quality OR Priority
Don't call the work good or bad. Name whether you need speed, quality, or alignment right now, and own the tradeoff.
Stickiness matter
Seed-stage metrics that calm investors: revenue, churn, margins. Stickiness first, and only if you actually measure.
Managers should be careful worrying about dev speed
When a manager worries about speed, the real topic is trust. Grunt work is not how software actually moves. Instead, think of how priorities should change.
Startup execution: Focus on few things
Focus is critical. There's 100 important things to work on every single day, so you need to say no more often than you'd like.
Make everyone do support
Support tickets are condensed user feedback. It's a user telling you what they want, what they don't understand, and what they don't like. Treasure it, and spread that knowledge across the company by having everyone do customer support.
Avoid commission in startups
Based-on-reality short-story of a sales team, and the effects of introducing commission based salaries on culture and process.
Make it easy to be dumb in your codebase
Make it easy to delete: colocate by feature. Make it easy to build it right: automated checks. Make it easy to be newb: reduce knowledge-requirements, embrace dumb questions. Migrate incrementally: large diffs fail. Use a monorepo: reduced error rate. Make code quality derivative positive: make things better over time.
Review your own PRs
I wrote in a (student) newspaper once. I bet I wrote ~10 typos per page. 9 of which I caught on my own review. Similarly, most bugs I write are apparent to myself when I review the code. It's like it's two different brain modes: producer and reviewer.
Build for today. Only today
I often add a field, model or endpoint that I need 'tomorrow'. When 'tomorrow' finally shows up, it's usually not quite what I need. Note to self: Stop building for tomorrow. Stop build it 100% complete. Stop over-generalizing to fit future scenarios.
DRY does more harm than good
«Please DRY up your code» is usually bad advice – abstraction creates coupling and complex code. I'd advocate ALRY – ALways Repeat Yourself. When that code has matured, you are in a better position to see if it's a matching concept that can be combined to common code – or if it's just accidentally similar.
Select velocity + adaptability over performance
Your code speed can be seen as a combination of velocity (how fast you add features), adaptability (how well suited code are for future changes) and performance (how fast the user experiences it). Don't care about performance until it's a problem. Then measure, test and measure.
Cows are killing bio-diversity
CO2 gets the headlines. Biodiversity dies from land use, and most of that land is for cows.
Use plain text emails
People say they prefer HTML emails, but they engage more with plain text — it feels like a person, not a billboard.
Please lower case db table names
Unquoted Postgres names are lowercased. Stick to snake_case or autocomplete and unquoted queries will bite you.
Stop using defaultProps
In functional components, default argument values beat defaultProps. Use the language, not the library.
Stop using default exports
Default exports look cleaner on the import line, then break find-usages, rename, and go-to-definition in your own code.
Gatsby won't last
Gatsby is React meeting WordPress. Cool static pages, but the plugin trash pile will be the end of it.
Standups should state goals, accomplishments and blockers
Good standups give speed, through increased focus and accountability. It does this if you state your current goals, your recent accomplishment and ask others to help you. But it often becomes a meaningless chore when you don't.