Try, Try again

It was soon after I shared a roadmap in the beginning of 2020, that things suddenly changed for the worse around the world. Perhaps for the first time ever, the world truly felt small – united in confusion and hope. A lot was about to change in so many ways this year.

Speaking for myself, the confusion only increased as my favorite time of the year approached; WWDC. This is always the perfect time to re-align one’s focus and app-update strategy for the remaining year. Admittedly, by then I had already lost a lot of valuable time. A few hiccups, setbacks and unplanned surprises along the way (both in my professional and personal life) – and not to mention the many COVID 19 related niggles.

Without going into too much detail – they’re boring, really – the plan was to go into development-overdrive: a major re-write of 2Do’s back-end / UI into pure Swift from the now obsolete, mostly dead Obj-C. Although this sounds like a lot of work – it turned out to be a lot more. Perhaps I set the bar too high for myself or perhaps I was having a hard time making decisions. Or perhaps I had a lot more on my plate ¯\_(ツ)_/¯

At the time of writing I’ve witnessed two WWDCs since the last update I shared. I feel like we’re in the middle of a revolution, one that’s just going to take its time. With these both in hindsight, it has become clearer as to what needs to be done next – for now.

The Goal

As it is with any other app, think of 2Do made up of two distinct parts: the UI (front-end) and the Core Logic / Model / Sync Engine / Plugins / Database (back-end). Okay that sounds like a lot more parts – because they are. The point is, taking a multi-platform, featureful, complex app beyond 2020 has required careful planning and consideration. To all those that ask often: 2Do has not been abandoned. It’s still actively supported, I still care, however it’s also still (due to a series of unfortunate events and setbacks) constantly a work-in-progress. For those interested, here’s a glimpse of the dilemma I’ve recently recovered from, but still suffering through.

Going Native… Or Not

To state the obvious, 2Do is a native app – which means I wrote the iOS, macOS and the Android apps purely for the aforementioned platforms using their designated Software Development Kits (SDKs) in their respective languages (Obj-C / Java) – all in their own time. There’s some shared code between the iOS and macOS (just some) but none that’s shared with Android. For as long as I remember, I have spent 16 to 20 hours straight, every single day – for months in a stretch – on features, improvements, fixes and more. It can be severely time consuming, and tiring, to fix bugs or to implement new features across each platform at times. Besides, how many other native apps are you aware of that offer full feature parity across supported platforms as well as a bring-your-own-data policy? And how many that haven’t charged an additional dime for an upgrade in the last 10 years? Oh yeah.

For this major update, I’ve yo-yo’ed countless times before settling on a UI implementation methodology, only changing my mind once again in order to consider a different approach, all the while calling myself out on being lazy for considering shortcuts. I know this sounds insane, but I’ve invested time, money and effort into a particular approach before giving up and then repeating the same process again, hoping to find a reason I may have missed the last time. For instance, there are a number of cross-platform solutions out there that solve this very problem. Do I get excited at the thought of maintaining and updating a single code-base for all supported platforms (including Windows!)? Absolutely. But do I find any of these solutions attractive? Absolutely not. In my personal opinion, all of the cross-platform solutions out there leave a terrible first-impression. They consume more RAM, are power hungry in some cases and generally slow. The UI feels like a boxed up website and the faux native controls look fake. React-Native is a good contender, however it falls short when you need to customize certain controls for a specific look / feel / usability. 2Do does a lot of that. I refuse to write a non-native cross-platform app that would resemble a google search result in both look and feel. Maybe I’m being irrational, but nothing compares to going fully-native.

For the native-app-loving developers out there, Apple developed and showcased a ground breaking new UI framework a couple of years ago: SwiftUI. By now, SwiftUI has become a force to reckon with. It promises learn-once, write-anywhere. In practice though, it’s still a work-in-progress and after investing time and energy into SwiftUI, it was abundantly clear that I’ll have to give this a pass for now – for at least as long as I wish to support older versions of macOS (10.12 onwards) whilst offering a consistent set of controls / features across all deployed versions. Had SwiftUI been a framework in offering with the ability to back-deploy on older versions of macOS that support Swift 5.x – this would have been a no-brainer. SwiftUI gains new functionality every year with a new release of iOS / macOS but this functionality is not available on older versions of the operating system. It would soon become impractical to propose or expect users to upgrade to the latest macOS version on day one, only so they can install 2Do’s new update that now requires the latest version of SwiftUI.

