Linux with a Macbook Touchpad Feel, Pt 2

Since my last laptop upgrade to a Dell Precision, I have made it an ongoing project to try to match my laptop (running Arch via Antergos) touchpad to the smooth & predictable operation of a Macbook Pro. It has been a long road, but at this point I have a setup that I think compares favorably to a Macbook experience.

In my previous entry, I covered the three available options for Linux touchpads before settling on mtrack as my touchpad driver of choice. In the weeks since, I have walked back this decision due to the jittery behavior of the mtrack driver when one slides a thumb in an effort to click. I frequently found myself barely missing my click target, and that’s no way to live.

So I returned to review my three options. In spite of its halting development progress, the next best option seemed to be the Synaptics driver. The fact that it was initially included as the default drive for Arch added to its credibility.

Having opted for Synaptics, the foremost challenge became locating a single concise & authoritative source to explain all available Synaptics touchpad driver options. Read on for a link to that source. I will also share my current touchpad configuration, with annotations on the updates I made to maximize the consistency & elegance of my touching experience.

Installation

Since Synaptics is the default driver for many Linux distros (including Ubuntu and Antergos, to my knowledge), you might well be running the Synaptics driver already. The easiest way to determine is to run

cat /var/log/Xorg.0.log | grep synaptics

If you see output like the following, you’re in good shape:

[ 16885.807] (II) LoadModule: "synaptics"
[ 16885.808] (II) Loading /usr/lib/xorg/modules/input/synaptics_drv.so
[ 16885.808] (II) Module synaptics: vendor="X.Org Foundation"
[ 16885.808] (II) Using input driver 'synaptics' for 'DLL07BF:01 06CB:7A13 Touchpad'

If not, chances are there is a configuration file for libinput or mtrack that has a lower alphanumeric file name in either /etc/X11/xorg.conf.d/, the first directory Xorg looks for touchpad config files, or /usr/share/X11/xorg.conf.d/ its secondary location. To get your laptop to choose Synpatics over other drivers, you must change the filename of your Synaptics driver config file to have a lower alphanumeric precedence than its competitors. I.e.,

bill /usr/share/X11/xorg.conf.d $ ls -l
total 16
-rw-r--r-- 1 root root  1350 Dec 25 05:03 10-quirks.conf
-rw-r--r-- 1 bill users 1935 Jan  7 11:03 30-synaptics.conf
-rw-r--r-- 1 root root   951 Dec 20 09:24 40-libinput.conf
-rw-r--r-- 1 root root  1753 Nov 18  2016 70-mtrack.conf

In my case, my Synaptics driver config file lives at /usr/share/X11/xorg.conf.d/30-synaptics.conf. The “30-” that my config file begins with is a lower number than my libinput or mtrack config files contain, so Xorg chooses to use Synaptics and ignore the other drivers.

Configuration

In my past post, I lauded mtrack for going big on configurability, noting the 50-100 different options available on differing versions of mtrack. The good news is that Synaptics has even more options available than Mtrack. The bad news is that you’re not going to find any one complete & accurate source to learn about all of the options available to you.

This page is the best you’re going to find. It’s pretty good.

After reading through the litany of options available, and experimenting in real world usage, the final Synaptics config file I settled on actually implements relatively few custom options:

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        # Enabling tap-to-click is a perilous choice that begets needing to set up palm detection/ignoring. Since I am fine clicking my touchpad, I sidestep the issue by disabling tapping. 
        Option "TapButton1" "0"
        Option "TapButton2" "0"
        Option "TapButton3" "0"
	# Using negative values for ScrollDelta implements natural scroll, a la Macbook default. 
        Option "VertScrollDelta" "-80"
	Option "HorizScrollDelta" "-80"
        # https://wiki.archlinux.org/index.php/Touchpad_Synaptics has a very buried note about this option
	# tl;dr this defines right button to be rightmost 7% and bottommost 5%
	Option "SoftButtonAreas" "93% 0 95% 0 0 0 0 0"  
        MatchDevicePath "/dev/input/event*"
EndSection

You’ll note that this config file doesn’t setup coasting after a two-finger scroll, since Synaptics enables this by default. The -80 values for scroll delta correspond closely with the rate at which a Macbook will scroll with two fingers. The greatest difference between my Linux and Macbook config is that I have enabled a slight area at the bottom right of my touchpad to function as my right click. After several hours of usage, I’ve found this area sized such that I only end up right clicking when I make an effort to go for the bottom right corner. It’s a handy optimization that prevents me from needing to remove right click from the touchpad entirely.

On to the finer details

The previous post lamented how challenging I had found it to tweak values for the touchpad properties without restarting Lightdm (logging out and logging in again). Since then, I’ve discovered two means that allow experimenting with different touchpad values without requiring a log out/log in cycle. Both methods will allow you to precisely configure your touchpad settings without needing to log out and log back in.

The first method is via xinput, the second via synclient.

Using xinput

The greatest benefit to using xinput directly in changing touchpad settings is that it will work with either the Synaptics, libinput, or mtrack drivers. The second method I’ll outline below (synclient) only works with Synaptics.

To configure your settings using xinput, start by running xinput --list. Note which ID corresponds to your touchpad (for me, it’s ID 13), and then run xinput --list-props id. For example:

