strapping in for the clickbait blog post...<p><i>"Global mutable state is harmful"</i> - well... yes, that's totally correct. <i>"The better approach [..] is event sourcing plus materialized views."</i> .....errr... that's <i>one</i> approach. we probably shouldn't hitch all our ponies to one post.<p><i>"Data models are restrictive"</i> - well, yes, but that's not necessarily a bad thing, it's just "a thing". <i>"If you can specify your indexes in terms of the simpler primitive of data structures, then your datastore can express any data model. Additionally, it can express infinite more by composing data structures in different ways"</i> - perhaps the reader can see where this is a bad idea? by allowing infinite data structures, we now have infinite complexity. great. so rather than 4 restrictive data models, we'll have 10,000.<p><i>"There’s a fundamental tension between being a source of truth versus being an indexed store that answers queries quickly. The traditional RDBMS architecture conflates these two concepts into the same datastore."</i> - well, the problem with looking at it this way is, there is no truth. if you give any system enough time to operate, grow and change, eventually the information that was "the truth" eventually receives information back from something that was "indexing" the truth. "truth" is relative. <i>"The solution is to treat these two concepts separately. One subsystem should be used for representing the source of truth, and another should be used for materializing any number of indexed stores off of that source of truth."</i> this will fail eventually when your source of truth isn't as truthy as you'd like it to be.<p><i>"The restrictiveness of database schemas forces you to twist your application to fit the database in undesirable ways."</i> - it's a tool. it's not going to do everything you want, exactly as you want. the tradeoff is that it does one thing really specifically and well.<p><i>"The a la carte model exists because the software industry has operated without a cohesive model for constructing end-to-end application backends."</i> - but right there you're conceding that there has to be a "backend" and "frontend" to software design. your models are restrictive because your paradigms are. <i>"When you use tooling that is built under a truly cohesive model, the complexities of the a la carte model melt away, the opportunity for abstraction, automation, and reuse skyrockets, and the cost of software development drastically decreases."</i> - but actually it's the opposite: a "cohesive model" just means "really opinionated". a-la-carte is actually a significant improvement over cohesion <i>when it is simple and loosely-coupled</i>. there will always be necessary complexity, but it can be managed easier when individual components maintain their own cohesion, and outside of those components, maintain an extremely simple, easy interface. <i>that</i> is what makes for more composable systems that are easier to think about, not cohesion between all of the components!<p><i>"A cohesive model for building application backends"</i> - some really good thoughts in the article, but ultimately "cohesion" between system components is not going to win out over individual components that maintain their cohesion and join via loosely-coupled interfaces. if you don't believe me, look at the whole Internet.