Next up is Mac Catalyst. Apple originally promised to turn iPad apps into beautiful, native macOS apps – in a click of a checkbox (which later turned out to be several clicks along with potentially a lot of code changes). 2Do already has an iPad app, clearly a perfect candidate – but it also already has a powerful, designed-for-macOS mac app. Would I dump the current macOS app and replace it with an app I know I designed for a Touch-First device? No. Mac Catalyst is also not an option given it’s generally lacking when it comes to customizations and overall painful to deal with (from what I witnessed in a brief attempt), especially if you rely on certain frameworks that aren’t Mac Catalyst ready yet.

What does this all leave me with? The only option to keep things the way they are. I will continue to design, develop and refine each app for the platform it’s targeted for, using the current set of native frameworks offered for iOS / macOS (UIKit / AppKit). This however means each update, on each platform, would take its own time to complete.

My App, My Data

It’s no secret that I’ve resisted the temptation of going all proprietary when it comes to Cloud Sync. Most apps out there offer their own sync solution. It’s easier that way. They have one implementation to perfect – and only one that could ever go wrong. With complete control over the data at all times, from your device to in-transit to the cloud and back again, they’re able to optimize related workflows, streamline their sync implementation and offer additional value added services – but most importantly, they have you locked into their ecosystem. Now that everything you do, from the moment you wake up to your parent’s next anniversary, is stored in their proprietary cloud, you’re most likely to stay with that service out of convenience and simply continue to pay a subscription for the service you’re receiving in return. It’s a great overall experience for the consumer – certainly more profitable for the creator – plus, there’s very little at stake here, other than potentially losing control over your privacy of course, or being unable to sync with a particular service of choice using the app you otherwise now love.

I’ve dabbled with the idea myself at times – but something that would remain as an optional add-on, only for the purpose of offering additional value added features (I’m not going to divulge my super secret, brilliant idea in this blog post, if you’re wondering :P). I’ve even invested time and effort (and money) into its implementation before it, too, fell apart.

All this to say that I’ve come to value the the current policy 2Do has upheld, only after doing the same for BusyCal, and that is to remain entirely cloud agnostic. There’s merit in remaining open. Being able to support potentially any 3rd party cloud service, or open specifications such as CalDAV or Exchange EWS, offers great value to any user whilst staying clear from taking up the burden of managing sensitive user data. For 2Do’s next update, I dream of an app that’s open to syncing with a lot more services out there (Reminders / CalDAV / Google Tasks / Exchange / WebDAV / Dropbox / OneDrive / Google Drive / OwnCloud / Todoist even). And as an additional feature, being able to sync with multiple sources at a time – allowing you to manage your personal accounts as well as our work related accounts all within the same app.

This dream doesn’t come easy though.

The Sync Challenge

Sync – especially when it comes to the number of services it would eventually support – has been one of the most challenging aspects of working on the new update. Although this gives 2Do the freedom to potentially sync with and support any 3rd party cloud service under the sun, it does however impose limitations, several at times, such as features that a particular cloud service may not support, or may do so partially. This is incredibly difficult to model for in your technical designs when you’re working on offering rich functionality within the app itself (projects / checklists / tags / actions / locations / attachments etc) while translating this into a partial representation during sync with a 3rd party service. Given each cloud service is different, the complexity during actual implementation increases exponentially.

All of these limitations then trickle down to the UI. 2Do occasionally has to dumb down its UI in order to support the sub-set of features a particular cloud service may not support. This can be an annoying UI/UX challenge to have to deal with. Do you hide the certain features or do you simply show them as disable? Do you enable the functionality and let items slip through sync, probably confusing them when things appear to be missing on another device?

What’s Taking So Long ?!

So why is it taking me this long to work on an update when competition has added feature X, Y, Z and released version 4, 5, and 6 and just miles ahead in every direction? I don’t mean this in a condescending way, since this is a problem of my own creation – but, I don’t know, maybe because competition doesn’t have one developer working across multiple platforms and multiple apps whilst re-writing the entire back-end (remember the many parts?) as well as the front-end, while also coming up with a sync solution that works across a myriad of cloud services? It’s truly very time consuming and admittedly I haven’t been able to give it the kind of time I had originally hoped I would be able to. BusyCal – the other app that’s taken all of my time – went through a similar period where it took an arm and a leg to get it to the point it is now; yet there are mountains to tread.

The Good… News

There’s actually a point to this post, and some good news to share – if you’d consider calling it that.

I’m actually mostly done re-writing the entire back-end / core-logic / sync engine / automatic undo registration and a lot more, all entirely in Swift. In fact, I’m super proud of the new implementation. It’s beautiful, it’s performant, the sync engine is incredibly capable, robust, scalable and extendable. I haven’t finished supporting all of the services I eventually would want to in the end, but adding support for a new service is going to be a lot less work down the line.

