While we were cleaning out stacks of boxes and papers in 2015 in the corner of the apartment, my wife went through a box of old greeting cards and at the bottom she found this business card with a small cut out of phonebook paper taped to it.
I kept this around as a souvenir for a number of reasons.
But let us begin the story at the beginning.
In 2007 I was struggling with with issues of identity and belief and authority and so forth. I took this all very seriously because for better or for worse people in power lead large groups of vulnerable people to wrap up their beliefs and opinions with their identity because it is easier than accepting some of the cold, hard truths of our dispassionate universe, or admitting that those before you have all used the same shortcuts for generations and refused to admit not knowing something. Instead they made up the answers, for all of human history, until about the time of Galileo—but many groups since have not caught up. At this time I was in the process of unraveling my identity and my values.
Around this time I was also driving home from work every evening to eat dinner and spend time with my soon-to-be wife, still a student at the Caltech campus in Pasadena. One evening on campus there was a public performance at Ramo Auditorium of a magician who called himself a Mentalist and made annoying claims of paranormal and supernatural abilities.
Not everyone in the crowd was a Caltech student, alumni, or faculty but it was clear that there were many skeptical types of people in the audience. Throughout the evening and due to the anxiety of identity mentioned above and general anxiety in my life, my heart was pounding sort of trying to debunk the fellow’s stupid paranormal claims and to come up with simple explanations only involving standard trickery.
A lot of the tricks were easy to figure out and many of them involved suggestibility of various members of the audience, mathematical tricks, or broken assumptions. Throughout the performance his whole approach became more and more frustrating to me because he was essentially being deceptive but prattling on about mental powers in a very serious manner. In other words the problem wasn’t that he was deceiving the audience to entertain them, the problem was that he was deceiving the audience and claiming to have abilities which were based on the supposed bending of natural law.
(And lest we forget, some of the greatest magicians of all time, including the Great Randi and Harry Houdini, were some of the greatest skeptics and debunkers who ever lived. In addition, great magic is more impressive to skeptics because they actually do not believe in magic and have a harder time with the fact that they have just witnessed the impossible.)
But skeptics as magicians generally wink and say they do their tricks by magic (they are up front that the phenomenon is “beyond reproach”) and leave it at that, whereas pseudoscience and paranormal proponents and mentalists first start by acting like their tricks are not tricks but can be subject to investigation, but when you look too closely they pull back in defense and then act like all of sudden the phenomena in question are beyond reproach. Which is it?
At the end of the evening the mentalist set up an elaborate trick which involved envelopes filled with single-digit numbers which he shuffled or pretended to shuffle in some order to spell out a telephone number, which he then produced by having a member of the audience open the telephone book to a random page where he would drag his business card with a window cut out of it (see the picture) across the page and stop at an arbitrary place determined by the audience member. I do not recall but perhaps he was even pretend blindfolded at this point. Now the audience member read out the phone number appearing in the window of the business card and then the envelopes were opened and it was revealed in a very showy manner that the digits matched.
During the applause and bowing and stage exit of the entertainer and with some excitement I rapidly worked through the steps of the trick and figured out that everything about it was very mundane except the only place to force that string of digits, already written in the envelopes, was the business card itself. I immediately ran down to the stage and picked up the business card off of the telephone book on the table and sure enough, using my skepticism and disbelief, I had worked through the only plausible solution to the illusion.
Another skeptic was wondering the same thing and even confronted me on stage to ask me if I was part of the act or defending the entertainer but I said, No, I had figured out the trick, and showed him the business card.
I was so full of adrenaline and excitement that I had won this little battle that I mostly inadvertently kept the business card. I meant the fellow no harm and I hope he went through all of his effects before going onstage later in his tour but I can assure you that he will not return to the California Institute of Technology. (I was not the only member of the audience giving him a hard time that night.) Luckily this piece of equipment is very inexpensive to replace.
He may have made suckers out of some people in the audience that night but he made a permanent disbeliever out of me. Using skepticism I had completely trumped this otherwise charismatic and convincing fellow, by simply questioning each assumption systematically.
Of course this was not the end of my internal journey but a beginning, giving a serious look at other groups that made similarly spectacular claims and appeal to emotion or appeal to authority with similarly shaky evidence.
I mean, not only was I a skeptic, I was a very good skeptic. (One would hope so as I had a job as an engineer debugging code all day and a four-year degree from one of the best science schools in the country.) Doubt had delivered the goods whereas faith (so-called) would have just rolled over and accepted it as beyond understanding.
By assuming there were no physical laws being broken and working the trick backwards my brain had determined the only solution to the problem.
(Of course like any magic trick, when you explain it, it kills the magic! In addition, pulling off a trick like this in front of an audience is obviously a lot harder than it sounds and takes years of practice.)
I gave in when the exchange-an-old-iPhone program was offering $200 off a new iPhone by handing in my old iPhone 6S.
That phone served me well for three years but the battery was having problems.
Compared to the old phone, the new phone has the following downsides:
But I get the following upsides:
I transferred my old phone setup by iTunes backup and restore, which is good because I did a full audit of all the apps and data on my previous phone just to make sure everything was backed up manually in the cloud or elsewhere. Normally I set up a new phone from scratch but this was not necessary and the process was fairly painless, aside from spending a lot of time waiting for it to sync down some cached data for certain apps, after waiting a certain amount of time for all of my apps to re-download, after updating the phone to the latest iOS to match my old phone. It even transferred my old camera roll, which I guess is a good thing, even though I have it all backed up on Dropbox. I went from having a full 64 GB phone to having 90 GB free.
Whitespace is the least of your worries, but a convention, like driving on the same side of the road, however arbitrary, prevents head-on collisions.
Say no to mixed tabs and spaces in code: turn on the option for your text editor to show invisible whitespace characters.
An engineer coworker (years ago now) described how he was building a feature to allow appearance themes (sets of colors) and that he admitted he was not a graphic designer (trying to push this responsibility onto other members of the team). In discussing this he also implied that this feature should be exposed to the end-user (now he’s pushing this onto the end-user?) I did not deny that he may have been doing good work technically and that separating out the visuals into all-encapsulating theme “packages” would be a fine idea, but I disagreed with the idea that just because something is implemented that the user should be allowed to or forced to deal with the details.
The simple question that bothered me was that he asked: why not?
Later I realized how to answer that question.
It is not a matter of: if the user can do it then let them do it. Users do not want that power. (Just like they do not want the power to accidentally delete their data, etc.)
The question should really be flipped around and asked: should we really bother the user with this without a good reason?
More simply: the oblivious engineer asks why not bother? (the user) but the real question is: why bother? (the user).
The point of great software is not what it allows a person to do but rather what it allows a person not to do. Not bothering the user with details that are the responsibility of the developers is a service to the user. The software should save them time, not give them extra work to do.
Why expose something that the software developers and designers can take care of on the user’s behalf? Why make extra work for them? The engineer must justify any and all features by asking these questions. If it is a matter of aesthetics only but there is no utility, or if there is negative utility (more work for the user to do that they shouldn’t be bothered with), then that should tell us something.
In contrast, allowing the user to change the colors of individual items of data for semantic reasons is obviously a good idea when it is a core part of the visualization aspect of the specific piece of software and allows users to make their intended meaning instantly identifiable, which saves them time and enhances the power of the software’s visualization.
But allowing the user to theme parts of the interface that really have no bearing on the core point of why people would use the application just creates extra features to maintain and extra cognitive load for the user. Especially when those parts of the interface use standard controls on other platforms and allowing the user to change it on one platform would create inconsistency.
So in writing this essay, I figured out what it was about his comment that bothered me so much. And the problem wasn’t specific to him necessarily but rather the attitude of a lot of programmers and their obliviousness to the importance of design from the human standpoint, not from the artsy-fartsy standpoint. Even worse is when they say, “I am not a designer nor do I claim to be one,” but they think that design only has to do with choosing colors and making things look pretty! Or their understanding of design is so lacking that the features they implement have to be rebuilt because of their lack of understanding of how to build and test user-facing features, their lack of understanding of what to build in the first place, or whether the feature should or should not be built in the first place!
You see this all the time with lots of “powerful” open source software: instead of doing the work up front to prevent the user from doing stupid things, the engineer punts and says, “Let the user deal with this: here are myriad sliders and controls and they can just make sure the combination of settings makes sense. (Coincidentally, each slider is trivial to implement!) I am doing the user a favor by directly exposing all of the internal knobs and levers for them to tinker with. If they get the software into a bizarre state that is on them.”
An example of this in a single domain: Readium and Calibre (two very useful and powerful OSS projects) vs. Apple’s iBooks epub reader app (now Apple Books, iOS and macOS). Apple’s app allows you to change the appearance of an ebook that you are reading, but notice that there are only four pre-made themes or foreground and background color combinations, and notice that no matter how you rotate your device or change the text size, you cannot get it into a bizarre state. As a bonus, single v. double column mode is entirely automatic. Contrast Readium and Calibre, where there are more controls but it is too easy to combine visual settings in a bizarre manner, for example text columns that are too thin or too wide, having to turn single v. double column mode on and off manually, red text on a blue background, etc. No thought for preventing undesirable states, and pushing the responsibility onto the user.
A good engineer who thinks in terms of “design is how it works” will move mountains (write lots of thoughtful, technically challenging, invisible code) to make the software more clever in order to save the user just a small fraction of extra work, and to avoid having to add a manual setting for the user to fiddle with. Just because the engineer knows that internally the machine works by taking a bunch of knobs as input and producing some output doesn't mean they will then directly expose all those knobs as the interface for the user. Some thoughtfulness is required.
Software design is a subtle art. Some engineers take for granted their relationship with the end-user of the software. Engineers excel at using diverse tools to create custom software to make a computer do whatever they want. Engineers often favor a toolkit approach, where maximum flexibility is paramount. Ease of use is less important because the engineer is an expert and understands in excruciating detail how the machine works and how her software works or does not work. Fragile workflows or complicated multi-step workflows are considered acceptable if new objectives can be achieved with less total work for the programmer/engineer. Make the machine do what I want. The end justifies the means.
Users on the other hand favor ease of use, abstraction and integration. Users are uninterested in the technical details of how something works and are task-focused. They care about how a task is done (the means), how to remember how to do it, how to discover how to do it, how to avoid extra work. They want their software to just work and they want the interface to reflect the exact state of the data at all times. They value integration, where a single piece of software can do everything they can imagine with their data without having to make the user manage interoperability between multiple applications. They are uninterested in what is possible to do by combining different tools in clever ways and just want an easy, reliable way to go from idea to implementation with minimal fuss. They don’t want to be responsible for understanding the underlying details to accomplish their work or even worse, safeguarding the integrity of their data. They don’t want problems to be their fault. They don’t want problems at all. Their powerful machine and thoughtfully designed software should see to that.