- C# and Kotlin tied at 4.5/5
- Rust hit 4.0
- S-tier (5.0) remains empty
- C# and Kotlin tied at 4.5/5
- Rust hit 4.0
- S-tier (5.0) remains empty
hamy.xyz/blog/2026-01...
hamy.xyz/blog/2026-01...
Exceptions are great for cases where you can't / won't recover - like no access to your primary DB.
Errors as Values are better for basically every other case. Explicit > Implicit.
hamy.xyz/blog/2025-07...
Exceptions are great for cases where you can't / won't recover - like no access to your primary DB.
Errors as Values are better for basically every other case. Explicit > Implicit.
hamy.xyz/blog/2025-07...
- Mark structs with LightClone
- Compile errors if don't implement LightClone
- Only implemented on types w copy or known-cheap clones
- Call .light_clone at callsite
hamy.xyz/blog/2026-02...
- Mark structs with LightClone
- Compile errors if don't implement LightClone
- Only implemented on types w copy or known-cheap clones
- Call .light_clone at callsite
hamy.xyz/blog/2026-02...
* Less context switching - C# is c-like
* C# has gotten good - records, linq, and unions
* Good tooling + ecosystem
* AI is great at C#
* The syntax is verbose but readable
hamy.xyz/blog/2025-11...
* Less context switching - C# is c-like
* C# has gotten good - records, linq, and unions
* Good tooling + ecosystem
* AI is great at C#
* The syntax is verbose but readable
hamy.xyz/blog/2025-11...
Get out of tricky social situations by talking to your computer.
Get out of tricky social situations by talking to your computer.
Built with: TypeScript, Phaser 3
Built with: TypeScript, Phaser 3
Use the speedup to write better code, not just more code.
1 more review / refactor / test / verification.
Use the speedup to write better code, not just more code.
1 more review / refactor / test / verification.
Instead I manage my scrolling time with:
* Access blockers
* Time blocks
* Daily Todolists
* Read later bookmarks
How I Stopped Mindless Doom Scrolling - hamy.xyz/blog/2025-07...
Instead I manage my scrolling time with:
* Access blockers
* Time blocks
* Daily Todolists
* Read later bookmarks
How I Stopped Mindless Doom Scrolling - hamy.xyz/blog/2025-07...
- Don't outsource the plan
- Do outsource well-scoped tasks w examples
- Checkpoint regularly
How I actually use AI - hamy.xyz/blog/2025-10...
- Don't outsource the plan
- Do outsource well-scoped tasks w examples
- Checkpoint regularly
How I actually use AI - hamy.xyz/blog/2025-10...
• How the codebase is structured
• How the product should function
• Patterns to use and avoid
• How to verify changes
• Definition of success
Treat each AI session like a new engineer and get better results.
• How the codebase is structured
• How the product should function
• Patterns to use and avoid
• How to verify changes
• Definition of success
Treat each AI session like a new engineer and get better results.
AI assumes success unless told otherwise. A failing test suite / type system / linter gives it immediate feedback to self-correct.
AI assumes success unless told otherwise. A failing test suite / type system / linter gives it immediate feedback to self-correct.
Treat commits as save points. One atomic task, review, commit.
When AI goes off the rails, rollback is easy.
Treat commits as save points. One atomic task, review, commit.
When AI goes off the rails, rollback is easy.
* Analytics - for monitoring and admin
* DB - For my Postgres / Redis
* App - For running my apps
I set them up with Ansible and use Nomad for orchestration.
hamy.xyz/blog/2025-12...
* Analytics - for monitoring and admin
* DB - For my Postgres / Redis
* App - For running my apps
I set them up with Ansible and use Nomad for orchestration.
hamy.xyz/blog/2025-12...
• Product spec describes what exists today
• Change spec describes the outcome (not how)
• Plan breaks implementation into phases
• Each session reads the specs / plans before building
• Product spec describes what exists today
• Change spec describes the outcome (not how)
• Plan breaks implementation into phases
• Each session reads the specs / plans before building
* Result/Option
* Pipes
* Expressive types
* Unions and exhaustive pattern matching
* Collection iterations
They may not be as elegant but they often can be done.
F# Sucks - hamy.xyz/blog/2025-06...
#fsharp
* Result/Option
* Pipes
* Expressive types
* Unions and exhaustive pattern matching
* Collection iterations
They may not be as elegant but they often can be done.
F# Sucks - hamy.xyz/blog/2025-06...
#fsharp
Popular programming languages have a virtuous cycle and will continue to improve whereas small languages have a vicious cycle.
hamy.xyz/blog/2025-12...
Popular programming languages have a virtuous cycle and will continue to improve whereas small languages have a vicious cycle.
hamy.xyz/blog/2025-12...
* Views to documentation down 40%
* Revenue down 80%
* Laid off 75% of engineers (from 4 to 1)
How AI Killed Tailwind's Business - And How To Avoid a Similar Fate - hamy.xyz/blog/2026-01...
* Views to documentation down 40%
* Revenue down 80%
* Laid off 75% of engineers (from 4 to 1)
How AI Killed Tailwind's Business - And How To Avoid a Similar Fate - hamy.xyz/blog/2026-01...
Over the course of a day / year / decade these operations compound leading to stress on your body.
Place monitors to minimize neck movements and use smaller keyboards to minimize keyboard to mouse travel.
Over the course of a day / year / decade these operations compound leading to stress on your body.
Place monitors to minimize neck movements and use smaller keyboards to minimize keyboard to mouse travel.