$ xinput --list-props 13
Device 'DLL07BF:01 06CB:7A13 Touchpad':
	Device Enabled (142):	1
	Coordinate Transformation Matrix (144):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (274):	1
	Device Accel Constant Deceleration (275):	2.500000
	Device Accel Adaptive Deceleration (276):	1.000000
	Device Accel Velocity Scaling (277):	12.500000
	Synaptics Edges (282):	49, 1179, 50, 878
	Synaptics Finger (283):	25, 30, 0
	Synaptics Tap Time (284):	180
	Synaptics Tap Move (285):	67
	Synaptics Tap Durations (286):	180, 180, 100
	Synaptics ClickPad (287):	1
	Synaptics Middle Button Timeout (288):	0
	Synaptics Two-Finger Pressure (289):	282
	Synaptics Two-Finger Width (290):	7
	Synaptics Scrolling Distance (291):	-80, -80
	Synaptics Edge Scrolling (292):	0, 0, 0
	Synaptics Two-Finger Scrolling (293):	1, 0
	Synaptics Move Speed (294):	1.000000, 1.750000, 0.129955, 0.000000
	Synaptics Off (295):	0
	Synaptics Locked Drags (296):	0
	Synaptics Locked Drags Timeout (297):	5000
        ...

Each of these property values correspond to properties you’ll find in the Synaptics configuration documentation. To change a value, you would then use xinput set-prop, for example:

xinput set-prop --type=int "DLL07BF:01 06CB:7A13 Touchpad" "Synaptics Scrolling Distance" -70 -70

You’ll note the first string is the copy-pasted name of my touchpad from xinput --list, the second string is the copy-pasted name of the setting that was shown via –list-props, and all of the settings that follow are the values to be used. After running the command above, when I re-run xinput --list-props id I see Synaptics Scrolling Distance (291): -80, -80, meaning my natural scroll is about 15% faster than before.

Using synclient

One benefit unique to the the Synaptics driver is that it comes with a dedicated utility for configuring its setting values. You can see all current applied settings by invoking synclient. You’ll see something like

$ synclient
Parameter settings:
    LeftEdge                = 49
    RightEdge               = 1179
    TopEdge                 = 50
    BottomEdge              = 878
    FingerLow               = 25
    FingerHigh              = 30
    MaxTapTime              = 180
    MaxTapMove              = 67
    MaxDoubleTapTime        = 180
    SingleTapTimeout        = 180
    ClickTime               = 100
    EmulateMidButtonTime    = 0
    EmulateTwoFingerMinZ    = 282
    EmulateTwoFingerMinW    = 7
    VertScrollDelta         = -70
    HorizScrollDelta        = -70
    ...

Again, you can consult the Synaptics settings documentation to map these esoteric names into actual behavior. Setting a new value is then simply a matter of running synclient VertScrollDelta=-80

Persisting configuration changes

After you’ve tweaked your touchpad to your satisfaction, you’ll need to propagate all your settings changes back into the config file we discussed in step one. The only bit that can make this challenging is if you used synclient, the variable names used by synclient can differ significantly from those that are known to xinput when it goes to configure your touchpad upon login.

If you’re not sure how your synclient values correspond to values you would feed to the Synaptics driver config file, use the steps from the “Using xinput” section above to list all the properties for your touchpad. Here, you’ll be able to see the config setting names that xinput knows for your touchpad, as well as the values it is currently using. For example, xinput --list-props tells me that after tweaking in synclient, I set up my button regions as follows:

Synaptics Soft Button Areas (314):	1079, 0, 760, 0, 0, 0, 0, 0

I can then copy those into my config file 30-mtrack.confas follows:

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        ...
        Option "SoftButtonAreas" "1079 0 760 0 0 0 0 0"
EndSection

After the setting values have been saved in your configuration file, they will be applied automatically upon restart/login.

Toward a Linux touchpad as smooth as Macbook Pro

Update: After continuing to use my system, I opted for the Synaptics driver instead. Learn why in my follow-up.

As a longtime Macbook Pro user, I’ve grown an insatiable appetite for exceptional hardware+software implementations of laptop functionality like suspend/wake, bluetooth, wifi, and touchpad.  If there’s anything that my past Linux laptops taught me, it’s that these functions are not automatically perfect [insert shock here]. They seem easy & perfect only when they work flawlessly, and they work flawlessly only because Apple employs large teams of experts to test & polish the hardware/software interplay on a Macbook such that it feels perfect.

Since Apple gave me and the rest of the Developer community the heave-ho with its decisions on the latest generation of Macbook Pro [1], it has been a long & harsh journey toward getting a laptop experience that feels as flawless as my Macbook Pro did. But after weeks of experimentation, I wanted to share my current touchpad setup, which feels like it is approaching the buttery smoothness of my past Macbook Pros.

Touchpad options

There are two good articles on setting up a touchpad with Linux (Arch, Antergos, Debian, Ubuntu et al). As these articles explain it, there are three touchpad drivers available on Linux: synaptics (no longer supported), libinput, and mtrack. Preferring to avoid starting with abandonware, I narrowed my search down to libinput and mtrack. The choice between these options was made easier by reading the libinput philosophy not to implement features that aren’t likely to be needed by mainstream users. In their words: “In the old synaptics driver, we added options whenever something new came up and we tried to make those options generic. This was a big mistake… we’re having none of that” Practically speaking, this means that the limit of configurability in libinput is far more limited than the 1,001 settings offered by mtrack.

This isn’t to say that mtrack is a flawless choice. This is not a driver being supported and tested by teams of users & experts. It has no visual settings panel that I’m aware of, all configuration is done via text file. And the correct version to install is initially ambiguous. The officially developed version hasn’t been advanced since 2015, so a popular fork has taken up the torch in recent years. This is why Dayne’s Medium Post recommends installing directly via git. And I recommend the same.

Installing mtrack

Here are the basics to get the latest mtrack installed on your system:

