Storytelling as a Vehicle of Change: Introducing ClojureScript for the Heart and Mind
People don't really like changes yet change we must in this fast-developing world. How to introduce a change, or rather how to inspire people to embrace a change? That is one of the main questions of my professional life.
I have recently talked about Functional programming (FP) in JavaScript and compared it to ClojureScript, which was designed for FP. To my surprise the team proposed to give ClojureScript a try and we agreed to have a live coding session, implementing a new functionality in our internal part of our webshop using ClojureScript. But how to kindle this little flame of motivation to keep it going, despite hurdles that will certainly come? And here I got a few interesting ideas.
Based on these ideas I created the following battle plan.
So my impression is that this approached worked really well. An interesting result was that despite all the goodness of ClojureScript, it turned out that the main selling point for us was interactive development. (You can get something similar with React Hot Loader but it doesn't work on the server side (Node) and making your state reloadable is a much smaller challenge in Cljs thanks to immutable data and clear data management constructs such as atoms.)
Perhaps I should highlight that I haven't tried to manipulate my colleagues or play any tricks on them. All this is just about how to effectively communicate something I am passionate about, highlighting the important points in a way compatible with how the audience thinks.
I have recently talked about Functional programming (FP) in JavaScript and compared it to ClojureScript, which was designed for FP. To my surprise the team proposed to give ClojureScript a try and we agreed to have a live coding session, implementing a new functionality in our internal part of our webshop using ClojureScript. But how to kindle this little flame of motivation to keep it going, despite hurdles that will certainly come? And here I got a few interesting ideas.
- An experienced speaker once recommended sharing personal experiences (even - or especially - if they make me vulnerable) as it is much easier for people to relate to them than to general statements.
- A Cognicast eposide mentioned storytelling as a great tool for introductory guides. We humans are natural storytellers, we think in stories and relate to them much more easily - so a story should be great also to communicate the value of a change.
- My ex-colleague Therese Ingebrigtsen gave an inspiring talk presenting some points from The Switch - mainly that we need to address the recipient's minds with rational arguments, but also their hearts to involve their emotion (e.g. by drawing a picture of the new bright future), and that it is important to show a clear path forward.
Based on these ideas I created the following battle plan.
- Address the mind - Repeat the conclusion of my FP in JavaScript talk - the recommendation to use ClojureScript as a language designed for FP, with a top-notch data-manipulation library and one of the best immutable data implementations, compiled size that rivals that of JavaScript with a few libraries, and super-powers in the form of macros, core.async and core.match.
You can make JavaScript fly... But why not to use something
designed for flying? - Highlight the importance of this work - How the internal admin pages have grown in importance and functionality and thus need more attention and development.
- Tell a story and share a personal experience - I have retold my painful experience of working on the admin pages to improve our troubleshooting capabilities, which often required several restarts to see a change and how that frustrated and slowed me down, making it impossible to get into a flow. Everybody has experienced this and has appreciated how unproductive it is. (#2, 3, 4 form the story - the growth of the admin pages, the pain of developing them, the ease of doing so with ClojureScript & Co.)
- Address the heart, draw a picture of a bright future: I have played the 6 min video Interactive programming Flappy Bird in ClojureScript that demonstrated the very opposite of my painful experience. Everybody was impressed and envious.
- Finally, I have live-coded the new feature, using REPL-driven programming to explore the data and develop the code on the go with Figwheel to make interactive programming in the browser a reality. Even though I have encountered some obstacles (such as mistakes and print timing out due to data size), it was well received - I believe that was thanks to the previous points (and thanks to having wonderful colleagues :-)).
So my impression is that this approached worked really well. An interesting result was that despite all the goodness of ClojureScript, it turned out that the main selling point for us was interactive development. (You can get something similar with React Hot Loader but it doesn't work on the server side (Node) and making your state reloadable is a much smaller challenge in Cljs thanks to immutable data and clear data management constructs such as atoms.)
Perhaps I should highlight that I haven't tried to manipulate my colleagues or play any tricks on them. All this is just about how to effectively communicate something I am passionate about, highlighting the important points in a way compatible with how the audience thinks.