Why your ReasonML evangelism isn't Working (references)
TL;DR
SOOO. What's my talk all about? Understanding people. Understanding people so that you can understand how to cater to them better.
We all want to sell ReasonML but often it seems that our arguments fall on deft ears. There's perhaps many reasons that this might and there's no right answers. I'm going to tell you now I'm no expert, not in the least, I haven't (as of yet) convinced my job to even try out ReasonML, however I have introduced other technologies and changes that were big and even better I can draw on the advice and experience of people that have made large language leaps in their companies.
The namesake of this talk is the blog post, "Why your F# evangelism isn't working" . I'll now proceed to quote this directly because of how good it is.
There's 4 kinds of people...
- **The "early adopters"**people who like trying new technologies
- **The "Pragmatists or Early Majority"*people who only care about technology to get something done
- **The "conservatives"**pragmatists, but even more risk-averse
- **The "laggards"**people who actively avoid new things
They are laid out on a spectrum below. As you can see it's a sort of bell curve. The height is about the number of people, from left to right is how likely people are to adopt new technologies. Guess where we are? Yep, the far left.
Also you can see "The Chasm" which is an indication that most technologies struggle to cross from being a new and hip technology to one used by every day people. I think it's because there's a fundamental personality difference in the way these two types of people think about technologies.
On the one hand Early Adopters think, "Wow this technology looks fun to use and would expand my mind by learning it"
On the other hand Pragmatists and their more conservative counterparts are thinking, "Is this popular enough to use this? Is it safe to use? Or even, Do I have to change?" Why do they think this way, don't they want to learn?
It's not about that. Pragmatists are all about getting stuff done. Meaning that is their only goal. Technology is a means to an end. Technology doesn't matter to them, so long as it doesn't get in their way.
The Rogers Adoption Curve & How You Spread New Ideas Throughout Culture
Innovators— these are the risk taking, highly educated, prosperous people. They’re always trying those new beta apps, technologies, and lifestyle habits.
In a political context, they’re the fringe. They hangout in their esoteric groups where they discuss theories, philosophers, and other theoretical works and applications. These political innovators aren’t your average Americans. They’re not watching the latest TV series, or reading popular books and magazines.
Early Adopters— also risk takers and highly educated, but more leadership orientated than innovators. Think of these guys as community organizers; informed, risk takers, less prosperous, and more connected with their communities (i.e. popular).
Early adopters are the movers and shakers. They push the idea out into broader culture. Where the innovators nurtured and matured the idea, these guys push it out of the nest.
Early Majority— less risk taking, tending to be more conventional with a willingness to accept new ideas. They’re active in their community, knowledgeable about social trends, and have an influence over their neighbors. These are people who arrive to the party on time. They’re not afraid of change, but they don’t go after it. Change comes to them. Late Majority— usually traditional, and less educated and socially active. Unsurprisingly, this group age wise is older. They show up to the party late. Showing up at a growing party isn’t fun for them. Change isn’t fun for them either. Unlike the early majority, who lets change come to them, the late majority is more likely hide from it. They’ll push against change if it doesn’t fit neatly into their worldview. Your grandpa is probably in this category.Sorry, not sorry. Laggards— the oldest and most traditionalist of the stages, this group will fight against change. They’re connected to their community, but not in a way that encourages transmission of new ideas. Think of Clint Eastwood in Gran Torino. He’d fit nicely into this category.
- Knowledge — learning about the existence and function of the idea
- Persuasion — becoming convinced of the value of the idea
- Decision — committing to the adoption of the idea
- Implementation — putting it to use
- Confirmation — the ultimate acceptance (or rejection) of the idea [ source ]
If the above Rogers Adoption Curve graph doesn’t make total sense to you (or you want to look at it differently), Seth Godin came up with an alternative graph displaying how the theory works.
In his graph, six stages make up the gradual acceptance and adoption of a new idea.
- Fringe—the idea is on the outskirts of society and acceptance. “It’s not obvious, proven or readily explained.”
- Risky—the idea is unknown, and potentially dangerous to utilize
- New— the idea is seen as “hip” by influencers and gets shared with their audiences
- Hot — The idea is now being accepted by enough people. It’s a trend
- Mass— The idea is now accepted by most people. The_masses_are the ones “who only buy pop hits, who only go to restaurant chains, who only drive the most popular car.”
- Always — Ultimately, the idea becomes so popular and accepted that the_masses_push it on everyone else who hasn’t already accepted the idea (going back to the “you either begrudgingly accept the new idea or are forced to live with it”_laggard_section)
Selling Reason
Tip 1: Don't bash languages! (Yes, essentially, JavaScript but also TypeScript)
Bashing other languages is a really bad habit, one even I do. The problem lies that people love their languages, they worked hard to learn them, by bashing them you just look like a hater, a complainer, and someone that just has no idea how to program in that language. Pragmatist value getting stuff done, and complaining is the opposite of that.
Don't be a Zealot.
Zealot
A person who is fanatical and uncompromising in pursuit of their religious, political, or other ideals.
🙈 Bad example:
Reason is so much better than JavaScript. It's not that JavaScript is bad it's just that it just can't scale. It's really hard to refactor and eventually you'll end up with tons of runtime exceptions then you'll just need to rewrite your app. JavaScript is like a dumpster fire.
And TypeScript is fine if you want a tiny bit of safety, but I mean do you really trust anyone to write all those type annotations. I mean it's great if you're a crusty old C# developer or something, but ReasonML is great if you want real type safety with Algebraic Data Types. You probably haven't heard of those they are this cool way type level construct that allows you to do or operations as well as the normal and operations you're used to...
Notes on this: * I was mostly trying to tear down other languages to make mine seem better * Very much sound like a zealot * Talked about advanced concepts that most likely will make me seem like an elitist
🙆♂️ Good* example (*the best I can do)
Facebook noticed that they had 80% less bug tickets when they switched to using ReasonML on messenger.com. Also, ReasonML's compiler can compile down to native code so in the future we could write Mobile and Desktop apps in the same language we do to write front-end apps.
Not to mention you get immutability and type safety without having to write type annotations or having to use a library.
Did I mention that it also has one of the fastest compilers? It will reload the page almost instantly when you're developing on it even with thousands of files.
Notes on this: * I didn't bash other languages * I didn't talk about the problems with existing technologies. * I talk about benefits, things to look for in the future * I also used numbers that are measurable * Didn't use superior type language, talking about concepts that they are sure to not know about. And if I did I don't try to explain them to them like a they are stupid.
Adopting Reason: strategies, dual sources of truth, and why genType is a big deal
_Disclaimer: migrating an existing product to a new language, even if partially, is one of the most impactful decisions that a team or tech company might make, for better or worse. It is rarely justified, and in most cases the costs will outweigh the benefits. In any case, it is a decision that should be made after deep consideration and never without a large consensus or a detailed plan. Or in other words: do your own research._😉
You have been looking at Reason and the value behind it:
- Rich type system with a solid inference engine .
- Very fast build times.
- Highly performant and readable output code.
- Language-level immutable data structures
TRUST
The truth is if everyone in your organization trusted you 100%, then if you suggested that ReasonML would be the best thing for your organization there's a very high likelihood that they would adopt it.
It may pain you to think that people don't trust you, because for the most part they do, they trust that you can get your job done, that if they hand you a ticket you'll get things done in a reasonable amount of time, they trust that you're a nice person that will help others if they ask, however I think there's probably a lack of trust in your ability to make technology choices. This comes with being an early-adopter.. Early adopters choose technologies that often are risky, often they don't pan out, often they'll be hot one minute, gone the next.
That doesn't mean OCaml & Reason is this way, they've existed for 20 years, however there is very little adoption in the industry and this worries people. If you're anything like myself you've probably suggested other technologies in the past like Elm, Haskell, Functional CSS, Event Sourcing, Functional Programming, Rust, Elixir, Graph databases, and the like. Many of these perhaps turned out to be bad ideas, or just weren't a great fit for the organization. This in many cases erodes trust. The widespread love of many technologies speaks to what others would see as lack of discrepancy.
What are ways you can build trust?
Building Trust Requires:
* Character
* Intent (you have to intend good for a person)
* Caring
* Transparency
* Openness
* Integrity (people can tell that you're a person of values, you'll do the right thing)
* Honesty
* Fairness
* Authenticity
* Competence (you know what you're talking about)
* Capability (you can do a task, eg: make a good language decision)
* Skills
* Knowlege
* Experiance
* Results (you've made similar technology choices in the past, they've worked out well)
* Reputation
* Credibility
* Performance
Is Reason a good fit? (Make a Plan)
I think this is a very important part of learning how to introduce Reason. We have to decide, in our own minds, if it's right for the company. There's a lot of trust at stake here! You're putting your good name on the line for this, you have to make sure ReasonML is a good fit.
- Write out a long form explanation.
Links:
Backlinks: