Tabular 2 is Here

Hi folks! I'm tremendously excited and relieved to finally be able to make this announcement...

👯 Tabular's version 2 update is now live in the App Store! 👯

First and foremost, I can't apologize enough for how long it took to make this happen, and for the lack of communication and app maintenance in the mean time. This isn't at all the timeline that I had envisioned when I first started working on version 2, and there are a lot of things I should have done differently, but I'm truly grateful for the enormous amount of patience that you all have shown over the last several years. I really hope you love the new app, and I look forward to making it even better in the months and years to come!

I have a lot to share about what's new and what's in store for the future, but first I'd like to shed some light on why the 2.0 update happened the way it did.

What happened?

To answer this question, we need to take a trip back to the year 2013.

Two years after starting the project when I was still a computer science undergrad, Tabular was nearing completion. I had recently quit my entry-level software job and started Chromatic Labs hoping to make a living by selling the app. I published it to the Mac App Store, and initially it was a modest success.

Things were going pretty well for a while — I shipped a few updates and published an iPad version of the app. As time went on, though, working on it became more challenging. It was built on a foundation I had created as an inexperienced student, when I was learning how to write application software as I built it. It was a bit of a mess, which made it difficult to put out updates without inadvertently breaking something. Supporting both the Mac and iPad versions of the app at the same time proved to be very tricky as well.

Working on the project became overwhelming. At the same time, sales were slowing down at a rapid pace, and I started eating into my savings to cover living expenses. It ended up being a pretty dark time in my life as I was also dealing with mental health and other personal issues.

In the midst of all this, Apple announced its new Swift programming language in 2014. I was immediately gripped by the idea of it. Many of the problems that Swift was specifically designed to solve were the ones that had been making Tabular so hard to work on.

I made a hasty decision to not only start using Swift immediately, but to start over and build the app again from scratch. I'd have a clean slate from which to apply all the lessons I'd learned over the years, and I could create a much more solid foundation for the app. It was too tempting an opportunity to pass up.

Having built it once already, I felt inordinately confident that it wouldn't take very long at all, and so I set out on my journey.

In reality, there were a number of issues that slowed things down to a crawl, the biggest of which was simply that it ended up not being the straightforward rewrite I had envisioned. The point of rebuilding the app from scratch was to create as solid a foundation as possible, and that required a meticulous level of thought for almost every decision. I'm happy to say that it's finally paid off, and I believe the project is now healthy enough to be maintained and updated as it is for many years to come. But it's been clear for a while now that halting maintenance on the live version of the app that you all were actively using was not an appropriate way to go about this.

I also overestimated how long I'd be able to keep working on Tabular full time. After some months, I had to take a separate full-time job to keep the lights on. Since 2015, I've only been able to work on Tabular during evenings and weekends, which significantly cut down on the speed I could work at.

That's more or less been the situation ever since. It's been a slow and steady process of chipping away at the update in the free time available to me. At several points throughout this process, I should have made the decision to stop and build incrementally off of version 1, but each time I considered it, I felt like I was in too deep, that it would be faster to just finish what I'd started rather than going back.

It's been a costly lesson, but one well taken. Going forward, keeping Tabular in good working order at all times will be my highest priority. Updates will now come at an incremental and steady pace.

What's new?

Most importantly, Tabular is now stable and up to date with the latest versions of macOS and iPadOS. Although I had originally planned on including a few new major features in this update, I ended up cutting most of them for now, opting to release it faster instead. That said, here are the most significant new features that did make it:

The primary goal of this update was to put the app in a good state to continue building upon. With that in mind, I made the difficult decision to simplify or outright remove a few features, the most significant of which is sheet music support as I alluded to above. I understand that this will be disappointing to some, but I believe it was the right choice to make, and I'd like to share some of my rationale behind the decision.

Tabular has always been first and foremost a tablature editor. Support for sheet music came about as a heavy-handed solution to a pretty simple problem — standard tablature doesn't communicate note durations on its own. Sheet music does, so displaying it next to the tablature fills in the gaps, giving you all the information you need to play the music.

