Lead developer of ClojureScript
Articles: https://swannodette.github.io
At Vouch we build digital keys and fleet management for the automotive industry. While unit tests are valuable for verifying some properties of the system, global properties of our blockchain-based solution are quite challenging to rigorously test with traditional testing methods. The most trivial idea behind functional programming - orienting programs around immutable values rather than stateful objects - naturally guided us towards building a toy model of the system in which all state of interest is lifted into a single value. Now we have building blocks that always compose - each part snaps together regardless of the ordering. Sprinkle on some property-based testing and we can generate complex scenarios of interaction impractical to write by hand, including showing that upgrading / downgrading the source code of the deployed system will always lead to coherence. Many of these ideas were pulled together from toy examples found in educational functional programming texts. Toys can indeed be far more powerful than they appear!
Slides