In comparison to the current Obj-C counterpart, the new implementation in Swift is 80% fewer lines of code and is 3x more performant. The implementation is also mostly cloud service agnostic, which means it works by making fewer assumptions about the data it’s syncing, resulting in fewer potential breakage-points / bugs etc.

Apart from the sync engine, the entire database related code, including the model layer has been re-written. It’s robust, supports automatic, reliable undo-redo registration for both iOS and macOS (2Do did not currently support this on iOS, and the macOS version had known limitations), automatic change propagation throughout the UI and has the ability to support multiple windows in future. It’s also extremely performant, optimizing disk reads / writes where possible, with support for concurrency and automatic failover. It’s brilliant. And finally for the first time, I’m proud to say that all of these changes have amazing code coverage (via automatic tests / unit tests) as well as improved internal documentation. Just so much better code in general.

The Bad… News ?

Going back to the challenges I’ve faced, picking the correct approach for re-doing the UI in a way that’s future proof, has haunted me for too long. I’ve come to a conclusion that I’ve been trying too hard. Working on a UI refresh that no one’s asked for. Yes, it would be nice to add support for new UI features and cool new ways of manipulating and accessing your data, but what would be nicer would be an app that feels regularly updated.

My (new) plan is to take a step – no, many steps back. I’ve decided the new update would in fact only ship with an internal re-write of everything discussed, but with a UI that feels mostly similar (although re-written in large parts). Other than minor UI tweaks, I’m going to focus on getting it all working together – supporting all the functions and features it already supports and taking from there. Dark mode, widgets and the works. Simply adding functionality iOS has introduced over the last few years would be enough to get back on track.

Will I finally charge for this update? I really don’t know. I also don’t care about that right now. We’ll see when the time comes. I also no longer consider 2Do a threat to any other app, or vice versa. At this point, I don’t want to feel distracted by what some other app is currently capable of. 2Do has hit rock bottom in downloads, sales and usage. In a way that takes a lot of the pressure off, as I feel this gives me the time and freedom I need to continue hacking away at a sensible pace. I no longer worry about being judged, or the app receiving a one star review because of lack of dark mode or widgets or some other missing feature. To be blunt, all of the currently missing features would take no more than a week to implement if I started today. I just don’t want to add anything new to the already dying, bloated Obj-C code – especially when I know the new code is so much better and fixes so many inherent bugs. I need to – I have to – I must finish what I started. It needs to be good day-one, all brand spanking new from the ground up. I feel I’m so, so close, yet a millennia away from finishing. This frustrates me more than anything.

I’m truly sorry it’s taking this long. I have had to prioritize my time and energy on the various products I support – giving more time to the one that’s doing better in terms of downloads / sales. There’s no giving up on 2Do though, stop asking me if I have. It’s taking a lot longer but I’ve covered major grounds already – there’s just a little more distance to go.

Thank you for staying with 2Do and for all the wonderful emails, words of appreciation and support you send in daily. If you’ve moved on, I’m happy you’re giving others a reason to grow. Either way, I look forward to sharing more news in coming months.

20th November, 2021


I wanted to share a quick update on my current & future plans for 2Do, as well as some other odd bits in general.

Cool fact – 2Do is going to be 11 years old this fall 🙌. It’s surreal to see that it’s still around, and I’m still busy working on the same app day in and day out! It’s a weird feeling, because even family and friends at times can’t believe that’s all I do. “How many updates can an app have? Is there really nothing else you do?” 🙄 Well, if it wasn’t for a major update of iOS / macOS / Android each year to be continuously re-modeling and re-writing portions of your app around, perhaps there wouldn’t be many.

Another cool fact – I’m the proud new owner of BusyCal & BusyContacts 🎉. This happened late in 2017, so it’s been a little while.

I had big plans of preparing a major update for 2Do in 2019 to coincide with its 10th anniversary, but as fate would have it, iOS 13 and macOS 10.15 got announced and created a major support nightmare. This affected all calendar / task management apps (including Apple’s own Reminders app between versions of macOS), but became a major show stopper for BusyCal. We were spending more time replying to angry and confused emails than doing real work. Considering 2Do (and BusyCal) don’t charge a monthly subscription, it was imperative that in order to survive against rising competition, and to remain afloat, I focus entirely on BusyCal to bring it up to speed. Unfortunately this fiasco took away 6+ painful months of my time 🤦‍♂️ This also means I’m now 6 or so months away from releasing a meaningful update for 2Do (other than minor fixes and improvements of course).