As I gained experience designing and using the app, I found that sheet music was a tremendous source of complexity. It's extremely difficult to render correctly, and as a solo developer, I simply can't afford to spend the amount of time needed to do it properly when it's not the main focus of the app.

So many design problems came about from trying to support both notations at the same time. To give an example, a basic feature of a sheet music editor would be to support multiple staves so you can have, say, a bass and treble staff on the same track. This seemingly straightforward change introduces several issues. For example, when you enter a note in the tablature, which staff does it show up on? The app can't reasonably guess the staff for you in all cases. The concept of a selected staff might be introduced so you can manually choose where the note will appear, but that's a lot to ask of the user when they're already managing the selection of the track, measure, division and tab line. Indicating the current selection to the user would introduce extra rendering complexity, and new commands for managing the selection would eat up valuable keyboard shortcut real estate.

A lot of sheet music problems are like that — technically solvable, but only by making the app significantly more complicated and less usable. Others seem entirely unsolvable or are just so time consuming to implement that they're not worth the effort.

On top of all that, sheet music wasn't actually a great solution to the original problem. All that was needed was a way to show note durations, but now you had to understand and pay attention to two totally different forms of notation at the same time to fully read the music.

Ultimately, sheet music felt perpetually at odds with the tablature, and maintaining support seemed untenable. It became clear to me that it needed to go. I decided to replace it with a much simpler notation, placing a duration symbol above each division in the tablature. Having used it for some time now, I'm really happy with how it worked out — it's easier to read and overall a much more cohesive experience.

New duration notation

You might notice some other new notation in that screenshot. There were a few gaps to fill beyond basic duration information after removing sheet notation. Previously, tied notes were indicated with a slur line in the sheet music, but now they need to be shown directly in the tablature. There's not much of an established convention for tablature tie notation, so I thought about how I'd most like to have them shown and decided to go with an arrow extending through the duration of the tie.

I thought this turned out great — like the simplified duration notation, this felt more natural and easier to read. I started to think about other aspects of tablature notation that could be improved in this way, and I ended up making a few changes. For example, legato is now displayed with a thick line between notes rather than a slur line, which reads easier, allows for greater specificity when multiple notes are involved in the same division, and avoids complicated issues like dangling slur lines overlapping other content.

I'll be continuing to iterate on the notation in this way in future updates while keeping in mind that these sorts of changes are disruptive. Things won't change just for the sake of change. Each new notation should be a genuine improvement and should feel natural if you're already familiar with tablature.

What's next?

Since publishing the update, I've been focusing on wrapping up miscellaneous tasks to get everything back in order, including updating the website and writing this post. I've also been putting out some small updates as bugs have popped up.

As things have been settling down, I've put a lot of thought into the best strategy for maintaining Tabular going forward. Realistically, I have to consider that I don't have as much time to put into developing the app as I'd like. I'm still working a full-time job, which I don't foresee changing any time soon. That said, I think I was successful at getting the app into a state that will allow me to iterate on it meaningfully in the time that I have.

With that in mind, I've decided to start by committing to a monthly release cadence. Starting in February, the plan is to deliver one significant update per month. The exact scope of each update will vary — some features will take longer than a month to build, and the chaos of life will vary from month to month, so some updates will end up being more subtantial than others. But I'll do my best to have at least some visible changes in each update. Additional updates can also happen in a month if important bug fixes are needed.

It's hard to say exactly how well this will work out until I try it out for a while. I'm planning on trying it for the remainder of 2020, then evaluating how it went and readjusting if needed.

Okay, with all that said, here are some of the specific items that I'll be focusing on in the near term:

This is just scratching the surface — I have a very long list of other features and improvements that I'm really excited to add. I do my best to prioritize features that you all ask for, so if there's something you'd like to see in the app, please feel free to write in with your thoughts!

Thank you!

I don't do any sort of user tracking in the app, so I don't have much insight into how many people actively use it except by hearing from those who write in. It was a pleasant surprise to hear from so many of you after the update went live. It means a lot to me to be able to make something that helps people create art. To those who stuck it out with version 1 over the years, I can't thank you all enough.

See y'all next time ✌️