cd /tmp
git clone https://github.com/p2rkw/xf86-input-mtrack.git
cd xf86-input-mtrack
./configure --with-xorg-module-dir=/usr/lib/xorg/modules
make
sudo make install

At this point you’ll have mtrack’s driver files built/installed, but Xorg still calls the shots in enabling it vs other drivers. By default, mtrack’s xorg configuration file gets placed in /usr/shared/X11/xorg.conf.d/50-mtrack.conf, which in my case meant its precedence was lower than both synaptics (placed in /etc/X11/xorg.conf.d, which takes precedence over the /usr/shared/X11/xorg.conf.d directory) and libinput (which initially had an alphanumerically lower file name (40-libinput.conf) than 50-mtrack.conf. To fix these issues, your best bet is to move your mtrack.conf file to a location/filename with higher precedence:

sudo mv /usr/share/X11/xorg.conf.d/50-mtrack.conf /etc/X11/xorg.conf.d/10-mtrack.conf

Once you’ve done these steps, mtrack should become your default touchpad driver after restarting X server. Of course, this being Linux, there is no single answer as to most easily restart X server. These people think that you can simply run startx, but that didn’t work for me without sudo, and when I ran it with sudo, I ended up setting root permissions on a file (~/.Xauthority) that prevented me from logging in. This well-rated response thinks you can sudo restart lightdm, which did work for me (albeit with different syntax since I’m on arch), but still ended up logging me out, so my official recommendation for re-starting X server is unfortunately to log out then log back in. At that point, if you run cat /var/log/Xorg.0.log | grep mtrack you should see a series of messages that show mtrack being loaded. If you don’t, this was the best thread I found for diagnosing what input driver is actually being used. If you find anything interesting, please do post it to the comments.

Crafting the dream touchpad experience

Once you get mtrack functional, then begins the process of creating a configuration file that best approximates Macbook Pro settings.  Here is my annotated config file:

# https://github.com/p2rkw/xf86-input-mtrack
Section "InputClass"
MatchIsTouchpad "on"
Identifier      "Touchpads"
MatchDevicePath "/dev/input/event*"
Driver          "mtrack"
# Sensitivity controls how fast your cursor will move. 1 is the default
Option          "Sensitivity" "1.1"
Option          "FingerHigh" "5"
Option          "FingerLow" "5"
Option          "IgnoreThumb" "true"
Option          "ThumbRatio" "70"
Option          "ThumbSize" "25"
Option          "IgnorePalm" "true"
# This ignores tap-to-click, which causes more problems than benefit in my experience
Option          "TapButton1" "0"
Option          "TapButton2" "0"
Option          "TapButton3" "0"
# If you want a middle-click, then "ClickFinger2" should be value "2"
Option          "ClickFinger1" "1"
Option          "ClickFinger2" "1"
Option          "ClickFinger3" "3"
Option          "ButtonMoveEmulate" "true"
Option          "ButtonIntegrated" "true"
Option		"ButtonEnable" "true"
# "ButtonZonesEnable" means that your trackpad gets divided into three equal sections, where clicking any third of the touchpad sends the click code in "ClickFingerX". Since I didn't want middle-click, the left two thirds of my touchpad are left click, and the right third is right click:
Option          "ButtonZonesEnable" "true"
Option          "ClickTime" "25"
# Ensures that bottom 5% of touchpad doesn't register taps
Option          "EdgeBottomSize" "5"
Option          "SwipeLeftButton" "8"
Option          "SwipeRightButton" "9"
Option          "SwipeUpButton" "0"
Option          "SwipeDownButton" "0"
Option          "SwipeDistance" "700"
# ScrollCoast makes touchpad feel a bit more Mac-like, although it coasts in chunks and isn't relative to speed at which two finger scroll was happening
Option          "ScrollCoastDuration" "600"
Option          "ScrollCoastEnableSpeed" "0.05"
# This sets up Macbook-like natural scroll. If you want to scroll down by swiping your fingers down, reverse the "5" and the "4" here:
Option          "ScrollUpButton" "5"
Option          "ScrollDownButton" "4"
Option          "ScrollLeftButton" "7"
Option          "ScrollRightButton" "6"
# Without this option set to a high value, there are types of click+hold-and-move functionality (most easily reproed by click and then move up-right) that get ignored
Option          "Hold1Move1StationaryMaxMove" "1000"
# Smaller ScrollDistance translates to faster scrolling. ScrollDistance of 10 scrolls a long page in one swipe.
Option          "ScrollDistance" "22"
Option		"ScrollClickTime" "12"
Option		"ScrollSensitivity" "0"
EndSection

In a more perfect world, Wordpest wouldn’t have removed the indentation in that block. It is not the world in which we live.

Future improvements

Compared to the miserable touchpad experience I had endured with synaptics and libinput, it has been delightful to get reliable two-finger scrolling that coasts, and to get my two-finger scroll speed comparable to what feels normal from my time in OS X. Still on my list to try to improve the configuration as I move forward:

  • Fix the couple pixels that touchpad tends to stray when I am setting down my thumb in an attempt to click (classic Linux touchpad annoyance)
  • When beginning a new scroll action while coast is active, scroll occurs at 10x normal speed
  • Setup two-finger scrolling to work as smoothly as OS X, rather than scrolling the page in small, discrete increments
  • Determine if it’s somehow possible to restart X server without getting logged out (unlikely, given how much Googling I’ve done on this topic)

Footnotes
[1] While the touch bar is as bad for programming as numerous developers predicted, it was minuscule amount key travel inherent in their butterfly keys that served as my breaking point. Honorable mentions to the laptop hard crashing every few days, and the touchpad that is so impossibly large as to occasionally pick up spurious input (although their software integration makes that problem occur a fraction as often as it would for a comparable Linux laptop)

Fixed: My i7 Intel Dell Laptop is Ridiculously Slow

Most of the Google results I found when digging around on this subject pointed to usual boring causes of slowness: too many programs being run on startup (which you can test with ms-config if you’re running Windows), anti-virus software, and other boring stuff of that sort. In my case, I had been running Ubuntu so most of those tips are moot. But to be thorough, I did remove practically any and every resident program that was running on what should have been a zippy Dell Latitude E6520 with a i7-2720QM (2.20GHz, 6M cache) processor.

And yet, running a utility that averaged about 5 seconds on my desktop consistently took 30 seconds on my laptop. Except for every once in awhile, when it would take 6 or 7 seconds.

Before splurging for a new laptop, I decided to take a peek through my BIOS settings and managed to stumble across the culprit: the Intel “Speed Step” feature. On my Dell, this was under the “Performance” settings. I guess that the idea of Speed Step is that the i7 powers itself down when it decides you’d like your system to perform like a 486. Whatever the logic is that determines when to power down was clearly NOT working as intended on my laptop. After disabling Speed Step, I have been running for the entire day at speeds very similar to my desktop.

Hopefully someone else thinks to Google for this problem and find themselves helped by a similar approach. FWIW I suppose that this might mean that the laptop uses more battery, but you can be an informed consumer about whether you want to run fast or power-efficiently.

Why’s “open link in new tab” not working in Safari + iOS 10 + iPhone 7?

From the files of “endlessly frustrating problems that Google wouldn’t help me with.”

When I bought my iPhone 7, I couldn’t open links in new tabs in Safari for the first six months I owned it. Whenever I tried to hold a link to open it, Safari would sometimes ignore me, sometimes it would start showing a preview of the destination for that link. Which behavior it chose to do seemed to depend on the whether Mercury was in retrograde.

After much searching, I eventually learned this behavior isn’t a “bug.” According to Apple, it is the “feature” that they have long been marketing as “3d touch.” That is, your iPhone is now paying attention to how hard your touch your Safari links. If you hold a link “hard,” then, instead of popping up the context menu that allows you to open the link in a new tab, you instead get the obnoxious popup preview of the next page.

The solution to being able to pop the standard iOS Safari context menu? Hold on a link in Safari, but do it lightly, tenderly, as if you were stroking a baby dove.

This is what “intuitive UI” has become on the new iPhone.

PS bonus fix! Have you had trouble moving your iPhone’s icons around since upgrading to iOS 10.1? Guess why. That’s right, 3d touch. As with the above, to move around app icons on a 3d-touch device, you have to touch them ever so lightly.

I will continue waiting for this to feel like a “feature.”

Evernote vs Quip: A note taker’s detailed comparison

Over the past 5 years, I’ve probably spent more time in Evernote than most any other productivity app. I’ve created thousands of notes across Evernote’s OS X, iOS and web clients, becoming intimately familiar with the limitations of each. Over the years, I’ve periodically tested alternatives, mostly when Evernote obliterates my changes via merge conflicts with unsynched notes. I had high hopes for Onenote when I gave it a few weeks’ test run recently, but ultimately determined it was even more fatally flawed than Evernote (not to mention how difficult they make it to import past work from Evernote).

A couple days ago I discovered Quip. It is a multiplatform note-taking app that apparently started as a collaboration platform, and was acquired by Salesforce for $750m in 2016. It sports a reasonably effective built-in Evernote importer, plus an impressive suite of free features. Based on my initial impressions, I’m giving it even odds to replace Evernote as my note-taking app of choice. Yet, like Evernote, it too comes with a set of warts.

Given how powerful-yet-flawed both products are, I’m going to attempt to enumerate, from a note-taker’s perspective, where each shines. Hopefully this list (ordered roughly by impact on my everyday productivity) helps others decide which set of drawbacks is most forgivable to them.

Evernote Advantages

  • Notes can be displayed in grid while ordered by recency of update or other criteria (Quip only allows user-defined sorting in list view…and only on desktop clients at that. C’mon dudes, allowing notes ordered by recency of update is utterly essential feature)
  • Can navigate from note to note with single click, since list of notes remains visible in left pane even when a note is being edited
  • Better UI for text formatting: resides permanently at top of each note (in Quip, text formatting options are hidden behind a sometimes temperamental popout in left gutter)
  • Support for searching phrases (not just individual words)
  • Essentially instant search
  • Not as aggressive about trying to spam all my contacts during install (unlike Quip — forcing me to manually uncheck every Google contact during iOS install. Not a great approach to build goodwill with a new user, Quip)

Quip Advantages

  • Notes are saved in real time as they’re created (!). The note’s text is automatically synchronized to all devices that have the note open. Not only does this fix Evernote’s most fatal shortcoming (merge conflicts), it also allows multiple people to edit the same document concurrently, a la Google Docs
  • Less janky checkboxes for todo lists. They don’t slow down the note when there are lots of them, they can be copy-pasted without introducing weirdness, and their line gets crossed out when you check off your todo item.
  • Spreadsheets with full Excel-like functionality (functions, etc) are natively supported, and can be inserted inline into any note
  • Code blocks can be inserted into any note (!)
  • Variety of attractive pre-built font themes can be selected and set as default for notes
  • Can use across more than two devices for free (Evernote now charges for this functionality)
  • Note’s edit history can be viewed without paying monthly fee
  • More robust feature set for collaboration (collaboration seems to have been the initial purpose behind Quip’s existence) than Evernote. Can add inline comments to any line of any note.
  • More intuitive interface for working with multi-level lists (arrows to move back and forth between list level, rather than needing to use tab+shift)
  • Can organize notes into subfolders within a notebook
  • No upsells as yet in free version

Both apps allow chatting (because everyone wants to chat in their note taking app…right?), and both allow some degree of collaboration on notes (Quip much stronger here). It’s my goal to use Quip as my primary app for the next couple weeks before I make a final call on the victor. If you have experience with either app, would be delighted to hear your power user tips in the comment section below!

Fixed: Rubymine doesn’t show files in “library” directories

If you work on a medium or large-sized Rails project, there’s a good chance that you utilize the vendor/gems or vendor/engines directories to help keep your code organized into modules (as opposed to stuffing hundreds of models, controllers and views into a web of subdirectories in the app folder).

Unfortunately for us, the Powers that Be at Rubymine do not index any of these directories in file or symbol searches under the belief that any file in these directories must be third party library code, and therefore not shown unless one checks the “include non-project files” every time they want to look up their files. Even with this burdensome workaround, one would still find their methods/files listed below any partial matches that may occur in the main project.

The fix is to edit your Rubymine project’s iml file, it’s located at [project dir]/.idea/[project name].iml. You’ll need to find “” and add the following lines below it:

 
...



...

You’ll then need to close and re-open the project, and voila.

I have repeatedly and unsuccessfully lobbied Jetbrains to at least create an option for users to make their own decision about whether vendor/engines and vendor/gems should be treated as libraries, but they have denied the motion, telling me to file a bug for it. I did so, it lives here: https://youtrack.jetbrains.com/issue/RUBY-18315. If you care about this file, you should login to Youtrack and cast a vote for it. Or leave a comment on this blog.

Meta-analysis: best interview questions to spot ideal employees

It’s too hard to find the best interview questions. Even though it’s widely acknowledged that “hiring right” is the make-or-break duty of every growing business, finding the perfect interview question requires sifting through a compendium of books, blogs, and brains.

As a boss, what I want is a broad list of great interview questions, organized by the quality I wish to evaluate (e.g., “hard worker,” “focused,” “team player”). So that’s what I’ve compiled, below.

Read more about the methodology at the bottom of this post, following the questions. tl; dr it involved selectively extracting from all the best books and blog posts I could find in a week of research.

Part one: the most sought-after traits in employees

The most sought-after traits have been broken into four tiers, based on the frequency with which they were mentioned in first-page search results. If you only have an hour for your interview, you probably don’t want to go very in-depth on more than 3 different areas. A popular strategy at bigger companies is to share different areas of evaluation between the team. It helps to ensure that you won’t miss a fatal weakness of the applicant.

If you are going to interview collaboratively, remember that some questions are duplicated between sections. Don’t be that interviewer who repeats a question from the previous interviewer.

Tier One

There is one talent that almost every blog & book regards as critical. Apparently, businesses don’t want to hire a candidate that causes drama and resists management?

  • Team player. Are they friendly, agreeable and upbeat?

Tier Two

These qualities were cited by 75% of publications surveyed, which is to say they are important to virtually every company. “Honesty” is one of the hardest qualities to evaluate in an interview context, but I’ve found a handful of questions to penetrate the interview defenses.

Tier Three

Qualities that were mentioned by roughly half the sources surveyed. Many of the most critical talents Bonanza seeks are located here.

  • Communicator. Do they know how to wield language and be tactful?
  • Leadership. Does this candidate have the tools to be a leader?
  • Ambitious. Every business wants a team that is self-motivated and hard-working
  • Focused. Can they possibly eschew Facebook, Twitter, IM, Hacker News, et al. for eight hours?
  • Problem-solving. Can they work autonomously, surmounting challenges and making decisions lacking manager intervention?
  • Intelligent. Does this candidate have the raw smarts to be proficient at their job?
  • Organized. Can they keep track of the details and prioritize among choices?

Tier Four

These qualities weren’t mentioned as consistently across articles surveyed. It is my personal judgement that they are still important to assess, depending on the role being filled.

  • Passionate. Are they excitable? Do they love their work?
  • Creative. Can they figure out novel solutions to problems?
  • Stable. Loyalty and dependability are essential to team morale.
  • Invested in us. Have they done the homework on the company they’re appyling to?
  • Meat & potatoes. Miscellaneous questions not to forget.

Part 2: My favorite interview questions

This list is the culmination of a week spent combing the internet and popular books for great interview question. I have attempted to choose my favorite versions of the classic questions (e.g., “What’s your weakness?”) such that the version chosen gives the candidate the opportunity to talk in the realm of specific examples.

Do note: some questions apply to more than one category, so are listed more than once. Don’t make a fool of yourself in a collaborative interview by asking the same question twice. Use your communication skills to coordinate questions with your teammates.

Team player, friendly, agreeable, upbeat

  1. What do you think makes a person likeable?
  2. How would a co-worker who likes you describe you?
  3. How would a co-worker who dislikes you describe you?
  4. What qualities in your co-workers bother you most? Do you appreciate most?
  5. If I were to ask your current boss what your greatest strength is, what would he or she tell me?
  6. What do you have Strong Opinions about?
  7. Describe the boss who would get the very best work from you.
  8. What changes have you made in working with others to be more effective at work?
  9. What could you have done to improve your relationship with your worst boss?
  10. What’s a time you disagreed with a decision that was made by your boss? How did you handle it?
  11. Tell me about a time you had a conflict with a co-worker, and how you handled it?
  12. How do you deal with a difficult customer?
  13. What do you feel an employer owes an employee?
  14. Give an example of a time you misjudged someone
  15. When was the last time you were angry?
  16. Can you describe a time when your work was criticized?

Adaptable, flexible, eager to learn

  1. What do you think are the most important attributes of successful people? How do you rate yourself in those areas?
  2. If you could change one thing about yourself by snapping your fingers, what would it be and why? Do you have a plan for
  3. making that improvement?
  4. Tell me about competitor (or similar) businesses you kept up with in your past position. What did you glean from them?
  5. When have you failed? Describe what happened and what you learned from it.
  6. How do you take advantage of your strengths?
  7. How do you compensate for your weaknesses?
  8. What’s the most interesting thing you’ve learned in the past year?
  9. If you were starting college today, what classes would you take? (Alternative: What would you like to learn more about in the next year?)
  10. What books are you reading? (Alternative: What industry publications are your favorites?)
  11. Tell me about the last time you took a risk? Was it the right decision? What did you learn?
  12. How do you keep up with changes in your field?
  13. What was the most useful criticism you received?
  14. How do you measure your own success?

Trustworthy, honest

  1. Have you worked in a position where you felt you weren’t given enough to do?
  2. What was the most useful criticism you received?
  3. If I were to ask your current boss what your greatest weakness was, what would he or she tell me?
  4. Tell me about the last time you had to make an unpopular decision
  5. When have you failed? Describe what happened and what you learned from it.
  6. Tell me about a work incident in which you were totally honest, despite a potential risk or downside.
  7. What’s your greatest fear about this opportunity?
  8. Where does your boss think you are now? [Ed: answer doesn’t matter, smell of truthfulness in response does]
  9. If I looked through your web browser history, what would I learn that isn’t on your resume?
  10. Tell me about some of the gaps in your employment. How did these come about?
  11. May I contact your current employer? May I contact your references?
  12. Why shouldn’t I hire you?

Culture fit, compatible personality

  1. Describe the boss who would get the very best work from you
  2. What will make you love coming to work here everyday?
  3. What type of work environment do you prefer?
  4. What gets you excited outside of work?
  5. If I looked through your web browser history, what would I learn that isn’t on your resume?
  6. Assume that you come to work here. One year from now you go home one Friday evening thinking that accepting this job was the best thing you ever did. What happened during the year for you to feel that way?
  7. How much time per week do you spend working alone? Do you think it should be more or less?
  8. How competitive are you?
  9. Do you have a favorite quote?
  10. What unique experiences separate you from other candidates?
  11. What are the most important rewards you expect to get from your career?
  12. Where do you see yourself in five years?
  13. Which areas of your work are most often praised?
  14. Tell me about the funniest role you’ve had on a job/project?
  15. When you are on vacation, what do you miss most about work?
  16. How would you describe yourself to a stranger at a party?
  17. How do you incorporate fun into your day?

Communicator, tactful

See also: “Team player

  1. Why are you leaving your current job?
  2. Have you given presentations to your peers, either at work or in other contexts?
  3. See that picture frame on the wall? Sell it to me.
  4. What’s a time you disagreed with a decision that was made by your boss? (Alternate: If you know your boss is 100% wrong about something, how would you handle it?)
  5. If you feel strongly about an idea, but a person doesn’t agree with you, what tactics would you use to persuade them?
  6. What’s your greatest fear about this opportunity?
  7. Describe a time where you put in extra effort to make sure a person with whom you were communicating had really understood your point.
  8. Describe a situation in which you dealt with a difficult customer
  9. Why shouldn’t we hire you?
  10. What do you think we could do better or differently?

Leadership

  1. How do you motivate people?
  2. What do you think are the most important attributes of successful leaders?
  3. Tell me about the last time you had to make an unpopular decision
  4. Tell me about the last time you fired someone
  5. How do you decide what tasks to delegate to whom?
  6. How do you bring other team members into your process? (Alternate: How do you get others on board with your decisions?)
  7. Did you inaugurate new processes in your previous position? Tell me about them
  8. Have you been in charge of a budget? How did you balance priorities?
  9. What’s the most difficult part of being a manager for you?
  10. What do your reports find most difficult about your management style?
  11. How do you set expectations with your reports or peers? How do you handle a situation where a report fails to meet expectations (e.g., consistently missing deadlines)?
  12. Describe a situation where you successfully resolved a conflict with a team member.
  13. Would you rather be liked or feared?
  14. Describe a crisis you faced at work. What was your role? How did you resolve it? What were the results?
  15. Do you have a management philosophy? No.

Ambitious, self-motivated, hard-working

See also: “Invested in us

  1. What would your first 30, 60, 90 days look like in this role?
  2. What extracurricular activities were you involved with in college? Since?
  3. What side projects have you done? What was the biggest?
  4. Tell me something that happened at work in the last year that made it a truly great day.
  5. Have you been promoted in past jobs? How did these promotions come about?
  6. Describe a situation in your past job where you were proactive? (Alternate: Give me an example from a previous job where you’ve shown initiative)
  7. When did you first start doing [the job’s requirement]? [Ed note: if they started doing it before required in school, suggests self-starter]
  8. How do you keep up with changes in your field?
  9. How competitive are you?
  10. What are your short range goals and objectives?
  11. Give me an example of a goal you set in the past and how you went about reaching it?
  12. Where do you see yourself in five years?
  13. Do you take work home with you?
  14. How ambitious are you? No.

Focused, tenacious

  1. What are your strategies for making the most of your day?
  2. What do you do when things are slow? (You are lacking for projects)
  3. What do you do when you’re burned out to rekindle your spark?
  4. If you’re struggling with an idea, how do you break through and find a solution?
  5. How do you pass time while waiting for [job specific pause point, like compiling a program]?
  6. Describe a time where you put in extra effort to improve a business process to be more efficient?
  7. What percentage of your time is spent on each of your job responsibilities? [Answer matters less than whether they seem to keep track of it]

Problem-solving, self-sufficient, autonomous, decisive

See also: “creative.”

  1. Describe a time when you were asked to do something you weren’t trained to do. How did you handle it?
  2. Tell me about a time when you made a decision without all the information you needed.
  3. Can you tell me about a time when you discovered a more efficient way to do a routine task? Have you done this repeatedly?
  4. What are some of the Google tricks you use to find answers to your questions?
  5. How do you decide whether to message your boss when you have a tough problem?
  6. How many dentists are there in Poland?
  7. How would you build a toaster for a blind person?
  8. See that picture frame on the wall? Sell it to me.
  9. Tell me about the last time you took a risk? Was it the right decision? What would you have done differently?
  10. Can you think of a time where you were forced to take charge when your manager wasn’t available?
  11. Have you worked in a position where you felt you weren’t given enough to do?
  12. What was the most important task you’ve ever had?

Intelligent, proficient, competent

  1. What are you especially good at compared to others?
  2. Have you been promoted in past jobs? How did these promotions come about?
  3. What’s the one accomplishment you’re most proud of? Why?
  4. What is your greatest professional achievement?
  5. What’s your greatest fear about this opportunity?
  6. Tell me something that happened at work in the last year that made it a truly great day
  7. How would you rate yourself in terms of speed, quality, and self-direction? [Ed: Can they answer a multi-part question?]
  8. In what college courses did you get the worst grades? Why? How do you think it’ll effect your job performance?
  9. Tell me about the last time you took a risk? Was it the right decision? What would you have done differently?
  10. What do you consider to be the most important aspect of your craft?
  11. What do you consider to be the most misunderstood aspect of your craft?
  12. If I asked a co-worker friend what made you most valuable to the team, what would they say?

Organized, detail-oriented

  1. What would your first 30, 60, or 90 days look like in this role?
  2. Tell me about the first 60 minutes of your typical day
  3. What are your strategies for making the most of your day?
  4. Have you been in charge of a budget? How did you balance priorities?
  5. What do you do when you begin a project? How does this help the project go successfully?
  6. What tools do you use to maintain organization? How do you keep lists?
  7. Tell me about a project where you noticed a small detail that made a big difference?
  8. What percentage of your time is spent on each of your job responsibilities?
  9. Describe the top of your desk
  10. Do you always double-check your work? What’s your system for deciding?

Passionate, excitable

  1. What excites you about our company?
  2. What gets you excited outside of work?
  3. Describe the boss who would get the very best work from you.
  4. What are the most important rewards you expect to get from your career?
  5. If you had unlimited money, what would you be doing?

Creative

  1. Tell me about the last time you took a risk? Was it the right decision? What would you have done differently?
  2. Tell me about the last time you found a unique solution to a long-standing problem.
  3. Tell me about the last time you figured out how to save your company money? Did they heed your advice?
  4. Did you inaugurate new processes in your previous position?
  5. What improvements might you make to our business?
  6. Where do you draw inspiration for your craft from?

Stable, loyal, dependable

  1. Why are you leaving current job? Have you brought your concerns with your job to the attention of your boss?
  2. Is this the first time you’ve thought about leaving? What made you stay before?
  3. Why have you had so many jobs?
  4. How do we know you’ll stick around?
  5. Will your current job be surprised to hear you’re leaving?
  6. What aspect of our job appeals to you least?
  7. How does your ideal job stack up to what we’re offering?
  8. Have you been absent from work more than a few days in any previous position?

Invested in us

  1. What about this job most excites you?
  2. What about this company most excites you? (Alternative: What do you know about the company?)
  3. What do you think we could do better or differently?
  4. What advantage do we have over our competitors? (Who are our competitors?)
  5. How does your ideal job stack up to what we’re offering?
  6. Where do you see yourself in five years?
  7. What criteria are you using to choose companies you interview with?

Misc, administrative

  1. Tell me about yourself
  2. Which areas of your work are most often praised?
  3. Is there any question I haven’t asked you that I should?
  4. Salary range expectations?
  5. When can you start?
  6. Are you considering other offers?

Methodology

Settling on the definition for what makes a “great” interview question is a subjective affair. There were a couple rules I applied. I wanted questions that lead the candidate to talk about a specific example; questions like “what’s your management style?” (a common question amongst my sources [1]) are too vague to expect worthwhile insights in return. When in doubt, I considered whether I would be annoyed to get asked the question in an interview (e.g., “Give us one word that describes you“). If so, it’s not on the list. 80% of questions evaluated are not on the list.

Once I decided what I was after, I purchased a handful of Amazon’s top-rated interview books, and visited tens of Google’s top ranked pages on interviewing. Most of my sources are linked in the footnotes [1][2].

Building a dataset from my research, I sought to make two determinations:

  1. What are the top 15 qualities that employers seek in an employee?
  2. What are the most succinct questions to evaluate those qualities?

The first goal was tricky, because often, sources will refer to the same idea in slightly different ways (e.g., “adaptable,” “flexible,” or “willing to learn”). Some qualities, like “problem-solving” and “creative” feel distinct, but related. In these cases, I added links between the two categories to help the reader find related questions.

Still here? Hello!

I’d wager you would pass the “hard-working” and “tenacious” evaluation phases of the interview. So why not check out the many jobs Bonanza is hiring for at the moment? Everyone loves an interview where they know the questions in advance. 🙂

Also: if you have a favorite interview question that I haven’t listed here, please share it in the comments! Around 10% of the questions above were from my personal collection, indicating there are likely still more good questions lurking out there.

Footnotes

[1] Bibliography:

[2] I didn’t start documenting until around half way through my research, so the list isn’t quite comprehensive

Evernote QA Report: Merge & Sync

Hi Evernote,

Your sync and merge has long been broken, and I hope to provide you enough detail to get it fixed here. All the below should be reproducible, let me know if you find otherwise.
List Fruits 1

It starts simple. Create a note in Evernote webview. List some fruits. If you’re anything like me, you probably make a couple lists like this per day. All seems well. Later that day, you remember this list, and have a burning need to add “Starfruit” to it. All looks well?

2015-11-05 16.06.47
But things are not so well, because when we return to the webview, there’s some bad news awaiting:
List Fruits Double Note               ^– Now two notes, instead of one

That’s right, my fruit list has split itself in two lists with edits from desktop and mobile. Similar problems persist as I try to use the document.

Unless one is fastidious enough to sync every note when finished, and then manually sync when resuming on another platform, you are liable (at rate inversely proportional to speed of your internet connection) to soon find yourself with something like this:

Two Syncs Later

Every time I switch devices, I must remember “ensure save,” then pre-sync on the new device (and remember to confirm sync finished). Granted, there are a number of trigger points for syncs, but it’s impossible to be sure which, if any, have triggered/completed. One too-fast move, and I’m back in the ghetto of Mergetown.

I usually don’t even know I’ve been losing list items (to duplicated versions), until I notice the note lags in load/save time. And then I realize there are 10 copies of the list in my note, below the (already long) version I was treating as the “real list.”

I sympathize that getting sync to work reliably across disparate platforms is a hard problem [2]. So why not, instead of fully fixing the sync, just spend a few days fixing the merge?

If you could automatically add new lines to both documents without creating duplicate copies, that would be a good start. If you kept the note differences in the area they were found (not bottom of document), that would help. Source control tools have spent 20+ years building great systems to merge two documents. You can probably crib most of your implementation from a plugin/library in that domain? Or at least mark “duplicate documents” so I know I’ll need to hand merge them?

Thanks for considering these improvements. I take the time to write this because I still believe you’re the best solution in your space. If you could just address this fundamental stuff, I’d reap benefits greater than the (sizeable) time it took to create this report.

[1] Lists featuring fruits.
[2] Albeit the hard problem you ostensibly built your business to solve

Remove green checkbox from Dropbox on OS X

As of November 2015, here’s how to do it with one line of code in console:

mv /Applications/Dropbox.app/Contents/Resources/emblem-dropbox-uptodate.icns /Applications/Dropbox.app/Contents/Resources/emblem-dropbox-uptodate-back.icns

Then you just need to restart Finder. You can do this by opening Finder and choosing “Force quit” from the Apple menu.

The Cnet instructions didn’t work for me.

Is Gmail secure from its employees?

The recent essay from Paul Graham, “Don’t Talk to Corp Dev,” reminded me of a question I’ve wondered from time to time over the years: what would stop Google from accessing a startup’s Gmail (or Google Apps) if it were advantageous to their business negotiations? A part of me always cringes at this thought; it’s too paranoid. It goes against their culture. Still, given how bad an internal breach could be, I was curious to see what language Google would use to assure its users that their Gmail was in safer hands than, say, an Uber itinerary.

The first result I came upon in my Googling was a guy (Christopher Nguyen [1]), who on Quora who gives a clear and explicit description of what Google has done to protect Gmail from internal intrusions. The author describes a tough privacy policy that inspired several upvotes, not to mention at least two separate articles from tech sites quoting his answer as proof of “Google’s policy”. Nguyen concludes: “… ultimately, an internal culture of respecting users’ privacy helps keep [us] in check.” It sounded pretty good, like the sort of approach I’d expect Google to take.

My problem with the answer? It’s not from Google. Dropbox is explicit about how employees access data; I find their policies well-thought out and comprehensive. Evernote’s security is moderately explicit [2] that it has more lax policies [3]. Either way, I can evaluate the security of my accounts from an internal employee who might be bored some Wednesday night.

Meanwhile, Google itself is mum on who internally can read my Gmail, and for what purposes. “Gmail security”-related queries yield results ranging from how to secure your account against external entities to how Google keeps us safe from open wifi. They also assure us that they aren’t manually reading every one of our emails to serve us ads (Really?? So do they contract hamsters to pick all those ads? [4]). But nothing in my Googling can locate a Google-authored document that describes their internal Gmail security policy at all.

Does this lack of explicitness matter? I’m torn. Google’s generic privacy policy paints the picture of a company that cares about security. They seemed to get pretty upset when the NSA spied on their users. And yet, I’ve probably had more conversations in Gmail over the past 10 years than I’ve had in the real world. If there were any service I’d like to see a clear, tough, explicit policy on all aspects of data security, it would be Gmail.

I think their policies are probably as good or better than Dropbox, but at this point they are forcing me to assign an awful lot of credibility to that guy on Quora.

 

[1] Christopher Nguyen says he worked at Google between 2003 and 2008.
[2] See the “Customer Account Access” section
[3] “This [admin access] tool allows our customer service and platform administration teams to resolve customer issues.” Which customer support personnel are accessing? What do they access?
[4] Blog sarcasm