Allen Pike 2016-01-31T21:26:51-08:00 http://www.allenpike.com/ Allen Pike http://www.allenpike.com/2016/parse-joy-of-shortcuts The Joy of Shortcuts 2016-01-31T18:00:00-08:00 Allen Pike http://www.allenpike.com/ <p>Some time ago, we had a client come to us with a problem. Their app was a mess. It consisted of roughly 400 kilograms of copy-pasted Objective-C, written by a departed team member in some kind of over-caffeinated fever dream. There was no server logic, or anything else that would qualify as logical for that matter. It was simply a large, quivering mass of queries to Parse.</p> <p>As a whiz-bang NoSQL Backend as a Service, Parse let people quickly build mobile apps. You just start coding, they said, and we’ll worry about the rest. Your fever dream will only last so long, and any moment you spend worrying about server infrastructure is a moment you’re not furiously typing square brackets or whatever else makes your app special. And you know what, it kinda worked.</p> <h2 id="a-rocket-ship-to-somewhere">A rocket ship to somewhere</h2> <p>Like many other tools, Parse was a shortcut, a temporary simplification, an abstraction. Shortcuts let you move faster from idea to product, helping you focus more on shipping and less on diversions. Just like Interface Builder helps you rapidly prototype your UI and JavaScript frameworks help you get a web front-end up faster, Parse let you defer writing and maintaining a custom server backend until another day. Judicious use of shortcuts like these can make or break a fragile new venture.</p> <p>As nasty as our client’s mass of Parse and Objective-C was, their working prototype allowed them to raise a serious round of funding and collect a waiting list of eager customers. With that funding they hired us to write a new, high quality version of the app, and roll it out to their newfound fans. This is an age-old story in technology: a quick and dirty prototype is a stepping stone to something good. Hell, Objective-C itself started out as just a bunch of macros on top of C. Sometimes, shortcuts are the best first step.</p> <p>Perhaps more importantly though, shortcuts help you fail cheaply. In 2014, the wonderful folks at Panic <a href="https://panic.com/blog/the-2015-panic-report/">built and tested an app</a> to share and discover music. Instead of building a whole custom backend, they put it up on Parse. The app was beautiful, and it worked, but they rightly questioned its revenue potential. They deliberated, and in the end they decided to shelve the project. With that, whatever money they saved by building it on Parse was cash in the bank. When an idea doesn’t pan out, every shortcut taken on the way there is a blessing.</p> <h2 id="i-have-an-idea-for-an-app-please-advise">I have an idea for an app, please advise</h2> <p>The world of consumer software is a sea of uncertainty. Most app ideas simply don’t work out. Still, when you’re excited about your idea’s potential to take over the world, it’s easy to get sucked in to building out a sophisticated scaling infrastructure, loading up on administration and monitoring, and deeply documenting and unit testing your soon-to-be masterpiece.</p> <p>Once that’s done, though, once your miracle of modern software engineering wades out into the red ocean of social apps and flapping poultry, you’re going to be fighting the same battle as everybody else. If you’re lucky, you’ll be clamouring for attention, iterating, and working your ass off looking for success, hoping you don’t run out of time or money before you get there. If you’re unlucky, <a href="http://mashable.com/2012/10/17/color-shuts-down/#N75AVQyT6qqu">you’ll hit a brick wall</a>. Only if you get traction will the price of your shortcuts come due.</p> <p>Of course, as useful as shortcuts can be for proving or disproving an app idea, they’re much more dangerous when your project is more than an idea. While most apps will never get 1,000 active users, others are likely to get hundreds of thousands, if not millions. If your product is highly anticipated, is bringing a popular app to a new platform, or is packing the power of a big brand, you don’t have the luxury of quiet experimentation. That’s when the rigorous work of instrumenting, testing, and building for scalability needs to happen up front. It sounds scary, but <a href="https://marco.org/2016/01/30/mjtsai-sunsetting-parse">it’s easier than it sounds</a>. The hard part is knowing when enough is enough.</p> <h2 id="moving-on">Moving on</h2> <p>Next January, <a href="http://blog.parse.com/announcements/moving-on/">Parse is shutting down</a>. The successful Parse apps will get moved to a custom backend like ours was, perhaps using <a href="http://blog.parse.com/announcements/introducing-parse-server-and-the-database-migration-tool/">Parse’s excellent open-source server and migration tool</a>. The unsuccessful Parse apps will die. Hundreds of thousands of unsuccessful Parse apps will perish. Like links to long-dead Geocities pages, dead mobile apps that relied on Parse will linger in the App Stores for years, slowly accumulating one-star reviews.</p> <p><img style='max-width: 100%' src="/images/2016/parse-trust.jpg" width="100%" /></p> <p>As much as Parse will try to get the word out that they’re shutting down, many apps’ owners don’t even know that they’re reliant on Parse. Parse’s overly generous free plan made them popular with freelancers and consultants building quick app backends for their clients. Many of those clients don’t know what Parse is, let alone that the little app they commissioned a couple years ago is a ticking time bomb.</p> <p>While the death of these apps is sad, it’s unclear who to blame. The majority of them would have died anyway, regardless of what they were built on. The lack of a monthly bill from their server provider kept them shuffling along for a while, but sooner or later, unmaintained software dies.</p> <p>Our industry, the software industry, builds things that are so ephemeral, so fragile. Sometimes software grows, it changes, and it has a long life. Other times it doesn’t, and it’s swept away. Either way, though, these minor calamities help us sort out what kind of things we want to build. Do you want to build bold experiments, take shortcuts, and see where your customers take you? Or do you want to build solid foundations, sturdily engineered, and hunker down for the long haul?</p> <p>Me, I’m still not entirely sure. Either way, I know one thing: I won’t be building them on Parse.</p> http://www.allenpike.com/2015/things-to-omnifocus Some Things about OmniFocus 2015-12-31T18:00:00-08:00 Allen Pike http://www.allenpike.com/ <p>A couple months ago, I made a big change in how I work. After three years of managing my tasks with Things, I switched to OmniFocus.</p> <p>People love OmniFocus. People <em>swear</em> by OmniFocus. Yet somehow, my first day using it was a disaster. It turns out, OmniFocus is a bit like Photoshop: great to know, hard to learn. Given that, I wanted to share my little journey and some of the pits I fell into along the way.</p> <p><img style='max-width: 100%' src="/images/2015/things.jpg" width="100%" /></p> <h2 id="making-the-switch">Making the Switch</h2> <p>For three years I’d been managing my tasks with Things, and it was fine. I get things done on the Mac, and occasionally use the iOS app for quickly capturing a task or checking off shopping items. I don’t formally use <a href="https://en.wikipedia.org/wiki/Getting_Things_Done">GTD</a>, but I’ve come to learn and appreciate its key principles. In particular, the idea of recording the next physical action towards your goal is priceless. “Learn React Native” doesn’t get done, but “Find and run a React Native sample project” does.</p> <p>Anyway, Things was the first task app that ever stuck for me. I lived out of its Today view, which highlights tasks that are due or that you’ve chosen to do today, and lets you schedule tasks to appear in Today sometime in the future. This worked relatively well – for a while.</p> <p>Over time though, my job got more complex, and I got better at logging what I needed to do. Eventually, the number of tasks I was managing outgrew Things’ workflow. I’d end up with these massive defer-bombs, where I’d wake up some days with 50 tasks in my Today view. It was getting too hard to focus on anything.</p> <p>I needed an app to help me to focus on what’s important, and keep what’s not important out of the way. OmniFocus is recommended so often and so emphatically that it’s the natural next step. Omni also has a reputation as an excellent platform citizen on iOS and the Mac, unlike… some other apps.</p> <p>I knew learning a new task app could be hectic, but I’m okay at computers, so I expected getting the hang of OmniFocus would take perhaps an afternoon. Unexpectedly, my productivity fell into a pit for a week. It was bad enough – and stressful enough – that I almost bailed on OmniFocus entirely. Luckily for me, I was set up to keep pushing forward: I had already paid for OmniFocus, I had tech support from Nigel here at Steamclock, and I had publicly announced that I was making the switch. So, I dug in.</p> <h2 id="welcome-to-omnifocus">Welcome to OmniFocus</h2> <p>On the surface, OmniFocus’s UI doesn’t seem so intimidating. There is no import from Things, which isn’t as bad as it sounds. You can actually drag a list of tasks from Things to a text editor, clean it up, and paste the lines into OmniFocus to re-create them which works okay. Initial input only took an hour.</p> <p>Once I got my tasks in though, I had a fairly serious problem: OmniFocus now held 500 long-term tasks, 45 short-term tasks, and 5 urgent tasks mixed together in its opaque and mysterious puzzlebox. The only task I knew was important was “Tame OmniFocus”. Panic ensued.</p> <p>I started with my inbox, which looked like some kind of <a href="https://en.wikipedia.org/wiki/Superfund">Superfund</a> site. Even though I’d put most of the tasks into projects, hundreds of them stayed in my inbox. In Things, inbox items go away as soon as you give them a defer date or a project. By default though, OmniFocus’ inbox items only go away if you give them a project AND a context AND click “Clean Up”. Deferring them initially does “nothing” since the default view is All, which shows deferred items.</p> <p><img style='max-width: 100%' src="/images/2015/omnifocus-view.jpg" width="300px" />Let’s talk about views for a second. Each perspective in OmniFocus has a View menu. There’s also the usual menu called View, but this is a different thing, also called View, but it’s not in the menu bar, even though a menu comes out of it. It’s a button called View, with a menu in it. It’s the thing with an eye on it, okay?</p> <p>Anyway, this View menu button menu contains filter options, and occasionally also sort options. They reduce what you see in each list, which lets you focus on tasks that aren’t completed, deferred, or blocked. Changing these view settings will update the filter, but only for that Perspective, and by default it won’t save them. You’ll probably spend the first while confused why you’re seeing tasks you didn’t expect in any given list. Expert users rarely permanently change these settings, so the behaviour makes a sort of sense, it’s just poorly signalled in the UI.</p> <p>Meanwhile, as I grappled with trying to hide low-priority tasks, I could hear the distant cries of my urgent tasks, buried in some tab or section, calling for help. I had been flagging important tasks and marking due dates, but they weren’t consistently visible anywhere. There is no clear equivalent of Things’ Today view where I could see an overview of what’s important. The critical tasks were spread all over, hidden behind various perspectives and View settings that aren’t initially intuitive. It was that early paranoia about urgent tasks that made me almost switch back to Things. Luckily, there are a few solutions to this.</p> <p>It turns out that a lot of OmniFocus users use a “Due and Flagged” perspective, which highlights important tasks across all projects and contexts. Strangely though, creating a perspective like this requires upgrading to OmniFocus Pro. While I like the idea of paying indie developers for good software, I was already struggling with OmniFocus’ quantity of features and preferences. I didn’t want to unlock <em>more</em> features, and I also wanted to learn the rules before I started to break them with additional customization. Given that, I decided to try for at least a month to learn how the non-Pro version is intended to be used, which meant adapting my mentality from Things to this new order.</p> <h2 id="the-getting-better-montage">The “Getting Better” Montage</h2> <p>So it was bad at first. A few days in though, I started to feel like I was actually successfully using OmniFocus, and my resentment began to fade. By about two weeks in, I was almost as productive at getting things done as I had been with Things. Two months in, I now like it, and understand the UI and product design issues that initially caused me great frustration. It turns out that most of the issues I’d originally considered to be bugs were actually weird consequences of design decisions I didn’t yet understand.</p> <p>Sure, there are a couple actual bugs. There are also two supposed search functions, neither of which works app-wide, which is baffling and frustrating. Luckily, proper search is now on OmniFocus for iOS, so it will likely be on the Mac soon. For the most part though, my struggles with OmniFocus early on looked like this:</p> <ol> <li>What the hell, wow, why is this happening, this must be a bug.</li> <li>Hm, wait, this is more complex than it seems.</li> <li>Oh, weird, there are multiple features and settings colluding here to create this confusion, and now that I’ve grokked them I realize that this is a product design issue and not a bug.</li> </ol> <p>There are a lot of examples of these. Often they’re simply surprising defaults, but most of the issues are tough design problems at the junction of two features, or a choice to favour experienced users over newbies. Now that I understand OmniFocus and its settings, I can work around or live with most of the issues that were initially confusing.</p> <h2 id="omnifocus-for-things-users">OmniFocus for Things Users</h2> <p>Given that, here are some hard-won tips that should help anybody making the switch to OmniFocus.</p> <ol> <li>By default you need to give each item a project <em>and</em> a context to get it out of your inbox. You can make the inbox behave more like Things’ with a setting called “Clean up inbox items when they have either a Project or a Context”, though you’ll still need to hit Clean Up after you assign something to dismiss it.</li> <li>There is no single place to see your due and flagged tasks. The front-line defense for this is to go to the Notification settings and turn on “Show reminders In the Sidebar”. This sounds notification-related, but it actually puts badges in the sidebar for what’s where in the app. You can also create a custom perspective that shows due and flagged if you upgrade to OmniFocus Pro.</li> <li>You’re not going to be able to directly replicate Things’ Today view, but you can use the flag feature in OmniFocus to indicate things you’d like to do today. The nominal Today view in OmniFocus’ Forecast looks like it has a setting to show flagged items, though that actually refers to OS X’s Notification Center.</li> <li>The badge number in the Dock is for how many items are due or due soon, but that number doesn’t appear in the OmniFocus UI. You can see these items in the Forecast view, but turning on “Show reminders In the Sidebar” makes it a lot easier to find them across the app.</li> <li>If you defer an item and expect it to go away but it doesn’t, there are a few reasons this may be happening. Sometimes a change you made to a task requires you to hit Clean Up, or ⌘K. This is just a thing. Also, check the View menu button menu, which may be set to All for your current perspective.</li> <li>Remember that View button changes are only semi-firm by default, and they go away when you click a perspective – including the active one. I hope in the future they highlight when you’re in a non-saved View mode, perhaps with a conditional Save button.</li> <li>The Inspector sidebar on the right is daunting, but you can do almost everything without it, since all the little bits of metadata on a task are clickable and changeable.</li> <li>Don’t worry about letting some tasks have the default project of Miscellaneous. Over time you’ll probably find using a dozen projects and two or three contexts is worthwhile, but Miscellaneous works fine, analogously to Things’ Next bucket.</li> <li>OmniFocus’ UI puts an emphasis on giving tasks a Context, such as Home or Office. This seems weird, but it is helpful to focus on work tasks when there’s just no way you can, for example, take out the garbage. When looking at a Context, there is an option in the View filter button menu button to sort by “Due Date &amp; Flagged.” In general this a good working view.</li> <li>If you give a project a Context, then things you put in that project will have that Context by default. If you’re going to use Contexts, this is highly recommended.</li> <li>If you have list-like projects like future blog topics or podcast guests, you’ll probably want to mark those projects as On Hold with a context like List or they’ll make a mess in your other perspectives.</li> <li>Tasks only have a sort order in the context of their Project. A consequence is that you can’t reorder tasks in the Forecast or Context perspectives, which is really annoying. If you want to reorder your day’s tasks as you work on them like in Things, you need to have them in the same project, or make some sort of fake Today project.</li> </ol> <h2 id="control-you-must-learn-control">Control, you must learn control</h2> <p>Most of these problems only matter in the initial days of learning OmniFocus. While I was surprised at how hard it was to ramp up on, it’s hard for the same reasons Photoshop is. Feedback on pro apps comes from advanced users that already understand all these things, and so they ask for even more settings and ways to modify stuff. And so turns the wheel of pro app development.</p> <p>That said, I think that there’s a lot of opportunity for OmniFocus 3 to retain its power and flexibility, but offer a smoother ramp for learners. Tutorials and support are helpful, but things like comprehensive tooltips and other UI improvements could go a long way to making tutorials and support less necessary.</p> <p>The issue of surprising defaults is more subjective. On one hand, I had a much easier time navigating OmniFocus once I turned on the settings to reveal more badges and indicators. On the other hand, the product is about focus, and you could argue that too many badges and indicators isn’t ideal.</p> <p>In any case, the people at Omni are entirely awesome, and they really do care about this stuff. I shared an initial draft of this with a member of the OmniFocus team, and apparently a lot of these issues are already on their radar, which is great. I’m looking forward to seeing what’s next.</p> <p>And really, as difficult as that first week was, if I had the choice I’d definitely make the switch again. Ideally, after receiving a few tips from my future self.</p> http://www.allenpike.com/2015/the-worst-app The worst app 2015-11-24T18:00:00-08:00 Allen Pike http://www.allenpike.com/ <p><em>Update: This story now has <a href="#update">a happier ending</a>.</em></p> <p>One of the various things I do at Steamclock is provide support for our apps. Our music apps don’t require much support, and much of the email we get is positive, so tending to support is generally pleasant.</p> <p>Or at least it was pleasant, until recently. On September 30 I received a very concerning support email.</p> <blockquote> <p>Subject: Report &amp; Contact</p> <p>My app keeps skipping when i close to my lock screen or go on a different app, and it also keeps taking forever to play the song when i click on it, and it wont play song after song i have to manually click on a new song after one ends. Can i get a reply to these issues please?</p> </blockquote> <p>This is a terrible kind of email to get - it points to serious low-level problems with the audio engine, perhaps a media playback API regression or other critical bug.</p> <p>I responded immediately with some questions. I asked for some further details like the OS version and device, and I asked whether they’re using Party Monster or WeddingDJ. My worry turned to confusion when I received the reply:</p> <blockquote> <p>I am using the app Play Tube Pro-playlist manager.</p> </blockquote> <p>You’re using… what? I tried to clarify but got no response. Wrong number, I guess.</p> <h2 id="please-help-me">Please help me</h2> <p>A month later, I received another foreboding support email.</p> <blockquote> <p>Subject: Report &amp; Contact</p> <p>Is not functioning very well Please help me</p> </blockquote> <p>How terrible! We never want a customer to feel like that after using one of our… wait a minute. Report &amp; Contact? I’ve seen that before.</p> <p>I apologized to the user for what they were experiencing, and asked for a link to the specific app they were having trouble with. Bizarrely, they link me to an app I’ve never seen before: <a href="https://itunes.apple.com/us/app/music-player-playlist-playtube/id1050536218?mt=8">Music Player &amp; Playlist Playtube manager</a> by Vi Tran, a shovelware YouTube app with a 1.5 star rating.</p> <p>Well, that explains it! These weren’t emails for a Steamclock app at all. I promptly made a TextExpander shortcut to explain that it’s not our app, and to contact Apple. Case closed, not my problem.</p> <blockquote> <p>Subject: Report &amp; Contact</p> <p>Hi please I cannot play music</p> </blockquote> <p>Sorry about that, not our app my friend.</p> <blockquote> <p>Subject: Report &amp; Contact</p> <p>No va bien es una mierda</p> </blockquote> <p>I don’t speak Spanish but that doesn’t sound very good… still, it’s not our app.</p> <blockquote> <p>Subject: Report &amp; Contact</p> <p>That’s the worst app I have ever purchased, it’s not even working and why the hell do you think you can put adds while I paid for that horrible app.</p> </blockquote> <p>Turns out, this is my problem. One email a month turned into one a week, then one a day, then multiple every day. Soon I was spending more time dealing with support for Music Player &amp; Playlist Playtube manager than I was for our actual apps. Particularly frustrating was the fact that many of the emails described problems that could plausibly occur in our apps. It was time to dig deeper.</p> <p>The App Store page revealed little, other than that I wasn’t the only person unhappy with this app. If you think the App Store reviews on good apps are negative, you should see the reviews on bad apps.</p> <blockquote> <p>👎 ★☆☆☆☆ <br />by stephaniechabot12983456688</p> <p>THIS APPLICATION IS REALLI NOT GOOD!!! I CANT LISTEN TO MY MUSIC!! AND WE NEED TO PAY!! OHHH HELL NO!!!!</p> </blockquote> <p>Well said, Stephanie.</p> <p>The app’s website link on the App Store went to <a href="http://skyhdapp.com">an unrelated company</a>, and the copyright credit was for <a href="http://wonderbox.io">another unrelated company</a>. I contacted them, and they were as confused as I was. With no way to contact the actual creator of the app, the only solution was to get Apple to pull it.</p> <h2 id="time-to-die">Time to die</h2> <p>Now, the App Store review process is a mixed bag. While it definitely has some problems, its fickle nature has an upside. When an app is in egregious violation of common sense and decency, Apple can simply pull it from the store. All you need to do is contact Apple about the app.</p> <p>Unfortunately, one does not simply contact Apple about an app. The official way to complain about an app is via the “Report a Problem” link from when you buy the app. Of course, I’m not going to <em>buy this scam app</em> just to complain about it, so I dug up <a href="https://getsupport.apple.com/">an alternate form</a> to report a problem. Maddeningly, one of the required fields on that form is an order number - the one you receive when you buy the app. Stalemate.</p> <p>For a few more days I stewed. As each app victim wrote in, I asked them to contact Apple and complain, using their precious order number. Pretty soon, people started to report back that they <em>had</em> contacted Apple:</p> <blockquote> <p>I <strong>did</strong> they said to contact you!<br /> If I was owing money to you guys God forbid I would get black listed because it the other way around nobody has the decency to help!! Not good enough.</p> </blockquote> <p>Ookay. It seemed I had no choice - I had to get to the root of this. I pulled out the Steamclock credit card and, for $3.49 CAD, I bought Music Player &amp; Playlist Playtube manager.</p> <h2 id="into-the-breach">Into the breach</h2> <p><img style='max-width: 100%' src="/images/2015/playtube-screenshot.jpg" style="width:250px" /> I must say, Music Player &amp; Playlist Playtube manager is a truly remarkable app. Its novel colour scheme of black, gold, grey, and coral breaks new ground. The various bugs that immediately present themselves prove that this developer understands how important it is to “always be shipping”. Perhaps most notably, in a market suffering a race to the bottom, this developer showed true entrepreneurial spirit by charging $3 <em>and</em> putting up a full-screen modal advertisement every few seconds.</p> <p>As interesting as the app was, my attention immediately fixated on the prominent menu item titled “Reporting”. Tapping this composed an email – addressed to me, titled “Report &amp; Contact”, and eager to capture your thoughts and feelings about the app.</p> <p>I took some notes and screenshots and contacted App Store support. I explained that the app was buggy, not working as advertised, and instead of providing a way to contact the developer, was redirecting their angry support email to me. I asked them to pull the app.</p> <p>Their initial response was, remarkably, that I should contact the developer. Now don’t get me wrong, as a developer I’m glad that’s in their script. Still, in this case, not so helpful. After some further explanation they refunded my purchase – the one I made so I could ask them to pull the app – but beyond that would only direct me to the generic <a href="http://www.apple.com/feedback/itunesapp.html">feedback form</a>. Rest assured, I filled that form with an incredibly convincing explanation of why the app was toxic waste and should be pulled. So far though, it hasn’t swayed anybody.</p> <h2 id="electric-boogaloo">Electric Boogaloo</h2> <p>Yesterday I got an unexpected email, congratulating me on launching some app called “Feeling Drawing”. I checked the store, and sure enough a new app had just gone live, featuring virtually the same icon as the Playtube app, but this time called Feeling Drawing and attributed to “Solaro Nohimdad”. This time, the app’s support website was listed as steamclock.com. They even went as far to proclaim the app “© Steamclock”. In the immortal words of Stephanie, OHHH HELL NO.</p> <p>I immediately <a href="http://www.apple.com/legal/internet-services/itunes/appstorenotices/#/issues">reported trademark violations</a> on both apps to Apple Legal. The good news is that they pulled Feeling Drawing from the store within 24 hours. The bad news is that Music Player &amp; Playlist Playtube manager is still at large, laying waste to customers’ sat worldwide.</p> <p>I suspect that sooner or later, whether due to my tortured wails or the deluge of one-star reviews, Apple will pull this particular piece of garbage. Even when that happens though, many questions will remain. Does the App Store need a formal policy on app support? How many more junk apps are they going to put up and attribute to us? Am I on a shockingly convoluted and drawn-out episode of <a href="https://en.wikipedia.org/wiki/Punk%27d">Punk’d</a>?</p> <p>Anyway, time to get back to work. It looks like I have a bunch of support email to answer.</p> <hr /> <p><strong>Update:</strong> <a name="update"></a>Multiple helpful folks from Apple promptly reached out about this post, and I see that Music Player &amp; Playlist Playtube manager has now been removed from the App Store. This is a win for users and a win for my support inbox.</p> <p>In the longer term, I hope they put together a policy to deal with this kind of scam. This is surely not the only offending app. In fact, I was notified today that <a href="https://itunes.apple.com/us/app/calo-caculator-premium/id1059599767">another scam app just went up</a> that uses our website as their support link. Still, forming good policies takes time, so I wanted to thank the folks at Apple. They do care.</p>