Other than several subtle improvements, the update would include what you would expect: Dark mode, Multi-window support (for iPadOS), several new UI related features and enhancements, improved search, improved drag & drop, faster / better sync options, Reminders import, improved integration with calendaring events (which 2Do already supports, but not that visible on the phone), multiple-attachment support and maybe shared lists (without relying on CalDAV). The idea is to modernize and fine-tune the app further, without taking away existing features and annoying many. I also plan to keep 2Do open – i.e. you’re still welcome to use your sync method of choice. The plan is to support a couple more sync options and possibly (and eventually) move away from Dropbox (for various reason). You guys will love it when it’s ready to ship. It’s still a very long road ahead of me, but I’m steadily making progress.

Now a little digression – honestly, as much as I personally dislike subscriptions, I can’t say I haven’t been stumped repeatedly when it comes to working out costs involved in bringing out these “amazing new features” without ending up with a huge-ish bill at my end of the spectrum. In order to do anything meaningful, such as faster sync across devices with encryption at rest, support for multiple attachments / cloud storage, shared to-do lists and more, I end up with large overheads / subscriptions that I must pay for monthly in order to provide this functionality. Some of these don’t even make sense though. One weird experience I had recently was with (an app I use frequently). They charge meeting organizers a monthly subscription for creating / managing meetings, that you and I can join for free. Fair enough. I thought it would be cool and convenient to offer this as a sync service in BusyCal in addition to the half-dozen other services it supports, only to be surprised that they want developers to sign up to a $35/month subscription separately in order to use their API. What? Why! So that we can help them reach more users at our expense? We’re not going to make more money out of this you know. Plus there’s a real person that would need to write real code to support your service, and possibly provide support / troubleshooting for free. That almost turns me into an investor, investing my money into a service and promoting it for free. Yikes 😬! Imagine if Dropbox / iCloud / Fruux / Yahoo! / Facebook / LinkedIn / Twitter / Fastmail and the other 2 million and one widely used services began charging developers a monthly fee to make their service available to others. shakes head. Scary thought.

So any way, I currently have two options:

  1. I consume the cost and factor this in as overheads for running the business and continue to charge the one-time fee. Sort of how a car manufacturer would pay for material / rent / salaries / utility bills while accounting for a single sale per customer.
  2. Charge users a subscription for features requiring cloud storage / sync

Option 1 is a tongue-in-cheek. What if monthly sales drop but ongoing overheads continue to increase as existing users continue to store, potentially, thousands of attachments and accumulate thousands of tasks over time? This can scale up pretty rapidly. Do I then shutdown the server one day when overheads surpass sales? I would also have to release 2Do as a brand new app (in order to simulate a “paid upgrade”), giving up on years of accumulated ratings / reviews etc and hoping instead for some big-named blogs to notice in order to gain some traction. That’s highly unlikely. If anything, 2Do might simply lose all its visibility on the app store at once.

Option 2 sounds reasonable, but at the same time is terrible in so many ways. I will have to still charge users that one-time upgrade fee to unlock “Pro” features though, before offering optional subscription to users that wish to use these optional features. There’s no way to put this mildly. Users just don’t read fine-print. They also don’t understand complicated payment models. I know many developers have resorted to this, but it doesn’t appeal to me. Not only will this become a support nightmare, App Store won’t help as it’ll show a “This app offers Subscription” notice on the store page. Potential new customers will read that, won’t know or care if this refers to an optional feature-set  and pick some other app over 2Do. Furthermore, I hate the idea of showing alerts each time a user accidentally taps on a feature that requires optional subscription. 😖 It’s worse as it is when you need to display a tiny banner around “Pro” features the user needs to unlock.

What makes matters worse is that Apple still has not been able to figure out a way to provide developers with an option to charge for upgrades. I would have loved to avail that after 11 years of providing free updates.

So what do I do?

This sounds a bit crazy, but I’m going to bank-in on the fact that I’m an indie developer, which means I have finite needs. Most of these, minus greed, are met with the gracious support I receive from monthly new users. My aim then, is to ensure 2Do remains in business. Option 1 more or less meets this aim. Unless Apple announces a novel new way for developers to charge for upgrades during this years WWDC (don’t count on it, they’re in on this crazy subscription-all-the-things trend), 2Do’s next major update will possibly be a free upgrade on iOS 🤯. It may however be a paid upgrade on macOS, but I haven’t worked out the kinks on that one yet. It’s too early to say, but a lot of work will go into these updates, that’s for sure. Setapp users – you have nothing to worry about.

If I do end up charging for an update, I’ll make sure it’s fair, offers a generous “you’re-free-to-upgrade window” covering several months, including an upgrade discount offer.

I look forward to sharing more details with you guys soon. Stay tuned (preferably on twitter @2DoApp)!

Feb 25th, 2020

2Do on Android learns a new Trick with CalDAV

