../

When banks freeze your parents’ assets.

Oyatoko · 2021 – present

I work at Kokorono, Japan’s leading family trust company. Family trusts in Japan solve a specific problem: when a parent develops cognitive decline, banks freeze their assets. The family can’t withdraw money for care, can’t sell property and can’t access insurance. By placing their assets in a trust, families can ensure their loved ones are cared for while maintaining control over their financial future.

Screenshot of the app's dashboard showing asset breakdowns and profit & loss trends.

What we built

Oyatoko lets our customers connect their bank accounts, track their trust’s spending and income, manage real estate and financial assets, and more importantly, generate yearly reports in a few clicks. The app is web-based and also available on iOS using Turbo Native. We shipped the first version in spring 2022 with a 3-person team. We kept adding features over the years as the product matured.

Navigating complexity

The domain sits at the intersection of finance and law: accounting systems layered with legal constraints specific to family trusts. We learned by working directly with the company’s legal team, strategy team, and customer support to better educate ourselves and create a shared language we could use for discussions (English and Japanese). Finally getting a grasp on all the nuances of these domains felt rewarding.


Historical accuracy in a mutable database.

The problem

The app’s ultimate purpose is generating yearly trust reports that a government branch can request at any time, and that for any year. But not all of our customers are necessarily regular users. Their asset values get recorded when they start using the app but don’t always get updated over time. Updating an asset value should be trivial but it invalidates any past report our customers would try to generate.

What we rejected

The obvious approach would be to "instance" every fiscal year: close the books, copy all data into the next term, and work from that snapshot going forward. Freee, a popular Japanese accounting service, works this way and I think it’s a great approach. But family trusts aren’t companies. And our users are not accountants or financial professionals. Plus, they don’t even have to file reports every year; they just need to be ready if asked. Forcing customers to formally close each year felt too rigid. I wanted to let them manage (or not) their assets with flexibility.

The insight

I realized the scope of the problem was narrower than it seemed. Bank transactions already had a natural timeline through journal entries, since every expense and income is dated. Only assets were the problem. A building’s assessed value, a stock portfolio’s balance: these change independently of any transaction. So I scoped the solution to assets only.

What we built instead

A "revisions" system. Think of it as a timeline for mutable assets information. On any asset page, customers can add a revision, a snapshot of that asset’s value at a point in time. When generating a yearly report, the system silently pulls the correct historical values and prompts the customer to double-check. If something looks off, they can jump straight to the asset page and add a revision right from the report flow.

Screenshot of the revision feature in action with some explanation of the UI. Screenshot of the revision feature in action with some explanation of the UI.

The payoff

For most users, I believe this system is invisible. They never have to think about managing "instances" or closing fiscal years, which makes the app drastically simpler than traditional accounting software. At the same time, our more advanced users, who frequently update their assets information, appreciate how easy it is to generate reports with a few clicks.


Designing around unreliable bank connections.

The problem

Shortly after our initial launch, we added the option to connect bank accounts through a well-known API so customers could automate transaction tracking instead of entering everything manually. But this service connects banks from all over Japan, and those connections are... fragile, to say the least. They can fail without warning and not every update is real-time. Sometimes it takes half a day to get fresh data. And if a user disconnects their bank from the API service on their own, we lose the connection on our end too.

What we rejected

The easy approach would have been to treat the bank connection as binary: it works or it doesn’t, and when it doesn’t, show an error page. But I think that would have left our customers stranded with no visibility into what went wrong and no help towards the resolution. We also needed granularity in error handling as we had cases where one bank would fail while another worked perfectly.

The insight

We realized that connection problems would not be exceptions. On the contrary, they could be, to some users, a relatively standard experience. If we designed for that reality instead of treating it as an edge case, the experience could stay smooth even when the infrastructure wasn’t cooperating. We first decided to map out the many different states of the bank connection and design for each one.

We communicate Attention required Context Resolve
API Credentials are invalid Very High Global / Wallet Cards / Wallet Show Users are directed to API site to reenter their credentials
Wallet Resource not found High Wallet Cards / Wallet Show Convert into manual account, then import again into the manual account to resume
Intervention Required High Wallet Cards / Wallet Show / Import. Accounts Users are directed to API Site and reconnect the bank to their vault
Wallet Update Status Low to Medium Wallet Cards / Wallet Show / Annual Report N/A
Wallet Pending Items Medium Wallet Cards / Wallet Show Users process pending items
Initial sync Wallet High Wallet Cards / Wallet Show Users are redirected to Wallet Show and asked to wait

What we built instead

Every surface that touches bank data has embedded alert states: the dashboard, the wallet list, individual account pages. Using color, messaging, iconography, and dedicated banners, we communicate clearly what went wrong and how to fix it. Journals created from imported transactions survive disconnections so nothing gets lost. We always offer an explanation and whenever possible, a clear path to resolution.

List of some bank related components. List of some bank related components.

The payoff

The system degrades gracefully instead of breaking silently. Our customers always know what’s going on with their bank connection and what to do when something goes wrong. It was important for me to ensure that a part of the frustration that comes from dealing with a third-party API was absorbed by the design and not passed on to the user.


Feature highlights

Screenshots of Oyatoko's receipt scanning feature

Receipt Scanning

Our customers photograph receipts and the app extracts the data through OCR. Transactions are created automatically, no manual entry is required.

Screenshots of Oyatoko's dashboard

Dashboard

The home screen shows asset breakdowns and profit & loss trends at a glance so customers can understand their trust’s financial health without digging through records.

Screenshots of Oyatoko's final report feature

Final Report

An intuitive wizard-like interface to guide users through the process of terminating their trust.


CONCLUSION

Making family trusts feel manageable.

Roughly half of our total customers opt in to use the app when signing their contract. The app is offered as a paid option to the trust service. Those users churn significantly less than the other half who don’t use it. I believe Oyatoko makes it easy for our customers to manage their family trust with peace of mind. Today, Kokorono is the leading independent company on family trusts in Japan.