Claude didn't use "CRUD Driven Design" which is a perjorative version of database-driven-design. CDD, i say it's got that stigma.
The core finding here is that strfry is a textbook case of what DDD calls "database-driven design." The LMDB schema (defined in `golpe.yaml`) is the real model, and everything else is plumbing around it. [narrator: read, spaghetti]
The `PackedEventView` binary format is the true domain representation, which means the domain speaks in byte offsets rather than business concepts. This is common in performance-critical C++ projects where developers optimise for throughput first, and discover later that the lack of abstractions makes protocol evolution painful. [narrator: which is why the nips are such bullshit and conformance to spec is so poor, the specs are deeply ambiguous in many places, giving the bitcoin core effect in nostr]
Every new NIP that changes event semantics requires touching `events.cpp`, `filters.h`, `RelayIngester.cpp`, and often `ActiveMonitors.h`. That is four files across three implicit bounded contexts for what should be a single domain concept change.
Login to reply
Replies (1)
before i started vibe coding, i already knew most of the important architecture things and i learned them mostly in 2018-2020 building a big, complex app, mashing together btcd, btcwallet, creating a multicast mining control protocol, and wallet/miner gui. i had to, and i was doing it by hand, my fingers dancing across the keyboard like a machine doing mass refactors to implement architecture changes.
now i can just tell the robot what to do, and in hours what used to take me weeks. no, not just days, weeeeeks. architecture is teh biggest obstacle to code being efficient, stable, approachable and readable. cryptic languages like C++ compound this with their insane abstractions. rust makes it just as bad, from a different direction. same top level architectural decisions in a different idiom but the same result.
c++ and rust are made that way to moat the ecosystem against new devs.