I’m thrilled to announce the availability of CalDAV sync on Android! With 2Do v2.10 (currently in beta) you can now sync with your CalDAV server of choice (iCloud Reminders, Fruux, Fastmail, OwnCloud and Synology to name a few). CalDAV is great because it’s open, widely supported, and best of all, you can share lists with other users and pseudo-collaborate on stuff. Neat.

The big deal about all this is the fact that this is a totally free addition for all existing pro users (remember, 2Do doesn’t charge you recurring subscription fees). There are no hidden upgrade charges, no bait and switch, no tricks. Since 2Do can be downloaded and used in all its glory for free (well, almost – you still need to pay once to be able to sync), you can still take this new feature for a test-run during the initial two-week free trial period.

So how do we milk money out of this new sync addition? We don’t. Frankly, supporting CalDAV is like learning to ______ (fill in the blank with anything super difficult that comes to mind) – it’s just hard, and adds to the overall support burden given the three-thousand-and-one flavours of clients and servers out there that we need to mix well with. Initially the plan was to charge a one-off upgrade fee for this, especially since a lot of effort and time went into its development, and will continue with ongoing improvements. Pro users would have paid around $2.99 once and sync endless times with endless devices and servers.

It turns out, 2Do doesn’t get much press on Android and I could count the number of active Pro users we have on a few thousand fingers. With an upgrade model like this, we may have gotten lucky and earned $192.98 extra the first month, and $74.40 the second (these are made-up estimates), whilst angry (and nasty) emails and reviews left by a small handful would have effectively put us out of business. It just wasn’t worth it.

On the bright side, it would genuinely make us a lot happier to see folks using 2Do, syncing it with their favourite CalDAV server and enjoying being a lot more productive.

If you’re on Android and haven’t given 2Do a chance, I guarantee you there’s no other CalDAV task manager that comes close. Try it out now.

You can join the open beta group by clicking here.

November 27, 2018

A shiny new Store

2Do has spent the majority of its life within the Mac App Store. I’ve held back on exploring other distribution models (until recently) mostly due to the supposed headaches that come with managing a self-hosted store, but also because I felt the MAS would eventually cater for all our needs (free trials, volume discounts, paid upgrades, flexible licensing, Testflight beta testing and so on). That hasn’t happened for such a long time. Deep down though, it feels as if this is the year they’ll finally reveal a solid plan at the WWDC for all of those that don’t believe subscriptions are a way forward (spoiler: they didn’t). I say that, but if the last 6 years have been any lesson, I’ve begun to lose faith.

On the bright side, distributing 2Do on Setapp has been enlightening. It’s not as rewarding as I had hoped it would be, but with close to around 1,300 active users a month, 2Do has taken a slow but steady start. These numbers should increase as the overall popularity and adoption of Setapp increases.

After years of rejecting requests for joining 3rd party app-bundles and campaigns, providing educational and bulk discounts, losing in on joining cross-campaign partnerships and more, I’m happy to announce 2Do finally has a brand new Store for direct distribution.

Users that have already purchased 2Do from the Mac App Store will be able to switch to the direct version, if they so wished, without a hitch. It should automatically detect their existing license. 2Do v2 updates will still be free of charge. Nothing should change for the end-user.

Other than providing me with more control over its distribution and licensing, the new Store and direct distribution will also play a big role in how automatic builds can be deployed to enthusiastic beta users. This wasn’t possible until now. Needless to say, 2Do’s direct distribution will also pave the way for paid upgrades in the future (one isn’t in the works), considering 2Do has deployed close to around 50 free updates on the Mac in the last 6 years, and countless for iOS and Android for the past 9 years, without once asking its user to pay another dime. In hindsight, this isn’t feasible nor sustainable, but neither is a subscription based model.

May 26, 2018

Embracing a new distribution channel

Ever since 2Do made its debut on the Mac, it has been exclusively available on the Mac App Store – after all, we were all there to witness the success of the iOS App Store. Handling licensing, distribution and all the nuisances that come with it was a thing of the past. This was it. This was the future.

Fast forward to 2017 and we’re constantly facing friction from the App Store in general. Times have changed, apps are plenty and there’s growing costs involved in keeping it all afloat. I’ve expressed my dislike for the subscription model in the past, as both a consumer and a supplier. It was disappointing to learn that nothing new was on the table for this year’s WWDC, that instead of allowing developers to occasionally charge for new, major updates, we’re being encouraged to start charging users monthly instead; a recurring subscription model. I’ll say this again: this is not for every one. Rogue developers could start charging monthly and choose to never improve the app one bit. It doesn’t solve anything. What it does is annoy users and disappoint developers when they see a raging crowd of angry users leaving terrible reviews in order to bring the app down.

