“We update our app regularly” = delete

I read app release notes because I like to see what an app’s capable of doing. I’ve noticed that some apps have gotten lazy recently and just put something like “we update our app regularly”. When I see that, if I’m not actively using the app, I delete it. If I am actively using the app (I’m looking at you, Dropbox and Facebook), I try to think of other apps I could use instead (e.g. OneDrive, Google Drive, and heck, “nothing” sounds like a good Facebook replacement). See, I feel insulted that they want to just shove new code over my Internet connection onto my device when their changes aren’t even important enough to include in a text file they push to iTunes Connect. So, developers, if your release process is so agile that you release updates regularly, then track what you’re releasing and add it to the notes. Otherwise, I think your release process is crap and I’ll delete your app to keep said crap off my devices. 

Update 7/6/16: The Dropbox app is currently rated 2 of 5 stars in the App Store, despite being a great sync service and listed in The App Store’s “essentials” list. Why? No release notes. 

Oh, and I did delete Facebook (I highly recommend doing so), and switched from Dropbox to iCloud Drive. 

How to replace meetings and improve efficiency

Meetings Are Inefficient

A 5-minute status meeting uses about 35 minutes of productive time for each person in the meeting or on the call.  Meetings are also a poor way to communicate ideas, unless you have a white board, someone taking pictures of the white board, and someone carefully capturing and organizing all the notes from the meeting.  Still, you’ll usually end up with decisions based on the loudest person in the room.

Fortunately with today’s technology, there is a better way.

These techniques apply equally to calls and in-person meetings.  Since remote work is more efficient to begin with, I’ll use “calls”.

Replace The Status Call

This is probably the worst offender of time-sucking.  The 5 minute status or “scrum” call takes about 35 minutes of time for each person on the call.  Imagine: you’re working on something, but at 2pm you have a call.  At about 1:45 you check the clock – there isn’t really enough time to start into a new task, so you putter and find things to do until the call. After the call, you need to get back into what you were doing, which takes another 15 minutes.

There are far better ways to communicate status, which I’ll cover in order from best to least best:

  1. Use a shared task management system like JIRA, Bugzilla, FogBugz, Clarizen, Asana, or Trello (that’s in my order of preference, if you’re looking for a tool to use).  Any tool that lets you create a task, assign it to *one* person, and enter comments will do. Entering time worked and remaining time estimate is a plus. Ability to link tasks in a parent/child relationship is a major plus (JIRA, Bugzilla, FogBugz and Clarizen all do this).
    • Have each person enter notes as they work on a task. Use the lottery clause: “If you win the lottery tomorrow, will someone be able to look at your notes in the task and pick up where you left off?”. At least, have them enter a daily status as a comment. At slightly more than least, have them enter the approximate hours worked on the task and the approximate time remaining. You can make this precise and use it as a timesheet if you like, but in most instances you’ll want to use it as a rough, real-time gauge of how the task is progressing.
  2. Use Email. Send an email to your team (or whoever you would have had on the status call). Or just have them email you daily status, if they’re disciplined enough. I think it’s better to start the discussion though – that way people are just replying and don’t have to remember on their own. Remember: you want them focusing on their work, not on email. Here’s a sample email.

    Subject: Daily status “call”!

    Please reply all with what you worked on, what you’ll work on next, and if you have any blockers!

    Make sure you prepare your team for this – don’t just ambush them with a status call email. For example, if you’re having daily calls already, say “to save time and let you focus on work more, I’m going to try switching this call to a daily email. I’ll email you at the same time as the call – reply with your status, like you would on the call. This way we can all reply when convenient instead of dropping everything for the call”. Keep the same tone in the email that you would in the call. e.g. joke as you would on the call, be serious if that’s your team’s culture, etc.

  3. Use a chat room. I shy away from Instant Messages in general (because they interrupt work), but if you’re using an IM client or a chat room to connect a team (local or virtual – I’ve done it in both environments), it’s a good forum for the daily status call. Just do it the same way I suggested for email above: At a specified time, post “daily status call! Please post a sentence or two about what you worked on, what’s up next, and if you have any blockers!” in the room.

If you have someone who doesn’t provide status, or if you need more status, follow up with them directly (via email or your task manager system). Think if them as someone who missed the call.

Replace The “Discussion” Call – Scheduler

A lot of meetings are “let’s discuss (project scope, ideas for new product, what to do for Kathy’s birthday)”. Or worse, they’re scheduled because someone doesn’t know something so they want to get people on the phone to discuss the something.

I’ll approach this first from the standpoint of the scheduler – you’re the person who wants to discuss something, so you’re going to schedule a call. Stop, prepare, and back off that meeting invite. 🙂

First, what’s the desired outcome of the meeting? A document defining the scope of a product? A document defining a workflow for your coffee ordering process? A group consensus on the color of frosting for someone’s birthday cake?

Then, make a Google Doc (or drawing, or “slides”, but doc is usually best). Put in any information you have. If you’re not sure what to put in, imagine you’ve just started the call: what would you say? Type that into the document. Share it with the people who would be on the call, and invite them to edit and comment on the document.

