Tech Talks vol.49 – The Development Story of the Transaction History Download Feature

2025.05.20

The Tech Talks series aims to convey directly the dedication and atmosphere of craftsmanship through the voices of our diverse product team members, gathered from around 50 countries and regions worldwide.

In this edition, we delve into the challenges and learnings from the development of the eagerly awaited transaction history data download feature recently rolled out in PayPay.


Chiueh Yu Jiuan (Gwen)

Product Manager

I am Gwen from Taiwan. After gaining experience as a PM at Taiwanese companies, I was enticed by the prospect of working in the B2C domain, which impacts people’s lives, and joined PayPay in December 2022. I am thrilled to contribute to PayPay, one of Japan’s leading payment apps.


Yana Nugraha

Backend Engineer

I am Yana from Indonesia. Following my tenure as a backend engineer at a travel company and a news website, I joined PayPay in May 2023. Witnessing the cash-centric society upon my arrival in Japan, I was drawn to how PayPay is transforming this landscape.


David Fox

iOS Engineer

Hi, I am David from Northern Ireland and I began working for PayPay in January 2023. I’ve been developing iOS applications for approximately 15 years for various companies in London and Japan. I am passionate about product development and believe strongly in a user experience-first approach to delivering great experiences.


Fransisca Afriani

QA Engineer

I am Fransisca from Indonesia. After starting my career as a developer, I transitioned to a QA Engineer role within the finance sector. I joined PayPay in March 2023 and am now involved in ensuring the quality of PayPay, which profoundly affects everyday life.

Could you give us an overview of this project?

Gwen:
The function we implemented enables users to easily download their transaction history in CSV format via the PayPay app. By allowing transaction history downloads, we aim to assist users in managing their incomes and expenditures in various scenarios. For instance, during tax filings or household budgeting, users can import the downloaded CSV file into a budgeting app or accounting software to simplify and streamline these processes.

We found that our users were not deeply engaged with our financial services and they tended to manually do bookkeeping by checking transactions on PayPay. Therefore, we wanted to cultivate financial literacy among our users by supporting them with bookkeeping, as it is the most common first step in personal financial management.

What were each of your roles in the project?

Gwen:
As the Product Manager, I led the design of the features and roadmap, coordinating with related departments. Since transaction history contains all the data in PayPay, I needed to define specifications and coordinate with relevant teams and stakeholders to align our implementation with different stakeholders (feature/screen owners, upper management, Business/PR/CS team).

Beyond the sheer number of stakeholders, this feature had to be released by February 17, before the start of the final tax return for FY2024. My mission was to vigorously drive development, enhance the UX, resolve all bugs, and ensure the feature’s timely release.

Yana:
My responsibility was to develop the backend components critical for creating and enabling the download of CSV files. I also undertook the task of learning about the nearly 20 different types of transactions on PayPay and determining how each pattern should be incorporated into the transaction history list, subsequently sharing this knowledge with the engineering team.

David:
My role was to implement the feature in the PayPay iOS app. Aside from coding, I also handled reviewing and communicating the technical feasibility of the features required by the business.

For example, the product team were keen to display transaction history spreadsheets within the app rather than force the user out of our application. It was my job here to investigate and document the feasibility of requirements like these before development began.

Additionally, I helped contribute towards the specifications of how the feature actually worked to provide the user with the best possible experience.

Fransisca:
As a QA Engineer, my mission was to ensure that the product being developed meets the requirements and it works as expected. I did this by creating and executing test plans and cases to catch any defects before the product was released. I collaborated with developers, product managers, and designers to understand the requirements and develop testing strategies.

What were the particularly challenging aspects during development?

Yana:
Creating a seamless user experience when downloading vast transaction histories (e.g., a heavy PayPay user downloading all past transactions at once) was a hurdle. Generation could take up to 10 minutes, and any failure during download meant further wait times for users. To avoid a disadvantageous UX, we needed to implement a feature to resume downloads from where they failed, which we handled by implementing a state machine. We manually constructed the state machine without using a framework to reduce load and maintain structure simplicity, enabling smooth restarts from any stage.

Also, transaction histories potentially contain highly confidential information like payments to medical institutions or salary receipts. There was no precedent for functionalities enabling private users to download such sensitive data, necessitating new security measures against unauthorized access and data leaks. Identifying potential high-risk areas, particularly where download links might be accessed by third parties, we introduced a 5-minute time limit on download links to mitigate these risks. Combined with restricting download capability to verified users, we ensured a robust defense against unauthorized access, prioritizing user-first development for a user-friendly feature.

David:
Development of this feature required some fairly complex date operations both at a coding level but also from a UI perspective. Ensuring complex date ranges are processed correctly and the date-related elements of the user interface adhere to the project specification was more of a challenge than expected.

Additionally, interfacing with the backend to generate reports is a two-step operation. We first request a download token which we then use in a second API call. I used the Swift Concurrency framework, a new concurrency model introduced in Swift 5.5, to implement this chaining in a clean and easy-to-understand structure. The result is improved code readability and simplified processing.

Fransisca:
The transaction data in the downloaded report must be correct and consistent. Covering combinations of all types of transactions and payment methods are the most challenging part. During testing, database migration was running simultaneously, which might have caused data issues. So, even after we’ve signed off, we scheduled another test round after that related project was finished to ensure everything still worked properly. Regular information sharing with Yana on data-related topics solidified a relationship conducive to swift bug identification.

Gwen:
The transaction report includes all transactions on PayPay, which requires time to fully understand the various transaction definitions and flows. Team members also had to manage and verify all possible cases to ensure accuracy. In terms of the timeline, we aimed to release this feature in February to maximize its value, allowing users to download transactions as reference documents for tax deductions. However, the project was heavily reliant on the timeline of another backend database migration project, as Fransisca noted.

Coordinating across teams to mitigate the risk of delays required significant effort, but with the support of various teams and squad members, we were able to find a solution and ensure its release in February.

What did you learn from this project?

David:
I developed this feature using SwiftUI, a modern framework for UI layout and data binding. Utilising features like SwiftUI Previews increased the development speed and prototyping flow. This drastically improved the interactions with the project management team.

Yana:
The experience with CSV files was invaluable. Opportunities to engage with CSVs and text encoding were rare, making challenges like Japanese character encoding noteworthy and insightful. My understanding of spreadsheet-related knowledge grew, complemented by backend construction experiences from scratch and pattern standardization adjustments, all providing substantial learning opportunities.

Could you leave a message for potential candidates?

David:
PayPay employs modern technologies like SwiftUI and Swift Concurrency so it’s a great place for those wanting to develop within a modern environment on a challenging yet rewarding product with 69 million users (as of May 2025).

We also care deeply about working backwards to the technology so developers who are interested in contributing to product specifications and ideas will really enjoy it here!

Yana:
PayPay’s development scene demands collaboration beyond differing backgrounds and specialties, promoting candid idea exchange and aiming for unified goals despite disparate perspectives—making it a suitable place for communicatively adept individuals.

Fransisca:
As Yana mentions, communication is vital at PayPay, especially for QA members who liaise with numerous teams during verification, ensuring feature quality. On the other hand, it is also important to be able to work independently as a professional. I’m eager to collaborate with people who are independent and open to communication.

Gwen:
We are both developers and users of PayPay. Thus, our ability to share and develop “wouldn’t it be nice if” ideas is captivating. We look forward to your application if you are interested in enhancing PayPay features.

*Job openings and employee affiliations are current as of the time of the interview.

Career