Obviously, subscription isn’t all that bad as long as it’s some service, constantly evolving, improving, paying recurring expenses itself for the service it needs to render etc. An offline Task Manager, however, does not fall into that category.

So moving forward, 2Do will no longer remain exclusively available on the Mac App Store. There are no plans of changing the existing pricing model either – I’m not losing hope, maybe, just maybe Apple may have a solution for the rest of us next year. For now there’s a new service in town and we’ve embraced it wholeheartedly: Setapp. It’s a single subscription service where you pay a fixed fee, and in return you get to download and use many, many apps – a lot more economical than paying for each of these apps separately.

Starting today, 2Do is available as part of the numerous other quality apps on Setapp. You should check it out.



Aug 16, 2017

Unchartered waters

A short while ago I teased about a major announcement on twitter. Some actually got it right, albeit with help from the full disclosure I made a few weeks ago, while some came up with other interesting ideas. Moving forward, today marks the begining of a new chapter in 2Do’s life. It’s time to tread unchartered waters (speaking on behalf of the app – which is weird, as well as myself).

2Do for iPhones and iPads is now free to download and use [1]. Dare I say use and not try since it’s so easy to forget how much 2Do will actually offer to the average user, even with a few features on trial. You really need to check it out for yourself to believe. It’s free, so don’t hesitate (although awaiting approval, see footnote below).

The only features on trial (of 14 days) will be Sync, Backups and Alerts. Now that’s huge for an app that won’t rely on subscriptions, adverts or signing you up for unwanted newsletters in order to sell you other unwanted stuff. Pro features will be sold as an in-app purchase, that you only pay for once.

Existing users get these Pro features automatically without paying again, even if you got it during the Free App of the Week promotion from Apple (you know who you are). Simply tap on Settings > Upgrade to Pro > Restore.

[1] 2Do is free from v3.9 onwards. Expected release on the App Store is around the 3rd Nov 2016, 3pm GMT.

Nov 2, 2016

The Big Change

“Lite”: now at the end of the tunnel

Do you remember “2Do Lite“? Chances are, you probably haven’t heard of it, as it was so short-lived. Back in the days, it was a thing to release a lite version of your app, alongside its full version, in order for people to get a taste of how it works before they considered digging deep. Fast-forward to 2016 (well, almost 2017), and it seems our habits haven’t evolved much, if at all, as we still like to try something out before paying for its premium price tag. It’s akin to going window shopping in the real world – holding it, turning it, switching it on and off and maybe even demanding a quick-demo just to make sure it fits the bill. As we speak, big-name apps that sell absolutely nothing (a.k.a virtual money) have taken over the top-selling and top-grossing charts, eclipsing everything else while amassing enough wealth to spend on developing more of the same thing.

Oh and 2Do Lite? Well, that got pulled six years ago for being too good, but its fond memories have remained. It was always good to have folks try out the app with no strings attached, and then allow them to move to the full version if they wanted to. The whole experience of moving to the full version though wasn’t working out (don’t forget Sync was still called Synchronization), and I didn’t quite fancy having two titles out with the same name. The less choices, the better.


That brings us to what this post is really about. It’s about choices, or the lack thereof. I’m disappointed to say this, but after having to continually support and develop 2Do on various platforms for over 8 years, the free updates model has begun to lose its lustre. Folks that know me (and there aren’t too many of those in the wild), know how I really feel about subscriptions, in-app purchases and anything that nags the user for more money than they’ve originally paid.

Past several years what I’ve truly been waiting for is a solution that’s in-between in-app purchases, subscriptions and paid upgrades. Instead, what we got out from this year’s WWDC was “Subscriptions for all!”. I don’t know about you, and your opinion on this may differ, but I’d personally hate to see the 10+ apps I use frequently to turn into a $2.99+ monthly subscription (spoiler from 2018: most of these actually did, aargh). I appreciate that there’s a difference between a Service and an App, but nowadays everyone’s begun to portray their app as a service. Maybe it’s just me, but I’m not comfortable with that thought; even as a developer.