Google Docs provides an amazing forum to discuss and create. The document serves both as a whiteboard and as a discussion forum. Using the “comment” feature, users can highlight sections of the document and ask questions or, well, make comments. This is the same process that would happen in a well-run meeting: You’d present ideas on a board (or slides), people would discuss verbally, someone would write the ideas from the discussion down, and you’d end up with a final document (which usually someone would have to compile later and email to the team). In a Google Doc, you can do this entire process in one document, stay focused on the emerging document, and achieve the actual outcome without post-processing. The entire process can be done asynchronously (that is, not everyone needs to be available at the same time). The lets you take advantage of people in different time zones (the UK office can edit while you’re sleeping and vice versa). The document also tracks revision history – who changed what and when – so you can drop back to an earlier revision if someone messed up your brilliant idea or see who changed the header to “Dodgers suck!”.

Replace the “Discussion” Call – Invitee

To: Half the office
HOLD: Discuss Feature Scope Kickoff
When: Thursday, middle of lunch until half-past when you were going to do actual work

I’ve covered how to not schedule the “discussion” call, but what do you do if someone invites you to one?

Reply to the meeting invite with the following template. Update your response as appropriate based on the invite.

Hi _____?,

So I can best prepare, can you provide me with a list of things we'll be discussing at the meeting?  Also, is there anything specific you need from me on the call? *

If/When the scheduler replies with the things you’ll be discussing at the meeting, respond to those things via email. e.g. if he/she says “I want to discuss the scope of the widget project and I’d like your input”, reply with the scope, e.g. “I think it’ll take about 5 days, unless we have to ___, in which case add another 3 days”. Then ask, “Is there anything else you need from me on the call?”

This dialog will often kill the need for the call.  If it doesn’t, it’ll at least hone in your purpose for being on the call, so the call time will be as productive as possible.

* Template from The Four Hour Workweek by Tim Ferris, mostly – I may have made minor alterations over the years.  I keep it in a TextExpander snippet.

How to restore your Apple Mail rules from Time Machine backup in El Capitan

I have an elaborate set of rules that manage my work email.  Due to a buggy plugin, I lost them recently.  After a few moments of panic, I started researching.  After piecing together what I found on the Interwebs and knowledge I’d gained while debugging said buggy plugin, I found a safe, reliable way to restore mail rules with or without iCloud sync running. *

  • Quit Mail if it’s running, just to be safe
  • Open ~/Library/Mail/V3/MailData (Select the Go menu in the Finder and hold the option key down to see the Library folder)
  • Click on SyncedRules.plist
  • If you’re syncing your rules via iCloud Drive, do this bit of scariness (if you’re not sure whether you’re syncing or not, open System Preferences > iCloud, click “Options…” next to iCloud Drive, see if Mail is checked.  If it is, you’re syncing rules with iCloud Drive):
    • With sync still on, delete all your existing mail rules (iCloud will try to merge your rules later – this way it’ll merge with nothing)
      • Open Mail
      • Go to Preferences > Rules
      • Select all your rules
      • Click Remove to remove all your rules
        • This deletion will sync to iCloud and your other Macs.  btw, it’s probably a good idea to have any other Macs you sync with on for this just to make sure their rules are kept current.
      • Wait around 5 seconds just in case Mail needs to do something to communicate your rule deletion to iCloud
      • Quit Mail
    • THEN, turn off iCloud sync:
      • Open System Preferences > iCloud
      • Click “Options…” in the iCloud Drive line
      • Uncheck Mail
  • Restore SyncedRules.plist from Time Machine **
    • SyncedRules.plist still selected?  Good, Run Time Machine
    • Go back in time, looking at the “modified” time of SyncedRules.plist, until the “modified time” is just before you broke your rules
    • Click the Restore button.  If/when prompted, Replace the old broken rules file (I mean, keep both if you want, but it’s probably already in time machine and if you wanted it, you wouldn’t be doing all this)
  • If you’re not syncing with iCloud Drive, you’re done.  If you are syncing with iCloud Drive, turn Mail syncing back on now:
    • Open System Preferences > iCloud
    • Click “Options…” in the iCloud Drive line
    • Check Mail

At this point, you can launch Mail.  Your rules should be in the state they were at the time of the backup file you restored.  You may need to enable the rules (click the checkboxes) – I did.  (If you’re curious, I think the reason is that Mail stores the enabled state of rules in RulesActiveState.plist.  You probably could restore that file from Time Machine above if you had a really specific set of on/off settings you wanted to keep – I didn’t try).  If you sync your rules with iCloud drive, the restored rules should now be synced to your other computers as well – the sync happens within a few seconds (if they were online during this process – if they were off and have stale old rules, they should update to the new rules, but I haven’t tried that).

