Reid Draper - Cognicast Episode 045

cover art

We talk to Reid Draper of Basho about QuickCheck, SimpleCheck, Riak, Haskell, Erlang, and a variety of other interesting topics.

Listen to or download this episode.

Subscribing to The Cognicast

The show is available on iTunes! You can also subscribe to the podcast using our podcast feed.

As we move to complete the technical infrastructure work around the merger of Relevance and Metadata Partners into Cognitect, we will definitely be providing a subscription feed for The Cognicast. In the meantime, you can be sure not to miss an episode by continuing to subscribe to ThinkRelevance: The Podcast via the above links. All new episodes of The Cognicast will be published via these existing channels, and when we do get a new feed, we'll figure out how to make the transition seamless.

You can send feedback about the show to, or leave a comment here on the blog. Thanks for listening!

Our Guest, Reid Draper


Reid chose Recomposed, Spring 0 by Max Richter as the intro and Hold Up ft Joe Goddard by Osborne as the outro.


  • [04:40] Reid was a panelist on the Think Distributed podcast recording at StrangeLoop.
  • [05:18] Reid works at Basho, makers of the Riak distributed database.
  • [05:30] Reid Draper and Sean Cribbs did a QuickCheck unsession at StrangeLoop.
  • SimpleCheck is a Clojure implementation of QuickCheck.
  • [07:20] Unit Testing
  • [12:00] "It's sort of like doing git bisect: we can make the computer do work for us."
  • [16:20] Thinking in SimpleCheck: "What properties hold true about my function that are actually going to help me find bugs? There are some guidelines."
  • [20:30] "In the Clojure community, and in functional programming in general, we talk a lot about how we should make as much of our code just be transformations on values. So if you structure your code that way, I think it becomes easier to think about these properties."
  • [20:57] Causatum generates random data from descriptions of Markov chains.
  • [22:38] Reid's original decision to write SimpleCheck in Clojure.
  • [23:45] Knockbox, a CRDT library. CRDTs are data structures that can be manipulated concurrently and then merged back together without losing any information.
  • [25:13] On SimpleCheck: "As I was playing with Clojure more, I decided: I just need to go write this. If I didn't write it, maybe no one would."
  • [25:28] Hammock time.
  • [26:57] Riak and Riak CS, Basho's Cloud storage product, were both designed from the start to be distributed.
  • [27:48] The original incarnation of Riak was based on Amazon's Dynamo paper.
  • [29:24] Datomic can run atop Riak. Riak CS treats Riak in much the same way as Datomic does.
  • [31:37] "You get some really, really nice properties from an eventually-consistent database when you store immutable things."
  • [38:50] RAFT and PAXOS.
  • [43:55] Reid pitches Craig on learning Erlang/Haskell.
  • [45:30] "Haskell has made me a better functional programmer in any functional language I use. It sort of forces you to think really in a disciplined way about what part of your code is going to have side-effects and what part isn't."
  • [47:35] "I'm super-excited to see things like gradual typing get more popularity. In Erlang we have a tool called Dialyzer, which is basically a corollary to core.typed in Clojure."
  • [49:40] "Given the chance to rewrite Riak in another language, I would choose Erlang again in a heartbeat."
  • [50:17] Cloud Haskell: "Erlang as a library, for Haskell."
  • [56:49] Erlang's concurrency model vs. STM.
  • [1:00:17] Succinct data structures can be stored close to the information-theoretic lower bound while still supporting some operations on them -- e.g., you can compress a tree, yet still traverse it.


Episode Cover Art:

Production Assistance: