Every major release version bump (v1.x to v2.0.0) feels like a victory lap.
You tag the release commit in Git, bump versionCode in Gradle, generate signed Android App Bundles, and update release notes.
What release notes never show, however, is the graveyard of rejected ideas.
Software architecture is not defined by what you choose to build; it is defined by what you deliberately choose not to build. For every feature that ships in a production release, a dozen tempting shortcuts, popular third-party SDKs, and user feature requests had to be rejected to protect the integrity of the application.
Here is an honest retrospective on the hardest technical trade-offs we made while releasing FinLedger v2.0.0 (commit 44048d4).
The Feature Prioritization Matrix
During the v2.0.0 release cycle, every proposed capability was evaluated against our core manifesto: Privacy, Accounting Accuracy, and Offline Resilience.
quadrantChart
title FinLedger v2.0.0 Prioritization Matrix
x-axis Low Technical Debt --> High Technical Debt
y-axis Low Architectural Alignment --> High Architectural Alignment
quadrant-1 Must Build (v2.0 Core)
quadrant-2 High Risk / Carefully Architect
quadrant-3 Easy Distractions (Strictly Cut)
quadrant-4 Dangerous Traps (Permanently Rejected)
"Ledger Engine Parity": [0.15, 0.95]
"Atomic Room Transactions": [0.20, 0.90]
"SQLCipher KeyStore Hardening": [0.30, 0.88]
"Flexible In-App Updates": [0.25, 0.75]
"Google Drive REST v3 (Direct)": [0.65, 0.85]
"Multi-Payer Split Engine": [0.70, 0.80]
"Firebase / Crashlytics SDK": [0.85, 0.15]
"Third-Party Telemetry SDKs": [0.90, 0.10]
"Cloud Sync Intermediary Servers": [0.80, 0.25]
"Social Sharing Widgets": [0.35, 0.30]
Trade-Off 1: Rejecting Firebase Analytics and Crashlytics
The single easiest shortcut in mobile development is adding Google Firebase Crashlytics and Google Analytics.
You add two lines to build.gradle.kts, and you instantly get automatic crash reporting, stack trace symbolication, daily active user (DAU) graphs, and screen navigation tracking. Every tutorial recommends it.
For FinLedger, we deliberately chose zero telemetry and zero third-party crash reporting SDKs.
Why?
Because financial privacy is absolute:
- Crashlytics captures device logs, memory states, and exception messages. If an unhandled exception occurs during a bank transaction insert, the crash dump could easily leak transaction amounts, masked account numbers, or merchant notes to remote logging dashboards.
- Analytics SDKs establish persistent tracking identifiers, allowing advertising networks to correlate mobile devices across apps.
The Cost: Without automated cloud crash reporting, diagnosing bugs requires comprehensive local unit testing (1,570 tests) and relying on users who choose to manually submit bug reports with anonymized logs.
The Verdict: Privacy is our core promise. We would rather spend extra hours writing automated tests than embed a tracking SDK into an encrypted financial ledger.
Trade-Off 2: Direct Google Drive REST v3 vs. Turnkey Cloud Backends
When designing cloud backup, the easiest option by far is spinning up a Supabase or Firebase Firestore backend with authentication rules.
A turnkey backend would have taken two days to build. Instead, we spent weeks implementing a direct integration with Google Drive REST API v3 scoped exclusively to the hidden drive.appdata folder.
flowchart TD
subgraph EasyBackend["The Easy Way: Turnkey Cloud Database"]
direction TB
App1["App Client"] -->|"Sends Data"| CompanyServer["Company Backend / Firebase"]
CompanyServer --> CloudDB[("Shared Cloud Database")]
Risk["Risk: Company holds user database, incurs monthly server bills, creates breach target!"]
CompanyServer --- Risk
end
subgraph FinLedgerWay["The FinLedger Way: Direct Client-to-Drive"]
direction TB
App2["App Client"] -->|"Encrypts with AES-256-GCM locally"| Container[".finbak Container"]
Container -->|"Direct OkHttp REST v3 (OAuth2)"| GoogleDrive[("User's Personal Google Drive (appDataFolder)")]
Safety["Safety: Zero company servers. Google only sees ciphertext. Zero ongoing server costs."]
GoogleDrive --- Safety
end
By connecting the Android client directly to the user's personal Google Drive:
- FinLedger operates zero intermediary servers. We have no servers to maintain, no monthly cloud hosting bills, and zero ability to access user data even if subpoenaed.
- The user owns their backup container completely.
- The encrypted backup payload (
.finbak) is encrypted on-device with AES-256-GCM before it ever touches the network.
Trade-Off 3: Pausing Features to Execute 8 Hardening Sprints
In late August 2026, after completing Sprint 10, the backlog was full of exciting feature requests: home screen widgets, receipt OCR scanning, recurring deposit calculators, and stock market live price feeds.
Instead of building those features, we made the painful decision to freeze feature development for nearly two weeks and execute Hardening Sprints H1 through H8:
- Re-auditing financial calculation parity between incremental updates and bulk ledger replays.
- Wrapping all multi-account mutations inside atomic
withTransactionblocks. - Decomposing monolithic UI screens and fixing Jetpack Compose frame jank.
- Upgrading PIN security to 50,000 iterations of salted PBKDF2.
Freezing feature development was emotionally difficult. It felt like we were standing still while other apps were launching new features.
But that hardening cycle is the sole reason FinLedger v2.0.0 achieved 100% test pass rate across 1,570 automated tests with zero database corruption bugs.
Conclusion
Great software is built on principles, not feature checklists.
By choosing hardware encryption over convenience, direct zero-knowledge cloud sync over centralized servers, and mathematical hardening over rushed features, FinLedger v2.0.0 proved that a personal finance application can be modern, beautiful, and unapologetically private.
FinLedger is a privacy-first, offline-first personal finance application for Android that models bank accounts, credit cards, and cash without double-counting.
Explore FinLedger on Google Play: https://play.google.com/store/apps/details?id=com.devanshufinance.app

Top comments (0)