March 19th, 2014



“Once surespot started to gain traction it became clear…”

– Adam Patacchiola, CTO & Co-founder at surespot

Adam Patacchiola

Adam Patacchiola CTO & Co-founder at surespot



Surespot provides an encrypted messaging platform, currently we have iOS and Android clients. Surespot is a secure messaging platform that uses exceptional end-to-end encryption for every text, image and voice message returning your right to privacy

  •  Surespot is not associated with your phone number or email
  • You can delete your messages from the receiving device
  • Send voice messages when your hands or eyes are too busy to text
  • Multiple identities on a single device to keep matters separated
  • Free messenger with no advertising and totally open source
  • Your identity is portable so you can transfer your secure conversations to other devices
  • Uses 256 bit AES-GCM encryption using keys created with 521 bit ECDH*

I am the CTO and co-founder of 2fours the developers of surespot.


Growing out of Redis to Cassandra

We are using version 1.2 of Cassandra for persistent storage of user data such as, chat messages and public keys.


We initially went to production using Redis as the sole database to get to market quickly. Once surespot started to gain traction it became clear, being a bootstrapped startup, that a disk based storage solution was required to relieve Redis memory and price pressure.


We also evaluated HBase and Cassandra won out because of ease of administration and was highly recommended by a surespot advisor who is well acquainted with Cassandra (having administered a cluster of 100+ nodes).


On top of that we chose Cassandra for its scalability, availability and distributed nature. We are starting out with 3 4GB nodes and will upgrade as necessary.


Starting with CQL

Coming straight into CQL, it took a while to grasp that CQL was abstracting the manipulation of the wide rows- that the partition key was being mapped as the row key with all of the data from the CQL table for that partition key as columns in the same wide row. Aaron Morton’s post, Primary Keys in CQL, really helped.

It also took a while to figure out that inserting null as a value creates a tombstone. Initially the database code was inserting nulls when converting JSON objects to CQL statements for values that were not present in the JSON.  The IRC chat was helpful.