In an ideal world, the user should be given a free trial period before buying into the premium priced app. The developers on the other hand should be given the option to charge for an upgrade when the time is right, without having to publish it as a new app and then discontinue / abandon the old. This model has been adopted by a number of developers, but it doesn’t excite me for the following reasons:

  • If v1 wasn’t so popular and the only users you have are mom and jimmy from school? Don’t even think about it. You’ve had a hard time finding users for v1, it’ll be tougher finding new ones for v2. It truly is a jungle out there.
  • If you’re updating after a long time and v1’s attracted a ton of negative press, how do people know v2 is going to be any better and you won’t pull a v1 on them after a few months? Fool me once, shame on you; fool me twice, shame on me
  • You lose all the reputation you’ve built over the years; all those 5-star ratings and reviews and chart climbing history of downloads? Gone.
  • A lot of users who kept buying into v1 thinking you’d be updating to v2 soon, suddenly find themselves stranded on a deserted island because you’re asking them to switch boats (i.e. pay again) – that too after a week.
  • Got an awkwardly named app (read ‘2Do’) that doesn’t look good with a numbered suffix (2Do 2)? Forget about it

All of the above probably applies to 2Do any way.

The Problem

It’s time I come forward a bit. Ever since Federico talked about it, it’s no secret that I’m the sole developer of 2Do on all supported platforms. Frankly, being on my own gives me immense freedom and movement within the one-man company to absorb the economic ups and downs that come with any business. I take pride in the fact that all updates, both minor and major, to 2Do all these years have been free – mostly because I can. But free updates one after another do not contribute to sustainability, severely hinder growth and add big question marks to the future of the product in question. In the post-app-store boom period that we’re in, the problem really is two-fold: discoverability that would lead to user-retention, and a payment-model that works for both users and developers alike.

Advertisement probably sounds like a solution to the discoverability issue, and that explains why the App Store now promotes it, but for an effective ad-campaign, you need high cash-flow injected into the ad-spewing system – constantly. But given there’s no trial period available for your seemingly expensive app, and you’re not into the business of selling nothing (i.e. virtual money / gems / insert_here), you’re pretty much back to square one.

Next up is this subscription model we keep hearing about. This is an easy one to dismiss. I don’t think apps like 2Do are akin to services you would pay for monthly / quarterly / yearly. Nor do I think people would pay $2.99 a month to remind them to pay the $2.99 every month. Nor will I be doing your chores for you.


After having invested most (if not all) of the money earned from 2Do on Android over the last few years, along with several months of sleepless nights, the major free update finally got pushed out roughly 10 day ago. It finally caught up on a lot of what 2Do on iOS has to offer – all that at no extra cost. It was an immediate hit, with almost every returning user leaving a 5 star review. I got more than I asked for, so I can’t complain.

During the first week’s 50%-Off promotion, the number of new users was very low to say the least. I can’t say I wasn’t prepared. I truly wanted to build a better app for Android. iA Writer had published a post earlier this year to reveal their share of disappointment on their Android launch. They concluded that the best things in Android are in fact free.

However, once the promotion ended, the number of downloads dropped to… 1%. Yup. Okay maybe 2% – but it’s so low that it’ll be a few years before it breaks-even (and I don’t even charge myself overtime). But why? Well, it seems freemium truly is a thing.

2Do for iOS was selected as Free App of the Week by Apple last year. Sure, it got free publicity from Apple, but the magic word here is Free. In around 7 days, 2Do got downloaded close to a million times. In fact, majority of 2Do’s currently active users are those that grabbed it during that time. User-retention shot to around 40% and then settling on around 10% (i.e. there are 100,000+ active users per month). And to think a major portion of this is those that grabbed it while it was free.

Federico of Macstories declared 2Do to be app of the Year 2015. Federico is highly regarded for his ability to dissect an app and go all ninja on them in his reviews. It was a highly prestigious award, and I’m truly humbled by it. 2Do for Mac won Best of 2013 from Apple. Earlier, 2Do for iOS won a few awards, appeared on BBC and a couple of other amazing things happened. However in spite of all that, 2Do struggles with discoverability. It’s a serious, potent problem. One that is more threatening to an app’s future than anything else.

Going Free

The answer to this all really is pretty obvious. 2Do will adopt the new trend. Starting with Android and then later in time moving on to other platforms (based on how well this goes), 2Do will become free for all. The following is what to expect:

  • 2Do as a free, full-featured app. Trial will last 2 weeks.
  • After the trial expires, app will resort to a fully working app, but will lose: Sync, Backups, Alerts
  • User given the option to buy a one time only, in-app purchase to continue after 2 weeks
  • Existing users will not have to pay again

In short, even after the trial expires, the app will continue to offer all of its features, except for Sync, Backups and Alert Notifications (i.e. turn into a dumb, but useful to do list). In order to enable those, the user could upgrade to the full version by paying once.

Nothing changes for folks that have already purchased the app. You won’t have to pay again (on Android there isn’t currently a way to determine if you’ve already paid for the app, however I’ll figure something out so it remains free). The app will still be priced the same, only the model changes a bit to allow it to be previewed for free.

