Why ORMs Are Bad: A Programmer's Required Reading List

Carl's Required Reading

Why ORMs Are Bad: A Programmer's Required Reading List

Carl Kolon, an engineering leader, shares his curated list of articles that have shaped his views on software development. The list covers coding practices, platform design, frontend development, databases, async programming, encoding, and books. Kolon annotates each entry with a brief summary and highlights his favorites, such as 'The Grug Brained Developer' and 'Steve Yegge's Google Platforms Rant'. He also includes a strong critique of ORMs, recommending 'The Vietnam of Computer Science' and other resources. The list aims to provide valuable insights for programmers, even if they disagree with some of his opinions.

I am a certified ORM-hater. I think they are seductive for new projects, but quickly begin to cause performance issues and confusion.
  1. pragmatic

    Decent list but the ORM thing makes me suspicious.

    He links here as some kind of damning proof that ORMs are default bad.

    https://openai.com/index/scaling-postgresql/

    “It’s a poor craftsmen who blames their tools.”

    My ORM rule of thumb:

    ORM for CRUD not Reports

    If you are joining 12 tables for operational data, you have a design flaw. That’s a reporting query pattern.

    Often temp tables, CTEs etc are needed as an immediate fix with redesign as a long term fix. The query planner simply can’t optimize that in a reasonable time or it’s beyond there scope if what it can optimize. Also their solution to “joining in memory” is common.

    My DB query rule of thumb:

    If the query is hard for you to understand, it’s hard for the planner to understand.

    Default to small fast simple queries and pipeline them together.

  2. drunkboxer

    I have a similar list I like to share, had a few from Carl's list, will probably add a few from it.

    http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom... https://www.parsonsmatt.org/2017/10/11/type_safety_back_and_...

    https://lwn.net/Articles/336262/

    https://tomasp.net/blog/2015/library-frameworks/

    https://ratfactor.com/cards/not-quite-the-same

    https://matklad.github.io/2023/11/15/push-ifs-up-and-fors-do...

  3. olives

    Microservices

    grug wonder why big brain take hardest problem, factoring system correctly, and introduce network call too

    seem very confusing to grug

    ^ This is the best and funniest paragraph of text that I’ve read this year

  4. cweagans

    OP might also like Essentialism. Very in line with YAGNI - it guides things outside of API design too!

  5. kristianp

    Pleasant to hear about the Object-Relational Impedance Mismatch [1], haven't heard about that concept for a long time - maybe a decade!. The reason I like Dapper [2] is that it makes you use your own sql.

    Edit "lets" -> "makes".

    [1] https://en.wikipedia.org/wiki/Object%E2%80%93relational_impe...

    [2] https://github.com/DapperLib/Dapper

More from this day

2026-08-07