top of page

History - How did Soft Shuffle start?

The Background

I have always struggled with randomising large, often sleeved, decks of cards for board and card games. It is a persistent problem that I often see discussed online too.

As well as the physical difficulty (and potential damage) of riffle/mash/mechanical shuffling, I've always believed there could exist a way of directly and fully randomising a deck of cards.

A riffle-style shuffle gets you progressively towards a randomised deck (but by a smaller amount each riffle) until you decide it's 'good enough'. Contrast that with software, where we've known for years how to randomise a list of items in a set time that scales linearly.

This all came into sharp focus about 2 years ago at a games night when we were playing one of my favourite games - a popular deck-driven, cat based polyomino game. It uses a 150 card deck that is constructed each game. It's also sleeved because I have all the expansions and it's a game I plan to keep and play for a long time.

IMG_6341_smallest.jpg
IMG_7300.JPG

The Problem

The problem is I can't shuffle it.

 

Not to a point where i'm happy it's been in any way meaningfully randomised anyway. It's too big a deck to either riffle or mash in one go, meaning splitting it up into sub decks and doing those, repeatedly.

 

It was also never clear to me how many riffles & overhands you'd need for 150 cards vs a 52 card deck either. 7 riffles & overhands is claimed to give a usable level of randomness for 52 card decks. Even if it scales linearly, that's 21 shuffles needed. And then double or triple that with 2 or even 3 sub-decks to make it physically manageable?

 

Suffice to say we would never bother with anything like that and that bothered me.

I was contemplating all this while staring at the fully piled deck, and then at my phone, back and forth, and pondering the fact that I know Fisher-Yates as an algorithm for fully randomising virtual decks of cards in a linear time.

The Concept

​It occurred to me that this is a problem I should really be able to solve. I have a software engineering background, both academically and industrially, that includes randomness & sampling and algorithm writing. I should be able to come up with a solution that lets me use the phone to generate the randomness and apply it to a deck of cards.

Fisher-Yates is an algorithm I have known of for a long time, so generating a random ordering was a solved problem. Making it a physical reality was more tricky - but I had an inkling dealing to piles could be the basis of an algorithm given what I knew about sorting algorithms and pile-shuffling. 

I spent a bit of time messing round with dealing out numbered cards until I had the realisation that dealing exactly one card a pile leads to stratification, and that that could be leveraged with a preceding pile deal. Leading to the 2 pass algorithm and the insight that n cards can be fully ordered with √n piles.

A piece of card, a permanent marker and some python code swiftly followed and confirmed it worked!

IMG_6318 Smaller_edited.jpg
IMG_7230.JPG

The implementation

That was roughly a year before Soft Shuffle launched. At that time I was thinking in terms of Quotients and Remainders, without a full grasp of the underlying mechanism - extending it to 3 passes wasn't working at that point. So, I worked on a few things in parallel:

  • My cardboard prototype evolved to a neoprene mat prototype I made with my airbrush - which is the origin of the stencil aesthetics of the mats. That then evolved into the mat designs you see on the site with testing of different numbers of mat spaces.

  • I continued to investigate the algorithm and what the underlying mechanics of it were. Eventually I worked out the general form of the algorithm and it's basis on the modulo of the division by the number of piles to the power of the current pass (and the alternating gather direction).

  • I refactored and recoded my python prototype several times, both to implement the general algorithm and to turn into Javascript. The reason for using Javascript was to both to have easy access to a cryptographic random number generator and to be able to encapsulate it as a single webpage - that seemed the ideal initial platform.

  • I set up Soft Shuffle itself, registering the website etc, and worked through the explanations, content and UI you see on the site. 

Which brings us to now (late 2024). It's reached the stage where its ready for people to start using and feeding into the many avenues of further development!

Timeline

Late 2022 - Initial idea of combining phone and dealing to randomise cards after a games night.

|

Early 2023 - background mulling over the idea and experiments around dealing.

|

Mid 2023 - Insight around 2 pass dealing and deterministically setting a deck with √n piles.

|

Late 2023 - Cardboard + Python prototypes to prove the concept.

|

Early 2024 - Javascript Webpage prototype, handmade neoprene mat prototypes, X-pass full algorithm, Soft Shuffle started. 

|​

Mid 2024 - Testing and development, Neoprene mat design, UI refinement, Website design.

|

Late 2024 - Soft Shuffle Launched!

IMG_6613_edited.jpg
IMG_7270~2.jpg

About

Dave Coulthurst (PhD) a.k.a. Spikey Dave, Fluffy Dave, Dr Dave or occasionally just DaveDaveDave is the inventor & designer of Soft Shuffle. 

From Bristol, UK, Dave has had an interest in board games, video games, miniature games, RPGs and everything geeky since he was a kid. 

A mix of academic and industrial software engineering combined with a love of board gaming set Dave on the path to create Soft Shuffle.

Keep me updated

bottom of page