Facepalm.

I was excited when CM first announced their plans but I had assumed that, if they were going to release a product aimed at the average consumer, they would first ensure it was suitable for use by the average consumer. If those two Reddit threads are anything to go by, they didn't. That is a massive and potentially fatal mistake on CM's part.

Before they launched the new installer, the traditional CM user needed to have a minimum level of technical chops to even attempt to get CM onto their device. That meant that, if something went wrong, they had a chance of saving themselves. By contrast, the average consumer is non-technical and if your product is aimed at non-technical users, you need to make fucking sure that it's literally idiot-proof because Murphy's Law applies.

Code doesn't exist in a vacuum. It forms just one part of a broader system that can include other code, hardware, network connectivity and people, any of which can behave in unexpected and irrational ways.

At the risk of generalising slightly, developers tend to (a) think that things are going to work the way they expect them to, (b) expect people to behave rationally, and (c) assume that they don't have to worry about dependencies that are outside their control.

Reality is that (a) things often don't work as you expect them to, (b) people (especially non-technical ones) don't always behave rationally, and, (c) if you are relying on something outside your control to work properly, you better make sure that the code you write is capable of handling errors, failures and exceptions.

I constantly hear developers using the words "should" when talking about issues. The user should make sure that the battery is fully charged before starting the install. $3rd_party_dependency should work as advertised. The user shouldn't pull out the USB cable in the middle of an install.

Assume that things aren't going to work as they should, even if you can't imagine why they wouldn't. Why would the USB connection be interrupted in the middle of an install? Who the fuck cares why?! The user might be an idiot. They might clumsily knock the phone off the table. They might have a two-year old child who wants to play with daddy's phone. It doesn't fucking matter why or how it could happen, just assume that it might and figure out how to deal with it if it does!

In fact, assume that your product is destined to be used by someone who is going to do their darnedest to fuck it up. I used to answser the tech support line for an ISP back in the '90s and the one key thing I learnt from that experience is that users will do the most stupid things imaginable.

Any time you use the word "should", it's a fuck-up waiting to happen! Exception-handling, exception-handling, exception-handling! Not just in code but in the processes and procedures that surround the product that contains your code. Test it to death and then test it some more. Get your non-technical friends to try using it and watch them. Any time they need help or prompting, take note and change your product accordingly.

This is why empathy is such an important quality in product managers. Empathy is what gives one the ability to put oneself in another's shoes. Imagine I'm a housewife whose technical prowess extends to putting on the dishwasher. Imagine I'm a college student who fancies himself as the next Mark Zuckerberg and thinks that coding is writing HTML and CSS. Imagine I'm an impatient high-school senior who wants to differentiate himself somehow from all his friends who also have Android phones. If you're releasing a product via the Play Store, it needs to cater to all those potential users and more.

CM need to get on top of this. There's a massive difference between an obscure piece of software aimed at geeks or hobbyists, and an Installer aimed at the mass market. Even the rumour that the installer is bricking phones could do serious damage to CM as a brand (not to mention put them at risk of litigation - how much do you want to bet that some shark isn't already thinking about a class action lawsuit?). Just look at how much focus and effort Elon Musk puts into rebutting any suggestion that Tesla cars are prone to fires. He knows that confidence is crucial when you're marketing to consumers.

CM need to adopt the same mindset.