* In case you haven’t been looking around on the Interwebs, With or without iCloud sync is important because if you just restore SyncedRules.plist, it will be immediately replaced when you run Mail if you’re using iCloud to sync your rules.  (I use “iCloud” and “iCloud Drive” interchangeably here – rules sync happens using iCloud Drive).  If you just turn off Mail’s iCloud sync, restore SyncedRules.plist, and turn iCloud sync back on, you’ll get a merged mess of whatever was in iCloud (e.g. the rules you’re replacing) and the new rules.  The technique in this article restores your old rules and syncs them as is to iCloud (because there’s nothing there to merge).

** SyncedRules.plist stores your rules – I used Time Machine, but if you have a backup copy anywhere, e.g. CrashPlan, you can use that too; we’re just replacing the file with the bad rules with a file that has good rules in it.

Using app notifications for marketing could kill your app

I’ve noticed a recent trend in which app development companies misunderstand the purpose of app notifications and try to use them as a marketing tool.

App notifications are a means for your app to communicate timely information to your user that your *user* thinks is important and that is part of the service provided by your app. For example, the Mail app uses notifications to show that a new email message has arrived. Uber uses notifications to show that your car has arrived. Starbucks uses notifications to show an update to your account balance.

Never ever make the mistake of thinking that a notification is in any way similar to your email list. A single marketing notification could, in fact, shut down your company. Imagine this sequence:
* User’s at lunch talking with a friend
* Her iPhone pings
* Expecting something important (to her), she pulls her phone out of her purse
* A notification says “Schedule a ride with Lyft!”
* Seeing the WTF look on her friend’s face, her friend asks “what’s up”?
* Lyft’s soon-to-be-ex user says “stupid notification from Lyft saying I can schedule a ride with them. Duh, that’s why I installed the app.”
* Soon-to-be-Lyft-user’s friend says “huh, I use Uber. They don’t spam.”
* Ex-Lyft user turns off notifications for Lyft to prevent notification spam. Or, just deletes the app and installs Uber.

A non-useful notification is likely to get users to turn notifications completely off for your app. I just did this for “Curbside”, who decided to notify me that I could place an order through them (duh, that’s why I installed the app), and for Lyft, because it notified me randomly that I could book a ride in their app (albeit in a different context, and gender, than in the story above).

Even if your app sends useful notifications (both Curbside and Lyft rely heavily on them as part of their services), a single marketing notification can get your app notifications turned off. That, of course, means that 1) if the user does use your app again, they’ll miss important notifications, and 2) they may have complaints because they didn’t receive a required notification (eg their order is ready or their driver is outside). More likely though, if they have to choose between notification spam or using another app, they just won’t use your app. If your business relies on that app, that marketing notification may have just shut down your company.

Think very very carefully about the notifications you send, and make sure they’re only a necessary part of the service your app provides. If your marketing team is bugging you to add notifications “to increase app engagement”, send them to this article. 😉

Apple Music – Everything You’d Expect from Microsoft

Update 12/24/15: Apple’s worked out the bugs, and Apple Music is now my favorite streaming service, largely because of the integration with Siri that lets you say things like “play some Christmas songs” or “Play Take On Me” and have it play almost any song you can think of instantly. It was a lot of fun having my father in law mention an old song, ask Siri to play it, and route it to the living room speakers (via air play). That’s the kind of user experience we’ve grown to expect from Apple products. 

Original: Apple products aren’t popular because they’re original, they’re popular because they “just work”. Apparently someone forgot that when launching Apple Music.

I really wanted to like Apple Music, but every direction I turn, I hit errors. Let’s take a look at some of my favorites:

  • Turning on and running the music app just after upgrading, it displayed this beautiful screen. The colors are lovely, and it has a custom red “Ok” button.
    Apple Music - We've run into a problem.
    Apple Music Launch Screen Error
  • One of Apple Music’s interesting features is a Pandora style radio station. Select a song or artist and “start station”. This feature uses a system standard error dialog for that old-school look.
    Unable to Start Station - There was a problem starting the station. Try again later.
    Starting an Artist radio station in Apple Music.
  • One of the fun things you can try to do with Apple Music is to play videos by artists you like. When looking at an artist’s page, Apple Music will recommend top videos. Viewing the latest Carly Rae Jepsen video on my Mac Mini shows this lovely dialog. Again, it’s a system standard dialog, but it does feature the new iTunes app logo in the upper left corner. Among the dialog’s features are handy recommendations about how you might convince iTunes to let you view the video, and a check box to make future videos fail to play silently for added confusion in the future.
    iTunes HDCP error message
    iTunes HDCP error message

As for Apple Music’s other features, the iOS app is excellent at crashing in the middle of a video or song. If you get a video to play on the iPad, it displays with a light gray border that you cannot remove. I did manage to get an artist radio station to play once, and Apple Music quickly veered away from anything I’d want to hear. The “You” playlists I’ve tried had about one interesting song in ten.

So, aside from the lovely types of error dialogs, Google Music’s multi-device service seems to be the best for having your music available everywhere, and I’d stick with Spotify and Pandora for streaming and radio services.