[Show & Tell] NEW: Offsheets v2.0: A Zero Knowledge Web/iOS/iPadOS App for Tiller Users; Manage, Analyze, and Forecast All In Offsheets

Great question again. There are a few different buckets where the time goes, so I’ll walk through what we were able to optimize and where time just goes no matter what:

  1. The lookup itself is way cheaper than it sounds. Offsheets doesn’t re-download your sheet to find the row — it asks the Sheets API for just the Transaction ID column, nothing else. Even with tens of thousands of rows, a single column of IDs is a tiny payload, and the app builds an ID-to-row map from it in memory. So that “re-locate before every write” safety step from my last answer costs a few hundred milliseconds, not a re-sync. (Rows with no ID pull three columns instead — date, description, amount — still small.)
  2. Everything is batched. A normal edit is exactly two API calls: that ID column read, then one write that touches only the cells that changed. Bulk edits don’t multiply it either — bulk-edit 50 transactions and it’s still ONE id-column read (all 50 rows resolved against the same snapshot) and ONE batched write carrying all the changed cells. Never 50 round trips.
  3. You’re not actually watching any of this happen. When you make an edit, the app updates its local copy instantly — that’s what you see on screen. The verify-and-write runs in the background on a queue, in order, so fast edits can’t race each other. There’s no “re-sync to confirm” afterwards either; the write succeeds or it fails loudly. And once it fires, the change shows up in the actual Google Sheet basically instantly.
  4. Now the honest part: cold starts. Writes go through a small server function (that’s where the write execution and token refresh live), and Google shuts those down after about 15 idle minutes. A cold one takes maybe 7-10 seconds to boot on the first save. I hated that, so Offsheets warms the path before you need it — a warm-up ping goes out a couple seconds after you open the app, another whenever you come back after being away 5+ minutes, and then every 10 minutes for as long as the app is actually in front of you. It deliberately stops pinging when the tab’s in the background (no reason to keep a server warm all day for nobody), and your actual saves reset the idle clock on their own anyway. In practice you should rarely hit a cold start — about the only way to feel one is making your very first edit within seconds of opening the app, before that first ping lands. Once warm, a typical edit is a couple seconds end to end. Deleting is very fast in Offsheets, basically done instantly. Adding a manual transaction typically takes a few seconds longer than editing one.
  5. Splits take longer because a split just does more. New rows get added, the original gets handled, metadata gets written so the pieces stay paired, and it all has to happen in order with the same verification at every step. So yes — splitting is slower than changing a category, same as it is with Tiller’s own split tool. No way around that one, it’s real work. We have that process optimized as much as possible, though, and we also have more processes in place to treat splits as actual unified parts rather than separate pieces after the split is done (i.e. you can’t delete part of a split in Offsheets without being alerted that you’re going to do so, at which point it lets you either edit the split directly (by removing the part(s) you don’t want and adjusting the ones you do want so that the original transaction amount is accounted for in the remaining split(s)), or delete the entire transaction.
  6. Sheet size matters and nothing fully escapes it. A lean sheet beats a huge one at everything — fewer transactions, accounts, categories, and balance history rows means faster edits, faster splits, faster all of it. That’s not an Offsheets thing, it’s a spreadsheet thing, and you’ve probably felt it editing directly in a big sheet too. All an app can do is touch as little of the sheet as possible per operation (one-column reads, changed-cells-only writes, batching), which is exactly where we put the effort.

So: edits feel instant in the app and land in the sheet within a few seconds, the warm-up pings keep the slow first-save case rare, splits take longer because they do more, and everything scales with sheet size because everything in a spreadsheet does. Great questions — hope that helps.

After a few requests from users, we went ahead and updated the app to allow for “Other” account types to have a cash override in the Forecast account picker. This override only will impact the Forecast feature, and does NOT make any changes to your Tiller Google Sheet Accounts tab. Here is what it will look like after you refresh your web browser or upgrade to iOS v2.04 (we’ve submitted it to the app store and it may take 1-2 days for Apple to review and approve it):

Notice the “This is a bank account - include it”. Click that for any “Other” account that is actually a cash account, and it will immediately be included in the Forecast Cash accounts. There is also an option to undo it afterwards, in the same location:

image

Please note, if you use both iOS and web - until the iOS 2.04 update is approved by Apple in the next day or two, if you toggle this in the web app for an account, the iOS app will not reflect the updated information, nor show the option to “include it” or “Undo” it.

Best,

Matt

@mu3484343 Hi Matt,

Your app architecture, security and design has been very well thought through. I also appreciate your detailed replies to the Q&A’s.

Do you have any plans for a single page dashboard in the works?

Also, as a small correction to the offsheets website front end, Empower is ad free for investment clients. It is only the free Empower users that receive ads.

Clint

Thank you for the feedback, Clint (and thanks for the heads up on the Empower info, we’ll get that updated).

Can you explain the single page Dashboard question a bit more? The current single page dashboard is the Overview page, that has over 20 interchangeable widgets (click Edit Layout at the top).

Thanks!

Matt

I’m an Excel user, so I haven’t been able to give it a try yet. I have a todo to create a Tiller sheets version of my Tiller Excel spreadsheet one of these days. I was looking at the screenshots in the App store and your website and also viewed the YouTube demo. I didn’t realize that the Overview page had the 20 interchangeable widgets. I’m sure 20 would cover my needs.

@mu3484343 I just signed up for the free trial and it’s very impressive what you’ve built. One question I still have is how do I switch between sheets quickly? I have 2 sheets that I manage frequently, one for business and the other for personal. Can I somehow have 2 different tabs open, one for reach sheet? I know I can go into the settings to change the sheet, but it’s cumbersome and requires multiple steps

Hello,

We are working on possibly having support for a second sheet as we have gotten this question several times, but it’s tricky because of cross device syncing and a few other variables. So currently, the best way to achieve what you’re looking to do is to have a business login and a personal login in Offsheets (2 accounts). On desktop, you can easily run the two accounts side by side in the same browser, with one of the accounts in a private/incognito browsing session. The issue really comes into play if you’re looking to also do it on mobile with the app since you can’t have two instances of the app running. For that I would suggest running one in the app, the other in a mobile web browser, which would allow you to achieve the same result. Since Offsheets is optimized for all screen sizes across all devices, it would be a near identical experience.

Enjoy Offsheets!

Hello @mu3484343 ,

One thing I realized is that the account polarity is not maintained in the liabilities page (credit card with a positive balance still show negative). Maybe it’s been reported already.

Is there also a way to exclude historical accounts from assets and liabilities view? Old accounts that are closed with a balance of 0 could be hidden?

Thanks!

Hey PCB, thanks for both of these.

  1. Credit card polarity: you’re right, and I was able to reproduce it. If you’ve overpaid a card and it’s sitting with a credit, the Balances list shows the actual number from your sheet, but the totals around it (Net Worth, the history chart, the Overview widget, the email digest) count that credit as money you owe. So a $50 credit gets treated like $50 of debt. It’s confirmed and on my list. The reason it isn’t a quick flip is that some banks report an overpaid card as a positive number anyway (Tiller has a thread about this), so I need to handle it in a way that doesn’t break net worth for anyone else. I’ll let you know when it’s fixed.

  2. Hiding old accounts: yes, you can do this today, two ways. On the Net Worth page, click Manage Accounts, pick the old account, and set Visibility to either “Closed” or “Hide in Balances & Net Worth”. Closed removes it from the Balances view but keeps its past balances in your net worth history. Hide removes it from both. Either option writes to the Hide column on your Accounts sheet in Tiller, so it carries over there too. OR, if you just want to declutter the Balances view without changing anything in your sheet, open Filters on that view and check “Zero Balances”. That hides any account sitting at $0.00.

Thanks again for reporting these.

That’s what I needed, thank you!

I don’t think it’s there, but could you make eventually make it so the Do not show $0 balances options is available in the settings page as default? I would like it to always stay like that.

This has been added - the toggle is on the Settings page - Net worth section. It’s live on web right now and iOS will have it when Apple approves the next build (2.08), likely within 24 hours.

Thank you!

Téléchargez Outlook pour iOS

@mu3484343 Matt, this is cool stuff. Reviewing the trial. Main issue I’m finding is that I’m using the “Savings Budget” for my Budget Preference in Settings.

When I’m on the Budget page, my Savings column is showing dollars (positive or negative depending on the category) when all of my Categories in Tiller are $0. Thus, it’s jacking up my Budget and Forecasts.

Not sure where these numbers are coming from on your end for the Savings column…

Hello - please check your DM. Thanks!

Matt,

This app is awesome! I love the interface and how much of Tiller functionality you integrated into it.

I have a feature request: one the overview page, when looking at the budget & categories widget, I’d love to be able to tap on a category and drill down straight into transactions under that category, just like when you’re on the Budgets & Categories page and tap on the actuals column for any given category row. Additionally, I’d also love to be able to reorganize the widgets on the Budgets & Categories page.

Thanks for all your hard work on this! It really shows.