New stories

Live mirror
30 storiesupdated just nowView source snapshot
  1. Where Prediction Markets Struggle(economist.com ↗)
    discuss
  2. The AI Language We Can't Read: Neuralese [video](youtube.com ↗)
    discuss
  3. Tesla Full Self-Driving customers can now access lower insurance premiums(drive.com.au ↗)
    1comments
  4. Continual Learning Mechanisms Compose for Long-Horizon Memorization(arxiv.org ↗)
    discuss
  5. Are you committed to your company or your team?(economist.com ↗)
    discuss
  6. Sam Altman says world 'right to be afraid' but 'should trust' AI firms(bbc.com ↗)
    1comments
  7. Show HN: Glu – installing Homebrew packages 2x faster on macOS(glu.run ↗)
    1comments
  8. China would face a "hellscape" in a war over Taiwan(economist.com ↗)
    1comments
  9. Ex-Google DeepMind researcher adds to warnings that AI could 'kill all humans'(reuters.com ↗)
    discuss
  10. Bashka – static analyzer for bash install scripts (for safety and convenience)(github.com/dmtrkovalenko ↗)
    1comments
  11. Ridiculous deals as store leaves website open for the public to edit(stuff.co.nz ↗)
    1comments
  12. Show HN: Open-source tab and bookmark organizer for Chrome and Edge(github.com/ringlochid ↗)
    1comments
  13. PatchWing – verified, reproducible fixes for known CVEs (bring your own model)(github.com/jaymunshi ↗)
    1comments
  14. Massie launches effort to impeach Hegseth(thehill.com ↗)
    discuss
  15. Show HN: ForcePush – Commits vs. Push-Ups(forcepush.fit ↗)
    1comments
  16. Datamimic – don't let your coding agent invent its own test world(github.com/rapiddweller ↗)
    2comments
  17. Ask HN: How do you put together a technical engineering team?
    discuss
  18. Is pasta a type of noodle? The surprisingly serious debate over beloved carbs(theconversation.com ↗)
    discuss
  19. Deep Seek v4.1 M5 Max at 17 tokens/s(github.com/argonautlabsai ↗)
    discuss
  20. The Apple IIGS was introduced 40 years ago today(twitter.com/stlhood ↗)
    discuss
  21. SGLang and Miles Add Day-0 Support for DeepSeek-v4.1(lmsys.org ↗)
    discuss
  22. GLiClass: Open-Source JEV(github.com/knowledgator ↗)
    discuss
  23. The Arrival of Java 27(inside.java ↗)
    discuss
  24. EU approves sending mountains of trash to Turkey despite environmental fears(politico.eu ↗)
    discuss
  25. Verification of a Generational Garbage Collector(arxiv.org ↗)
    discuss
  26. Salesforce and Nvidia launch Koa, a CRM reasoning model(salesforce.com ↗)
    discuss
  27. Antonio Gramsci: How Language Makes Power Feel Like Common Sense(linguistically.substack.com ↗)
    discuss
  28. Replicating Jev with Qwen-2.5(perennialte.ch ↗)
    discuss
  29. Revisiting Soundness for Occurrence Typing, Semantically(arxiv.org ↗)
    discuss
  30. Black Holes or Black Hole Stars?(quantamagazine.org ↗)
    discuss

Broken Windows, Abstractions and the Cost of Always Keeping Things Simple

1 pointsby 1h agopgilmartin.substack.com
1 comments
1h agoHN ↗

How can a team combat this, so that we can simultaneously avoid premature abstraction and broken windows leading to overdue abstraction?

From experience, premature abstractions are rarely premature unless you really try and anticipate years into the future. What happens is that abstractions can go in the wrong direction, and when they're not useful then they're called premature incorrectly.

For all the reasons outlined in the article, you want to anticipate how the software will scale, to allow room for growth. As a simple example, if you need one component, think what are the likelihood of similar components in the future, then parameterize that component so it avoids duplication. There is some risk in doing this if you get it wrong, but that's what skill and experience gives you (if you do lots of software design).

The broader pattern goes like this: spend some extra time building out the software to accomodate potential future growth, and be explicit about the assumptions so you know when the growth will start to strain the system again. At that point anticipate that next abstraction point, and plan accordingly to then abstract everything to the next level, adding even more room for scaling the software (not the users, but the actual code and features). This creates slow periods of development, followed by big spikes of productivity as the abstractions are used, i.e. creating a new feature is as simple as importing and using a few functions or maybe even just configuration.