Banktivity, or what was known as iBank until recently, has been a personal labor of love of mine for over 13 years. It started as a simple app designed to track basic finances. Slowly over time it gained in popularity and became the core business of IGG Software. (In case you haven’t guessed, IGG are my initials.) The next two blog posts are going to be entirely dedicated to Banktivity, especially Banktivity for Mac. I wanted to write these posts to give a good overview so people can understand how far it has come and where it’s headed. This first post will focus on the history of iBank and Banktivity by going back to the beginning. The next post, to be published at a future date, will focus on where we are now and what lies ahead.
For this post I go behind the scenes and expose some of the internal workings and decisions we made at IGG. In my attempt to “pull the back the curtain” you will see that software development is rarely a linear process as external forces are always at play. We make decisions in lots of different ways and we’re still learning what works best for us and our customers. Sometimes the decision is weighed most by customer feedback and sometimes it is weighed more by where we need to be in the very long term. Either way, looking back is always 20:20. I personally find the journey fascinating, challenging and rewarding. Enjoy this post, as it explores the history of Banktivity from behind the scenes.
A History of Banktivity and iBank
I had no intention of going into software development and running a company. I’m a botanist by training, but have always dabbled in computers, computational modeling and programming. The story of how I started IGG might be a good topic for another post, but for this one, let’s just skip ahead to iBank 1, which was first released in 2003.
I wrote iBank 1 out of a dislike for Quicken and because it sounded like a good challenge. At the time, I didn’t know nearly as much as I do now about software development. I was young, naive, and full of energy. While iBank 1 was good for what it did, I look back now and say, “Wow, I can’t believe I wrote that. If I were to do it over, I would do this and that and….” Two years after iBank 1 was released, iBank 2 came out, which was a complete rewrite.
iBank 3 was released in 2008 and it was at this time in the company’s history, where we were finally making enough money to offer my brother a position as CTO and parter in the business. Up until this time, I was the sole engineer for iBank (and iBiz for that matter, but that app is another story). My brother, James, is an exceptional software engineer and I always wanted him to work with me at IGG. He has a truly uncanny ability to take a real world problem and model and solve it with software. He helped our Dad write software to run and model particle accelerators when he was in college. My Dad’s company, although winding down because he’s retiring, still uses the code foundation James wrote. (James is pretty humble so he’ll probably object to this part of the blog post.) In October 2008, I was finally able to convince James to leave Intuit and come work with me. (While at Intuit, James didn’t work on Quicken, he worked on a precursor to Quicken Loans, TurboTax Online and TurboTax for Mac.)
When James got to IGG, we both knew we had a lot of work to keep our products on a trajectory of incremental improvements. We started to develop a roadmap of where iBank (and iBiz) needed to go, but developing apps isn’t always a simple linear process. New technologies get released, Apple might encourage you to implement certain new features and general disruptions can jump out at anytime.
If you’ll recall, the big disruption in 2008 was Apple’s release of a real SDK for the iPhone. It became clear that the first task for my brother was to develop iBank Mobile. We had to build this app from scratch, as the finance engine in iBank 3 at the time was not compatible with the iPhone (because the iPhone didn’t have Core Data yet!). Less than a year later, we released iBank Mobile and iBank 3.5 with WiFi and .Mac syncing (anyone remember that!?). It was a big undertaking and it was great to have an iPhone app.
After iBank Mobile and iBank 3.5 had been out for a while, we turned our focus on iBank 4 and developing a longer range roadmap for the company. We knew we needed a cross-platform set of code that could carry all of our products into the future. The problem was, the existing iBank finance engine wasn’t the code to do that. It had been built for single-processor computers. Sure, we could have used it as the foundation, but it would have been a move that haunted us for a long, long time. It would have essentially forced us to always feel like we were paddling upstream. We knew we needed a clean set of code that was built to be multi-threaded and cross-platform from the ground up. This new code, which didn’t exist yet, would be called the “Accounting Engine”.
However, it wasn’t time to start on the Accounting Engine just yet. We needed to ship iBank 4 with reports, better transaction editing, envelope budgeting and templates. (iBank 3 had something called “reports”, but it was a simple graphical view and table with numbers.) So we went to work on that, including updating the existing core code from iBank 3 to allow version 4 to handle some multi-threaded tasks and the latest version of Mac OS X, which at the time was OS X 10.5 Leopard.
Once James did most of the backend work for iBank 4 and the “transaction editor”, he finally went to work on the Accounting Engine, while I worked on putting in the other new features. During this development cycle, Apple dropped a small bomb, the iPad. It was at this time we decided that iBank for iPad would be the first app to use the Accounting Engine.
iBank 4 shipped in September of 2010. Fortunately, the company was doing well enough and we were able to hire another talented engineer from Intuit, Aaron. Aaron worked with James on TurboTax and is actually an old friend of his from college. As more resources started to go into iBank for iPad, there was one big feature behind the scenes we had just started to work on – Direct Access. We put Aaron on this full-time so that it could make its debut in iBank for iPad 1.0. To this day, Aaron still “owns” all of the server-side and much of the client-side Direct Access code.
I’ll take a moment here to let you know that Direct Access was a big undertaking. Not only was it our first “service”, but it also required a lot of supporting pieces. For example, we had to create our authentication service, or as our customers know it: Banktivity/iBank ID. Similarly, we needed to write our own system for chaining together account setup screens, we ended up calling this the Assistant State Machine. Last, but certainly not least, we had to contract out third party security audits. And while it made its debut on iPad, from the beginning we knew that Direct Access would end up in iBank for Mac, still our most popular product.
Now some people might be asking, why did you develop Direct Access? iBank already could connect to my bank using Direct Download (OFX). Well, there are two reasons, the biggest being that customers kept wanting to be able to download from more banks than just the ones that supported OFX. We also realized we could offer the Direct Access service for *less* than what most bank’s charge for OFX downloads. So this was clearly a win, win: we implement a highly requested feature and provide a very good value for a great service.
In the summer of 2011 we started to plan what big enhancements would be in iBank 5. So we just randomly thought up some features we thought people would like and started writing code. Just kidding! We looked at our feature request tracking software and there, at the top of the list, by a large margin was…bill pay. Since we already had an OFX implementation and were familiar with the protocol, we knew this feature would make it into version 5. Second on the list was a revamp of budgets, as we felt like we really didn’t get them right with iBank 4. The biggest change to budgeting in iBank 5 was automatically incorporating bills and tracking the historical changes to budgets with the ability to navigate forward and backward in time. We also made it easy for people to see a year overview and other summaries. It was also now time to incorporate Direct Access into iBank 5. So we brought over the Assistant State Machine and implemented not just Direct Access, but redid almost every “assistant” to use the this new backend and offer a more professional and consistent experience in the app. (Can you find the two assistants in iBank 5 that don’t use the new state machine/assistant?) The other big feature we put in was one-button updating. It was getting too kludgy to initiate a sync, update accounts, then download security prices, then tell it to sync again so new changes would get synchronized. This feature sought to make it easier for new customers and provide a better experience for our upgrading customers. Implementing this required a surprising amount of code, because it all runs on background threads and newly imported transactions just get inserted automatically. There were several other big changes in iBank 5 as well: new import rules using regular expressions, automatically matching imported transactions, auto linking of transfers, Resolve View, toolbar status view, completely new loan setup and backend model, transaction filtering, investment transaction categorization and so on.
Then the big question came up, should iBank 5 use the new Accounting Engine? We spent some time thinking about what it would mean to incorporate it and unfortunately it didn’t mean we could just side-load it. Almost every single part of the app would get touched and there were even a few things that the new Accounting Engine didn’t have at the time, like reports (notice how reports, as they are on the Mac, don’t exist in iPad…yet?) After much deliberation, we decided that we should revamp the existing core code in iBank 5 to support the new budgets and other new features, e.g. better bond support and categorizing investment transactions, so that we could ship iBank 5 in a reasonable amount of time. Even without putting in the Accounting Engine it shipped almost three years after iBank 4.
While iBank 5 was under full development, we also had another big piece of work hanging over us – by the time iBank 5 would ship, iBank Mobile would be 5 years old. Now, I don’t have a problem with age per se, but code age and iOS don’t go well together. iBank Mobile was using too much code from the early days that was getting harder and harder to maintain with each new iOS release. So we put a new hire, Dave, to work on iBank for iPhone 2. Not coincidentally, Dave is another very talented engineer and also came over from Intuit where he worked with both James and Aaron. (Please note that there are other employees at IGG Software besides myself and the three relatively new hires from Intuit.)
iBank 5.0 shipped in November 2013. Once it shipped, James and Aaron immediately started working on another big undertaking, Cloud Sync. We actually had decided on implementing cloud sync many months before, but other priorities needed to be taken care of first. We did some initial exploration of how we would implement it, but we didn’t start writing code for it until after iBank 5 was released. Meanwhile Dave worked on iBank for iPhone 2, which shipped in October 2014. We were finally able to retire iBank Mobile, which at that point was almost six years old!
Syncing is really hard. It was no small undertaking to bring cloud sync to iBank for iPad, what would soon be iBank for iPhone 3 and iBank 5.5 for Mac. Not only did we have to write a lot of client side code, but we also had to develop a completely new server structure. Of course our current hosting company couldn’t provide what we needed, so it also meant moving to a new host. So after about a year of development and testing, we finally released our private Cloud Sync in January of 2015 (the beta came out several months before that).
Now we are almost up to the present. Cloud Sync is done and working great. iBank for iPad and iPhone are at version 3 working with our Cloud Sync and iBank 5.5 fits right in. But with software development you rarely have time to rest.
Stay tuned for the next post, which will touch on the name change from iBank to Banktivity and what features we’ve been working on.