It’s really no fun working on and developing an app that no one knows about. Hopefully this will allow more users to try before they buy, and in return give me reason to continue working on the stuff I love.


You’re most welcome to chime in and leave your remarks on Twitter: @2DoApp

Oct 4, 2016

Free App of the Week


Due to the success of this promotion and the amazing feedback received, we have decided to extend it. 2Do on iOS will be FREE for a limited period of time.

Free app of the Week

Sharing the Love

Every now and then Apple teams up with developers to, quite literally, make your day! How exactly, you ask? Well, by sharing with you a lovingly built app for FREE (which, of course, is normally considered priceless but sold at a reasonably affordable price of $14.99)! But wait – did we just use the word day? We meant a week! Yup, 2Do for iPhone and iPad is going to be FREE for a whole WEEK, starting from the 4th of June 2015 till the end of day on the 11th of June (now extended). You just can’t miss it!

… in all directions

We could have just stopped there, but folks today the doors are pretty wide open! Okay, so they’re partially open. But they’re still open. 2Do for Mac, an app we spent an enormous amount of time refining and updating just recently, is going to be 50% OFF during this absolutely crazy up for grabs period (Mac promotion has ended)!

The Catch

There isn’t one! Seriously! “But you gotta be making some money from the free app in some way, right? Some kind of an in-app subscription maybe?” Nope. “I’m serious” So are we! “Aha! So maybe you’re collecting users en masse to charge for 2Do II or something that’s due round the corner!” No, no, not at all! In fact, 2Do v3.0 came out just last year as a major update, and that too for free! 2Do has been around for 6 years, handing out one free update after another. No other major update is imminently planned or due around the corner. Look, this is how it works: Apple thinks our app is so awesome, we have just got to stop selling it for a week and share it with the whole world instead. We talk. We talk some more. And fast forward to today, we let you all download our cool app for free! Simple.

Grab some

2Do is an awesome Task manager with a history of consistent 5-star customer ratings, awards, TV appearances and has been part of various Apple promotions. Opportunities like these come once in a blue moon (strawberry moon to be precise), so download now and enjoy what we’ve wholeheartedly given our lives into.

iPhones and iPads: Download for FREE. Original price: $14.99. Watch intro.

Mac: Buy for $49.99. Watch intro.

Pass on

We did our bit, but we need your help to spread the love far and wide. You can tell your friends, family, colleagues, go knocking on doors or just spam randomly (no, skip the last two) by retweeting our tweet or sharing this Facebook post.

Jun 3, 2015

We’re Ready

This is going to be short. We’re very pleased to announce that 2Do III is finally ready and it’s coming soon to the App Store along with iOS 8.

The Journey

With 2Do v1.5, we’ve hit a major milestone today. Not in terms of what it can do, but what it will be capable of doing one day, collectively across platforms. You know, the bigger picture. But it already does a lot, you say? Yes, it’s probably easier to describe what 2Do can’t do, than to list the things it can. But that’s beside the point.

I still remember the day we embarked on the journey of pinning down the ‘to-do list problem’, as we called it, long before 2Do saw daylight. It was never meant to be a traditional Getting Things Done (GTD) app, nor a fancy app that made some noise and recognized a few gestures. We wanted it to be meaningful, you know, an app you and I could use without first reading up literature on GTD. Not just during a trip to the local grocery store, but for everything else.

It became immediately obvious. ‘Tabs’, we exclaimed! There’s a reason why tabs are everywhere now. From Chrome to Safari to Finder (finally in Mavericks), tabs have found their rightful place in our complex lives. Apparently we humans are able to focus better when presented with disparate information in separately:

Tabs = Separation = Focus

If you were to plough through the enormous amount of literature on being productive, you’ll see how well this fits in. Contexts, projects, lists, areas of responsibilities; everything could be represented elegantly with this one simple concept. This gave us the solid design direction we needed.

Next up was color. Our brains love color. It helps us relate to events and remember things. All this led to the eventual release of 2Do in 2009.

Back to the bit about hitting a milestone. 2Do v1.5 for Mac is packed with so many useful features, we think you’ll want to be productive, just for the sake of using the app. With this latest update, we’ve finally finished writing a single core library that will eventually be shared by future updates of the iOS apps (iPhone and iPad). That will mean uniform integration across platforms, solid stability, big performance improvements and amazing connectivity (as if all that wasn’t already there!). We started working on this ‘smart productivity engine’ over a year ago, re-writing everything from scratch, using the latest technological improvements offered by the latest versions of Mac OS and iOS, and some common sense.

You’ll love what we have in store for iOS 7 and beyond. For now, here’s the latest and greatest for Mac OS. You can download it from the Mac App Store from here: