I haven’t shipped many apps, but each time I do, it seems to mark a milestone for me.
My first was Due for iPhone, which debut on the App Store close to three years ago on September 2010, and kickstarted my journey as an app developer.
My second was Due for Mac, which I shipped about a year ago, and marked my foray into Mac OS X development.
Today, I’m shipping my third app—Dispatch, an email client for the iPhone—and it marks the start of a journey with my buddy, Hon Cheng, and our new company, Clean Shaven Apps.
Dispatch, like all apps I’ve shipped so far, grew out of a personal need: responding to, and triaging support emails for Due on the move.
Responding to support emails on the move
For years now, I have been using TextExpander on my Mac to respond to support emails for Due (I still do, but increasingly I prefer to respond to them with Dispatch on my iPhone. More on that later).
There, I said it. If you’ve sent an email to me before and wonder how I can sometimes respond in the next minute with a detailed reply, it’s because of these semi-template snippets that I’ve written and stored over time.
I say semi because no one template can respond to all kinds of email, and I try to personalise my replies whenever I can.
I love TextExpander—it’s hard to imagine how I can get by without it—but there were two issues for me.
First, there wasn’t any email clients on my iPhone that could make use of my TextExpander snippets.
Trying to respond to my support emails on my iPhone for 3 weeks in Japan was the impetus for Dispatch.
TextExpander has had an iOS SDK for sometime, and late in our development, they launched a new SDK that I haven’t had time to check out. Federico also wondered why we decided to build our own snippet engine instead of integrating the SDK, which should be easier for us.
After shipping Due for Mac, and as the number and variations of snippets I have increases, I found it difficult to remember the exact TextExpander abbreviations that are used to trigger them (I have close to 200 snippets related to Due and Due for Mac).
Having an option to use my snippets by searching for a descriptive title or its content would solve my problem of having to remember the increasingly obscure abbreviations that I’ve came up with.
Now that we’ve shipped 1.0, I’ll have time to check out whether the SDK is suitable for Dispatch in future updates.
Triaging support emails on the move
The kinds of support emails that I get can be largely broken down into:
Having support for snippets solves 1 and 2, but not 3 and 4.
I make use of OmniFocus to plan future updates for Due, and being able to triage these feature requests and bug reports into OmniFocus would be really nice, and so that’s what we did.
And while we’re at that, we added support for 14 apps in all, most of them apps we use on a daily basis. Due, as you can imagine, is one of the 14.
So what’s next for Due?
Dispatch took two of us an entire year to ship, and on hindsight, a mail app is probably an overly ambitious project for our first app.
In the past year, I haven’t found much time to update Due, and now you know what I’ve been up to. Juggling multiple projects is an art that I’ve to master.
So the question that must be on your mind is: what’s next for Due?
I’ll be fixing some non-critical bugs that I haven’t had chance to, and hopefully a few new features coming your way. A 2.0 overhaul, of course, is my ultimate goal, but that would take time.
I’ve learnt a lot in the last year working on Dispatch, and I’m excited to make use what I’ve learnt to make a better Due.
Using Due’s Natural Date Parser For Time Conversion
A large portion of my users are based in the States, while I’m based in Singapore myself.
The huge time difference means that announcements made at what seemed like a convenient time for myself (say 3 PM) means an unearthly hour for users on the other end of the world (3 AM in New York, 12 midnight in San Francisco).
Many news websites face the same issue, and they adopt a strategy to post a tweet at different hours of the day in hope to catch their users around the world at a convenient time.
I’m hopeless at time conversion. Thankfully, the natural date parser in Due understands timezone.
If I thought 10 AM made a good time for an announcement, I could schedule a reminder to do a retweet at 10 AM PDT for users in the West Coast, or 10 AM EDT for users in the East, just by typing that directly into the reminder.
Due would then automatically* convert the time to your local time in the reminder’s due date.
This is also handy when you wish to convert timings of product announcements, such as Apple’s Keynotes, to local time.
*If you’re on iOS, you need to tap on the button that appears near the top of the window (eg. ‘Set to 10am PDT’) to set the date and time of your reminder to the detected date and time.
If you’ve any interesting use case or tips to share with fellow users, I’d like to hear from you.
Using Search to Categorize, Tag and Filter
The latest update to Due, version 1.9, introduces Search.
Search was one of those features that should have been in there a year ago, but wasn’t, for a variety of reasons. But I’m glad it’s done now.
Besides using it to search (duh) through long lists of reminders, there is at least another interesting use of it.
One feature request that I’ve gotten is to be able to categorize your reminders (eg. Work, Personal) and filter them if desired.
While I’m not a big fan of categorizing/tagging/lists personally, you can now also do some form of tagging and filtering with the new Search function.
I have a long list of timers created for a variety of uses (tea steeping, exercises, parking ticket expiry, etc). One set of timers that I use frequently is a 15-second rest timer, and a 55-second workout timer for Kettlebells.
Since timers are not currently user-sortable, and are sorted automatically in ascending order of length, a set of related timers (say a 5-minute break timer and a 25-minute pomodoro timer) could easily get lost in a sea of timers.
With Search now, I would tag my 15-second and 55-second workout timers with ‘Kettlebell’ in their titles. That way, I could easily filter out all other timers when I’m only interested in my workout timers.
I don’t categorize my reminders—I treat both personal and work reminders equally. As long as they need to be done at a certain time, I’d like to be reminded to work on them—but I’d imagine users can now tag their reminders by appending the tags (eg. Work, Personal), and filter for them using Search when needed.
Moving forward, I hope to post more tips and tricks and use cases for Due. If you’ve any interesting use case or tips to share with fellow users, I’d like to hear from you.
Due 1.9 has a bug which may cause super slow launches (how ironic) and crash on launch. A critical fix (1.9.1) has been submitted to Apple on Sep 20, 10 AM PDT. Sorry guys.
Due for Mac 1.1: Menu Bar Mode, Notification Center, Retina Graphics
• Menu Bar Mode. Run Due directly from your menu bar, badge it with unattended alerts, and take Due off your Dock if you like.
• Notification Center (requires Mountain Lion). See your alerts in the brand new Notification Center in OS X 10.8 Mountain Lion.
• Retina Graphics (requires new MacBook Pro with Retina display)
• Now supports opening of .dueappgz databases
• Additional options in Preferences > Notifications to highlight and badge Menu Bar icon with unattended notifications
• Added switch in Preferences > Notifications to switch text notification system between Growl and Notification Center
FIXES BUGS WHERE
• Certain 24-hour times are wrongly parsed when typed directly into the time box (thanks Arslan Tolga)
• Certain keyboard shortcuts can increase size of the timer editor window
Due for Mac 1.0.1: Notifications Control, bug fixes
• Notifications Control. Selectively enable or disable Growl notifications, their stickiness, sound or icon bouncing for different types of alerts.
• New default notification behavior: reminders and timers that become due stay on screen and bounces dock icon once. Notification turned off for the sync statuses: ‘Checking for updates…’, ‘Uploading…’ and ‘Upload complete’.
• Separate Growl notifications for items that have just become due vs notifications from auto-snoozing items
• Cmd Return now automatically strips any detected date from title and saves the reminder immediately without further confirmation
• Adding a reminder via the due:// URL with a parseable date/time now automatically selects the detected date/time, ready for deletion or saving on Return
FIXES BUGS WHERE
• There could be no sounds on the Mac if the user had turned down ‘Alert volume’ or ‘Play user interface sound effects’ in System Preferences > Sound
• Item is saved when user has no intention to do so on certain input methods (such as Japanese) where the Return key is also used to select text (thanks Noritaka Kamiya)
• Adding reminders via the due:// URL scheme does not always show the populated item editor if Due is not running, or if window is closed
• Parsing doesn’t take place if reminder is created via due:// URL
• Menu items and shortcuts Show Reminders/Timers/Logbook do not work when window is closed (thanks Alan Dague-Greene)
• Server database can be overwritten with local database even when user has set to replace local database on next sync
• Relative date (eg. in 10 minutes) in the date field anchors off the due time instead of the time now (thanks Dries Geeroms)
• Changing system date and time zone does not refresh the display of dates and times in Due
• Clicking to switch focus between input fields doesn’t hide the natural date parsing help prompt
• Editing the title of an existing reminder with a parseable date/time already present could reset the due date of the reminder
• Overdue timers are not counted as active timers in the status bar
• Changing preferences panel did not stop any preview sound that’s currently playing
• Crash on launch when no Computer Name is provided in System Preferences > Sharing (thanks Christopher Forsythe / Jorge Balandra)
FINALLY, A NOTE
It’s been 2 years since I started making the first version of Due for the iPhone. Due for OS X certainly wouldn’t have been possible without your support, as well as all the kind reviews out there. Thank you, all of you.
Now that I’ve got the 1.0 bugs out of the way and better notification control, my priority would be the #1 feature request: menubar and dockless operation.
And something else exciting. — JJ
Due 1.8.1: New alert sounds, duplicate reminders, updated parsing behavior, easier to modify recurring reminders
★ TWEAKS AND CHANGES IN 1.8.1 ★
✓ Two brand new short alert sounds
✓ Duplicate reminders
Create reminders quickly based on the time and recurrence of existing reminders. Now easier to create a series of reminders at different hours of day (eg. 3 doses of medicine daily).
✓ Updated date and time parsing behavior
Tap on title bar to parse date. Due no longer sets the due date and time automatically when typing in the title, and no longer prompts to remove/keep parsed date in title on saving/dismissing of keyboard.
✓ Easier to modify recurring reminders now
Due now asks if changes should be applied to just the next occurrence, or to all future events when editing recurring reminders.
★ FIXES IN 1.8.1 ★
Slow startup on some devices (thanks Joep Verhaeg and Faisal Choudhury for testing the fix)
Graphic glitch in the tiling of the navigation side bar on the new iPad (thanks @AERG0N)
Bug where swiping left or right when there are no items in Reminders or Logbook crashes Due (thanks @Ken_Haynes)
Bug where Sync on Exit doesn’t download and merge existing changes if there’s no changes made on the device before exiting (thanks Nathan Henrie)
Bug where iPad launches with iPhone launch image when launched through its URL scheme
Bug where syncing from a database launched from an external app crashes Due
Bug where Due refuses to restore/sync databases with spaces in their filenames
Due 1.8: iCloud + improved Dropbox sync, assignable alert sounds, retina-display graphics for the new iPad
★ WHAT’S NEW IN 1.8 ★
✓ iCloud sync
Keep your data in sync across your iPhone and iPad through iCloud.
✓ Improved Dropbox sync
Sync database on Dropbox can now be moved to another location of your choice within your Dropbox folder.
✓ Assignable alert tones
Assign a distinctive alert sound for each reminder. Shows the last two most recently used alert sound for quick access to frequently used alert sounds.
✓ Retina-display graphics for the new iPad
★ TWEAKS IN 1.8 ★
Swiping across a reminder now displays the action menu immediately (thanks Adrian Quek and @honcheng!)
New timers now start with no default value set
Reduced gloss of Due app icon
Updated appearance of Quick Access Timing bar on iOS 5.0 and later
Corrupted databases on Dropbox will now be automatically replaced with database from device without prompting user for further action
Retired Secondary Alerts for reminders in favor of assignable alert sounds; Secondary Alert is now Alarm mode and only applies to timers
★ FIXES IN 1.8 ★
Bug where 24 hour time with hours between 01-07 can sometimes be interpreted wrongly as 13-19
UI bug where a drop shadow appears beneath the last Quick Panel in a reminder list (thanks Vincent Gosselin!)
Bug where unlinking from Dropbox shows ‘Network error’ when there’s none
★ FIXES IN 1.7.4 ★